来源: ChinaUnix博客  作者: ChinaUnix博客   发布时间:2007-01-01 16:29:00

摘 要:在基于linux的嵌入式仿真平台研发中,利用开源工具bootsplash能够定制启动logo、设定控制台背景和显隐启动时的字符信息,甚至能够支持开机进度条的动画显示。本文介绍利用bootsplash打造启动画面的解决方案,涉及内核补丁、用户空间配置等方面的具体工作。
  关键字:嵌入式; 启动;仿真环境
    
  在基于linux的嵌入式仿真平台研发中,终端的美观和可定制是个重要的问题。开机时滚动在屏幕上的字符串和单调的penguin图标,使嵌入式设备仍然脱离不了pc的痕迹,linux控制台上单调的“白纸黑字”型表现方式可谓大煞风景。改造linux控制台使之美观可定制地展示开机信息和logo成为基于嵌入式linux应用的一项重要工作。
    
  开源项目bootsplash(
http://www.bootsplash.org/
)为解决这个问题提供了一个完美的解决方案。Boot-
splash通过对内核打补丁来改变linux framebuffer控制台对图像显示的支持。通过用户空间程式来定制启动logo、设定控制台背景和显隐启动时的字符信息,甚至能够支持开机画面的动画显示。本文介绍利用splashboot打造启动画面的解决方案,涉及内核补丁、用户空间配置等方面的具体工作。
  1 内核补丁和控制工具
  1.1 支持bootsplash的内核补丁
   
  针对不同的内核版本,bootsplash站点上给出了相应的内核补丁。我们所使用的内核版本为2.4.23,下载并给内核打上补丁:
  cd /usr/src/linux
  make mrproper
  patch -Np1 -i ../bootsplash-3.0.7-2.4.23.diff
  重新编译内核:
  make menuconfig
  选上如下的几个参数:
  Code maturity level options --->
  Prompt for development and/or incomplete code/drivers
  Block devices ---> RAM disk support
  Block devices ---> Initial RAM disk (initrd) support
  Console drivers ---> Video mode selection support
  Console drivers ---> Frame-buffer support --->
  Support for frame buffer devices
  VESA VGA graphics console
  Use splash screen instead of boot logo
  然后编译内核:
  make dep && make bzImage
  再把生成的内核拷贝到/boot下:
  cp arch/i386/boot/bzImage /boot/linux-bootsplash
  这样我们得到的新内核bzImage就是支持bootsplash的内核了,剩下的工作就是对bootsplash的定制了。  
  1.2 安装用户空间程式
    
  下载bootsplash工具,解压安装:
  tar ?zxf bootsplash-3.0.7.tar.gz
  cd  bootsplash-3.0.7/Utilities
  make
  cp fbresolution fbmngplay fbtruetype splash /sbin/
  这样完成了对用户空间工具的安装,其实bootsplash分别利用如下的四个程式:splash程式是将需要在framebuffer下显示的图片资源制作成启动ram盘的工具;fbmngplay读mng文档,播放动画;fbtruetype显示truetype字体;fbresolution检查分辨率。后面提到的脚本,只是以不同参数来读取配置文档,调用上面的这几个程式。
  2 开机LOGO的定制

  2.1 配置splash屏幕的主题
    
  前面安装好的splash用户空间程式中有一个程式splash,他需要一个配置文档来指明使用哪个图片、要不要隐藏文本信息的输出等。能够看出“theme”就是splash工具需要的配置文档、图片和其他所需要的文档的集合。有很多已准备好的theme可供挑选,我们也能够定制theme。为了方便起见,我们下载theme-Linux.tar.bz2并以他为theme。
    
  建立目录/etc/bootsplash/themes,解压Theme- Linux.tar.bz2到这个目录下,现在的目录结构应该是:
