ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:19.23KB ,
资源ID:7946616      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7946616.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux内核之基于Bootsplash嵌入式Linux启动画面定制.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux内核之基于Bootsplash嵌入式Linux启动画面定制.docx

1、Linux内核之基于Bootsplash嵌入式Linux启动画面定制Linux内核之基于Bootsplash嵌入式Linux启动画面定制 Linux内核之基于Bootsplash嵌入式Linux启动画面定制在基于linux的嵌入式仿真平台开发中,终端的美观和可定制是一个重要的问题。开机时滚动在屏幕上的字符串和单调的penguin图标,使嵌入式设备仍然脱离不了pc的痕迹,linux控制台上单调的“白纸黑字”型表现方式可谓大煞风景。改造linux控制台使之美观可定制地展示开机信息和logo成为基于嵌入式linux应用的一项重要工作。 开源项目bootsplash(http:/www.bootspl

2、ash.org/)为解决这个问题提供了一个完美的解决方案。Boot-splash通过对内核打补丁来改变linuxframebuffer控制台对图形显示的支持。通过用户空间程序来定制启动logo、设定控制台背景和显隐启动时的字符信息,甚至可以支持开机画面的动画显示。本文介绍利用splashboot打造启动画面的解决方案,涉及内核补丁、用户空间设置等方面的具体工作。1 内核补丁和控制工具1.1 支持bootsplash的内核补丁 针对不同的内核版本,bootsplash站点上给出了相应的内核补丁。我们所使用的内核版本为2.4.23,下载并给内核打上补丁:cd /usr/src/linuxmake

3、mrproperpatch -Np1 -i ./bootsplash-3.0.7-2.4.23.diff重新编译内核:make menuconfig选上如下的几个参数:Code maturity level options ->Prompt for development and/or incomplete code/driversBlock devices -> RAM disk supportBlock devices -> Initial RAM disk (initrd) supportConsole drivers -> Video mode selectio

4、n supportConsole drivers -> Frame-buffer support ->Support for frame buffer devicesVESA VGA graphics consoleUse splash screen instead of boot logo然后编译内核:make dep && make bzImage再把生成的内核拷贝到/boot下:cp arch/i386/boot/bzImage /boot/linux-bootsplash这样我们得到的新内核bzImage就是支持bootsplash的内核了,剩下的工作就是对

5、bootsplash的定制了。1.2 安装用户空间程序 下载bootsplash工具,解压安装:tar zxf bootsplash-3.0.7.tar.gzcd bootsplash-3.0.7/Utilitiesmakecp fbresolution fbmngplay fbtruetype splash /sbin/这样完成了对用户空间工具的安装,其实bootsplash分别利用如下的四个程序:splash程序是将需要在framebuffer下显示的图片资源制作成启动ram盘的工具;fbmngplay读mng文件,播放动画;fbtruetype显示truetype字体;fbresolut

6、ion检查分辨率。后面提到的脚本,只是以不同参数来读取配置文件,调用上面的这几个程序。2 开机LOGO的定制2.1 设置splash屏幕的主题 前面安装好的splash用户空间程序中有一个程序splash,它需要一个配置文件来指明使用哪个图片、要不要隐藏文本信息的输出等。可以看出“theme”就是splash工具需要的配置文件、图片和其他所需要的文件的集合。有很多已经准备好的theme可供挑选,我们也可以定制theme。为了方便起见,我们下载theme-Linux.tar.bz2并以它为theme。 建立目录/etc/bootsplash/themes,解压Theme- Linux.tar.b

7、z2到这个目录下,现在的目录结构应该是:/etc/bootsplash/themes/Linux 读者朋友可以看看该目录下的bootsplash-1024x768.cfg来观察配置文件的格式。这个简单的文件包含的选项不多,事实上它只是清楚地表明应该显示哪幅图片、控制台显示文本的颜色和背景色以及文本信息输出的位置区域。另外,不要忘了它还可以分别指定verbose和silent模式下显示文件的位置。Silent模式禁止显示启动信息,代之以一个可选的进度条(这需要关于A外包脚本的更多设置)。基于这个配置文件,你可以自己修改以显示自己喜欢的图片和采用自己喜欢的模式。2.2 利用splash小工具安装s

8、plash主题到initrd 在系统启动的早期阶段,内核还不能读写硬盘。这个阶段要显示图片,那么图片放在什么地方那?答案是把图片写到ramdisk里,这样在启动的时候才能读到,因为这时候还没有加载分区呢。当然不用担心initrd的制作,splash小工具能轻松搞定。Splash小工具能根据基于你选择的配置文件(theme)来自动产生一个initrd。所要做的就是执行如下命令: splash -s -f /etc/bootsplash/themes/arch/config /arch-1024-boot.cfg /boot/initrd.splash 生成的initrd.splash就是一个新的