/etc/bootsplash/themes/Linux
    
  读者朋友能够看看该目录下的bootsplash-1024x768.cfg来观察配置文档的格式。这个简单的文档包含的选项不多,事实上他只是清楚地表明应该显示哪幅图片、控制台显示文本的颜色和背景色连同文本信息输出的位置区域。另外,不要忘了他还能够分别指定verbose和silent模式下显示文档的位置。Silent模式禁止显示启动信息,代之以一个可选的进度条(这需要关于A外包脚本的更多配置)。基于这个配置文档,您能够自己修改以显示自己喜欢的图片和采用自己喜欢的模式。
  2.2 利用splash小工具安装splash主题到initrd
    
  在系统启动的早期阶段,内核还不能读写硬盘。这个阶段要显示图片,那么图片放在什么地方那?答案是把图片写到ramdisk里,这样在启动的时候才能读到,因为这时候还没有加载分区呢。当然不用担心initrd的制作,splash小工具能轻松搞定。Splash小工具能根据基于您选择的配置文档(theme)来自动产生一个initrd。所要做的就是执行如下命令:
    
  splash -s -f /etc/bootsplash/themes/arch/config /arch-1024-boot.cfg  /boot/initrd.splash 
  生成的initrd.splash就是个新的initrd。在GRUB或LILO中加入他就能够了。
  按如下的方法修改GRUB或LILO:
  在GRUB中加入或修改下面的行:
  kernel (hd0,3)/boot/vmlinuz−2.4.21−melenas root=/dev/hda4 vga=791 splash=silent
  initrd (hd0,3)/boot/initrd.splash
  在LILO中加入或修改下面的行:
  vga=791
  initrd=/boot/initrd.splash
  append="splash=silent"
  来看看这几行的意义:
  vga=791: boot splash 将在1024x768 分辨率和65000 色 (16 位色)下显示。Framebuffer的设定要根据我们所使用的theme的分辨率和颜色深度来选择。
  splash=silent: 在silent模式下显示boot splash. 假如您希望用vebose模式,只需删除此行即可。Verbose模式是缺省模式。 
  initrd=/boot/initrd.splash: 这行将initrd.splash调入启动ram盘(图片存于其中)。
  更新LILO或GRUB后,就能够看到精美的启动画面。
  3 启动进度条的显示

  首先我们要弄清楚小工具程式progress(他是和splash程式一起拷到/sbin目录下的)。progress能够在framebuffer 设备(默认情况下是/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 或xterm window上看效果。
  搞清楚progress的用法后,我们来看怎么把他和系统启动联系起来。通过分析Debian的启动代码,我们能够看出:他的启动脚本在每次启动完一个服务程式(xfs, cron, samba 或其他服务程式)后使用progress程式来在指定位置画指定大小的四边形。在Debian中启动脚本有两个:先执行/etc/init.d/rcS然后执行 /etc/init.d/rc。下面研究一下/etc/init.d/rcS代码,注意这个脚本一次调用各个rulevel下的脚本。我们在其中加入画四边形的代码,加入的代码用加黑表示:
  # 初始化变量j 
  # j 为进度条的宽度
  j=20
  for i in /etc/rcS.d/S??*
  do
  [ ! −f "$i" ] &continue
  # 进度条开始
  #
  # 确保进度条宽度不超出范围
  if ((j  /tmp/boots
  mv /tmp/boots /etc/init.d/rc
  chmod 755 /etc/init.d/rc
   
  上面的代码很清楚,获得j的值,在第二个脚本文档rc中寻找字符串“danger_var=…”并把他修改为 “danger_var=结束时的j值”,把修改后的文档另存为/tmp/boots,然后重命名为/etc/init.d/rc并改变执行权限。
    
  假如选用danger_var作为变量名来传递位置值,那么注意在其他启动脚本中不能出现名字冲突。
    
  现在,重启电脑,能够享受美丽的开机进度条了。
  4 结论
  
  通过开源项目bootsplash提供的内核补丁和各种用户空间工具,能够实现对FrameBuffer下的控制台美化和定制。这对于嵌入式仿真环境平台的研发有着重要的意义,使得嵌入式仿真环境平台从一定程度上减少PC的痕迹,成为个性化和高度可定制的平台。
  参考文献:
  [1] Dennis Herbrich,Arch Linux BootSplash-HowTo.  http://www.archlinux.org
  [2] Pedro Jurado Maqueda, BULMA: Graphic boot with bootsplash and progress bar in Debian. http://bulma.net/
  [3] 轻松拿下Bootsplash. http://www.linuxsir.org/bbs/

基于bootsplash的嵌入式linux启动画面定制的更多相关文章

  1. 嵌入式linux启动信息完全注释

    嵌入式linux启动信息完全注释 from:http://www.embedlinux.cn/ShowPost.asp?ThreadID=377 摘要 我们在这里讨论的是对嵌入式linux系统的启动过 ...

  2. 【转】嵌入式Linux启动配置文件及脚本

    原文网址:http://blog.csdn.net/shuaishuai80/article/details/6202497 使用Busybox制作根文件系统时,/etc目录非常重要,它包含了嵌入式L ...

  3. 嵌入式Linux启动配置文件及脚本分…

    使用Busybox制作根文件系统时,/etc目录非常重要,它包含了嵌入式Linux启动所需的配置文件及脚本.由于init进程,或者说linuxrc程序会解析inittab文件,因此就从/etc/ini ...

  4. CH02基于ZYNQ的嵌入式LINUX移植

    CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...

  5. 嵌入式Linux启动过程中的问题积累

    嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...

  6. 嵌入式Linux启动优化手记2 U…

    参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...

  7. 转:嵌入式linux启动时运行的inittab文件

    嵌入式系统下的linux启动配置文件,不同与普通的PC linux启动配置,启动相关文件与文件的内容也要少得多.嵌入式系统下的linux启动过程一般是:     1 在bootloader中制定各种要 ...

  8. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  9. [转载]嵌入式linux启动时运行的inittab文件

    源地址:https://www.cnblogs.com/yfz0/p/5853826.html 嵌入式系统下的linux启动配置文件,不同与普通的PC linux启动配置,启动相关文件与文件的内容也要 ...

随机推荐

  1. checkStyle使用具体解释

    简单介绍 checkStyle是一款代码格式检查工具.它依据设置好的编码规则来自己主动检查代码.比方命名规范,文件长度.代码行长度等等.代码检查工具是保证项目代码质量.统一编码风格的一种重要途径.本篇 ...

  2. 本地filezilla&servervsftp搭配使用

    环境:本地ubuntu系统&serverubuntu系统 本地安装filezilla  apt-get install filezilla '安装filezilla filezilla '执行 ...

  3. leetCode 88.Merge Sorted Array (合并排序数组) 解题思路和方法

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: Y ...

  4. android自己定义TextView

    Android控件中的TextView控件仅仅有一个输入框.可是为了用于的操作方便我们应该实现一些功能: 1. 能够直接将内容删除的功能button 2. 可以记录用户曾经输入的数据,同一时候可以将数 ...

  5. iOS --生产JSON格式,创建JSON文件,创建文件夹,指定储存

    //生成json文件 - (void)onjson { //    如果数组或者字典中存储了  NSString, NSNumber, NSArray, NSDictionary, or NSNull ...

  6. VS中Component Class、User Control及Custom Control的区别 .

    .NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功能.确定创建何种类型的控件可 ...

  7. Sqlite 设置外键级联更新

    Sqlite 设置外键级联更新 选择好外键表和列以后,勾选更新事件,更新方式设置为CASCADE,即可在外键更新时自动更新

  8. EasyNVR无插件流媒体服务器前端技术防止重复提交的方法

    现在随着接触EasyNVR时间越来越长,越发的觉得EasyNVR真的是一个"神器".从功能上来说自身不仅可以拉出来使用(具体功能搜索EasyNVR一定有惊喜!),也可以作为设备端与 ...

  9. Spring Boot:Thymeleaf篇

    Spring Boot干货系列:(四)Thymeleaf篇http://www.cnblogs.com/zheting/p/6707037.html 前言 Web开发是我们平时开发中至关重要的,这里就 ...

  10. 【AWS】亚马逊云常用服务解释

    新公司使用的是亚马逊服务,刚开始的时候,对很多名词不太明白,总结了一下如下 1,EC2 这个是亚马逊的一种服务器服务,可以理解为跟vmware差不多,EC2为虚拟机提供载体,EC2上跑虚拟机服务器. ...