9、initrd。在GRUB或LILO中加入它就可以了。按如下的方法修改GRUB或LILO:在GRUB中加入或修改下面的行:kernel (hd0,3)/boot/vmlinuz?2.4.21?melenas root=/dev/hda4 vga=791 splash=silentinitrd (hd0,3)/boot/initrd.splash在LILO中加入或修改下面的行:vga=791initrd=/boot/initrd.splashappend=splash=silent来看看这几行的意义:vga=791: boot splash 将在1024x768 分辨率和65000 色 (16 位

10、色)下显示。Framebuffer的设定要根据我们所使用的theme的分辨率和颜色深度来选择。splash=silent: 在silent模式下显示boot splash. 如果你希望用vebose模式,只需删除此行即可。Verbose模式是缺省模式。 initrd=/boot/initrd.splash: 这行将initrd.splash调入启动ram盘(图片存于其中)。更新LILO或GRUB后,就可以看到精美的启动画面。 3 启动进度条的显示首先我们要弄清楚小工具程序progress(它是和splash程序一起拷到/sbin目录下的)。progress能够在framebuffer设备(默认

11、情况下是/dev/fb0)上画四边形。不带任何参数运行progress,我们可以看到该程序的可选参数列表,我们感兴趣的几个参数是:x: 四边形起始点的x坐标y: 四边形起始点的y坐标dx: 四边形的宽度dy: 四边形的高度color: 四边形的颜色。这是一个16进制数,于web页上表示颜色的一致。举例说明之:progress 0 0 512 384 FFFFFF将会在屏幕左上角画一个白色的四边形,这个四边形占据四分之一屏幕。progress 256 192 521 384 FCD192将会在屏幕正中间位置画一个黄色的四边形。看这些例子的效果应该在tty终端上运行,不要在Konsole 或xte

12、rm window上看效果。搞清楚progress的用法后,我们来看怎么把它与系统启动联系起来。通过分析Debian的启动代码,我们可以看出:它的启动脚本在每次启动完一个服务程序(xfs, cron, samba或其他服务程序)后使用progress程序来在指定位置画指定大小的四边形。在Debian中启动脚本有两个:先执行/etc/init.d/rcS然后执行/etc/init.d/rc。下面研究一下/etc/init.d/rcS代码,注意这个脚本一次调用各个rulevel下的脚本。我们在其中加入画四边形的代码,加入的代码用加黑表示: #danger_var=395j=danger_varfo

13、r i in /etc/rc$runlevel.d/S*do ! ?f $i &continueif $previous != N & $previous != S then# Find start script in previous runlevel and# stop script in this runlevel.#suffix=$i#/etc/rc$runlevel.d/S0?90?9stop=/etc/rc$runlevel.d/K0?90?9$suffixprevious_start=/etc/rc$previous.d/S0?90?9$suffix# If th

14、ere is a start script in the previous level# and _no_ stop script in this level, we dont# have to re?start the service.# ?f $previous_start & ! ?f $stop &continuefi#继续进度条绘制#保证进度条宽度不超出范围if (j <616)then/usr/local/bin/progress 204 666 $j 21 FCD123let j=j+15fi#结束进度条绘制case $runlevel in0|6)star

15、tup $i stop;*)startup $i start;esac done 这段代码以同样的方式接着画四边形进度条。但是danger_var是什么呢?前面说过为了平滑地接着第一部分画,我们需要知道第一部分四边形画到什么位置结束的。这个位置就用danger_var来记录。问题又来了,怎么将第一个脚本里的变量传到第二个脚本?可以在第一个脚本/etc/init.d/rcS的末尾加上如下的代码: sed s/danger_var=0?9*/danger_var=$j/g /etc/init.d/rc > /tmp/bootsmv /tmp/boots /etc/init.d/rcchmod

16、 755 /etc/init.d/rc 上面的代码很清楚,获得j的值,在第二个脚本文件rc中寻找字符串“danger_var=”并把它修改为 “danger_var=结束时的j值”,把修改后的文件另存为/tmp/boots,然后重命名为/etc/init.d/rc并改变执行权限。 如果选用danger_var作为变量名来传递位置值,那么注意在其他启动脚本中不能出现名字冲突。 现在,重启计算机,可以享受美丽的开机进度条了。4 结论通过开源项目bootsplash提供的内核补丁和各种用户空间工具,可以实现对FrameBuffer下的控制台美化和定制。这对于嵌入式仿真环境平台的开发有着重要的意义,使

17、得嵌入式仿真环境平台从一定程度上减少PC的痕迹,成为个性化和高度可定制的平台。 # 初始化变量j # j 为进度条的宽度j=20for i in /etc/rcS.d/S?*do ! ?f $i &continue# 进度条开始# 保证进度条宽度不超出范围if (j <616)then# 此时调用progress程序,画比前一次宽一个单位 #(15个像素)的进度条# x y dx dy color/usr/local/bin/progress 204 667 $j 21 FCD123let j=j+15fi# 结束进度条绘制case $i in*.sh)(trap ? INT QUIT TSTPset start. $i);*)#遍历sh 文件后, 启动子进程$i start ;esac done

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1