基本上宅公园世纪家里头看电脑 一天大概玩12小时 偶尔吹吹空调 现在头有点晕晕的 请问是怎么了

如何做到不用initrd启动系统
我靠,我从第一天玩 gentoo 开始就不用 initrd 引导偶的 gentoo。
除非用了 bootsplash。
只要把所有开机需要的东西编译进内核就可以了。
我不喜欢 gentoo 里的 genkernel,总是自己动手编译。
UID1536&帖子6361&精华&积分10683&阅读权限255&来自The zoo&在线时间2 小时&注册时间&最后登录&
没用过cdlinux,但是kde2000说的是对的。可能是cdlinux把整个文件系统都作成一个压缩的initrd了
UID2275&帖子19296&精华&积分36767&阅读权限245&来自瞎扯淡俱乐部&在线时间157 小时&注册时间&最后登录&
楼上的,如果把全部文件系统压成initrd,而没有linuxrc这个文件,内核是不是直接当根分区用了,而不在乎是否存在linuxrc
公社特别嘉宾
cdlinux.gz是ovlfs格式,不是initrd,要在加载ovlfs模块后才能将它mount上来,解压也要指定的工具,你把ovlfs下载下来就能得到相应的工具和驱动。
linuxrc不是必须的。linuxrc是特殊的,由内核执行,其它启动脚本一般由init扫描inittab执行,xx::sysinitxxxxxxx的xxxxxxxx就是linuxrc之外第一个执行的脚本。
在一般的linux里,第一次根分区挂载是由内核完成的,一般是只读的(如果传入参数有ro),目的可能是为了必要时检查磁盘,第二次就是启动脚本根据fstab重新挂载。
如果你的文件系统不大1M左右,你甚至可以把文件系统做进内核里。
UID315&帖子7276&精华&积分17891&阅读权限120&来自China&在线时间17 小时&注册时间&最后登录&
但是有个问题,ovlfs好象不像你说的是模块
应该已经在内核里了
因为CDlinux.gz是直接有内核心加载的
公社特别嘉宾
可以是模块,也可以是编到内核里。
UID315&帖子7276&精华&积分17891&阅读权限120&来自China&在线时间17 小时&注册时间&最后登录&
不知不觉&&我都一年没接触linux了
回来温习一下&&现在回头看这个问题清晰多了
[quote:d601bc1678=&hhuyf&]不知不觉&&我都一年没接触linux了
回来温习一下&&现在回头看这个问题清晰多了[/quote]
Weiwei加油& &我要追三顺!后使用快捷导航没有帐号?
查看: 2313|回复: 1
基于Bootsplash嵌入式Linux启动画面定制
在线时间65 小时
威望21742分
芯币6692枚
TA的帖子TA的资源
裸片初长成(中级), 积分 21742, 距离下一级还需 8258 积分
裸片初长成(中级), 积分 21742, 距离下一级还需 8258 积分
在基于linux的嵌入式仿真平台开发中,终端的美观和可定制是一个重要的问题。开机时滚动在屏幕上的字符串和单调的penguin图标,使嵌入式设备仍然脱离不了pc的痕迹,linux控制台上单调的“白纸黑字”型表现方式可谓大煞风景。改造linux控制台使之美观可定制地展示开机信息和logo成为基于嵌入式linux应用的一项重要工作。
  开源项目bootsplash()为解决这个问题提供了一个完美的解决方案。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
  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-.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&#.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 将在 分辨率和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 为进度条的宽度
  for i in /etc/rcS.d/S??*
  [ ! −f &$i& ] &continue
  # 进度条开始
  # 保证进度条宽度不超出范围
  if ((j &616))
  # 此时调用progress程序,画比前一次宽一个单位
  #(15个像素)的进度条
  # x y dx dy color
  /usr/local/bin/progress 204 667 $j 21 FCD123
  let j=j+15
  # 结束进度条绘制
  case &$i& in
  trap − INT QUIT TSTP
  set start
  #遍历sh 文件后, 启动子进程
  $i start
上面的代码画出了四边形的第一部分,我们需要接着画与/etc/init.d/rc相关的第二部分。为了平滑地接着第一部分画,我们需要知道第一部分四边形画到什么位置结束的。
  danger_var=395
  j=danger_var
  for i in /etc/rc$runlevel.d/S*
  [ ! −f $i ] &continue
  if [ $previous != N ] &[ $previous != S ]
  # Find start script in previous runlevel and
  # stop script in this runlevel.
  suffix=${i#/etc/rc$runlevel.d/S[0&#−9]}
  stop=/etc/rc$runlevel.d/K[0&#−9]$suffix
  previous_start=/etc/rc$previous.d/S[0&#−9]$suffix
  # If there is a start script in the previous level
  # and _no_ stop script in this level, we don&t
  # have to re−start the service.
  [ −f $previous_start ] &[ ! −f $stop ] &continue
  #继续进度条绘制
  #保证进度条宽度不超出范围
  if ((j &616))
  /usr/local/bin/progress 204 666 $j 21 FCD123
  let j=j+15
  #结束进度条绘制
  case &$runlevel& in
  startup $i stop
  startup $i start
  这段代码以同样的方式接着画四边形进度条。但是danger_var是什么呢?前面说过为了平滑地接着第一部分画,我们需要知道第一部分四边形画到什么位置结束的。这个位置就用danger_var来记录。问题又来了,怎么将第一个脚本里的变量传到第二个脚本?可以在第一个脚本/etc/init.d /rcS的末尾加上如下的代码:
  sed &s/danger_var=[0−9]*/danger_var=&$j&/g& /etc/init.d/rc & /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的痕迹,成为个性化和高度可定制的平台。
在线时间316 小时
威望3039分
芯币2786枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 3039, 距离下一级还需 461 积分
五彩晶圆(初级), 积分 3039, 距离下一级还需 461 积分
努力学习,天天向上!
工业应用的生命周期很长,我们要为我们的工业自动化添砖加瓦,嘿嘿!
Powered by
逛了这许久,何不进去瞧瞧?*8天*★不完美解决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办? - 查看主题 & Ubuntu中文论坛
&[ 17 篇帖子 ]&
&文章标题 : *8天*★不完美解决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
如题....启动后先是正常的显示splash,进度条在那里滚动。接着就应该是进度条不断填满了,可是这时splash图像不见了,只能看文字刷屏!怎么办?........稍微总结下:现在判断是resume,即休眠模块不能自动找到swap分区。前段时间我装了另一个linux系统,因为共用一个swap分区,默认把swap分区格式化了一遍,导致uuid值改变。
搜索发现,swap分区的uuid值改变会导致ubuntu的休眠模块找不到swap而产生问题。直接影响就是启动时usplash不能正常运行(会被打断)。但是按网上的方法手动修复不成功。唯有在启动时加上resume参数指定swap分区uuid值才能解决问题。
12:21,总共编辑了 7 次
&文章标题 : Re: 我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
都没人知道啊.....
&文章标题 : Re: ★悬而未决★我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
自己顶起,就不信没人知道.........
&文章标题 : Re: ★悬而未决★――――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
11:20帖子: 990地址: 枫叶刀市
接收感谢: 0 次
splash被终端输出错误打断了,一般是磁盘扫描什么的仔细看你splash中断前后的输出就知道是什么打断了
_________________Thinkpad T400
&文章标题 : Re: ★悬而未决★――――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
19:26帖子: 635
送出感谢: 0 次
接收感谢: 0 次
自从装了startup-manager就再也没出现过splash的问题了。
_________________Everything that has a beginning has an end.
&文章标题 : Re: ★悬而未决★――――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
Nile 写道:splash被终端输出错误打断了,一般是磁盘扫描什么的仔细看你splash中断前后的输出就知道是什么打断了你说的这个我知道。应该不是这个原因。所有的启动任务都没提示错误,也不是进行fsck。-----断点是在滚动条来回弹结束后,开始进行填满时!我有个朋友觉得应该是与显卡配置有关的问题,不过他也说不清楚。.......
&文章标题 : Re: *6天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
16:38帖子: 11
送出感谢: 0 次
接收感谢: 0 次
1. Make sure you have the initramfs-tools update2. sudo blkid3. Check that swap line UUID from /etc/fstab matches swap UUID from step 2, if not change fstab.4. Check that the UUID in /etc/initramfs-tools/conf.d/resume matches the swap UUID from step 2, if not change resume file.5. sudo update-initramfs -u6. Restart我也是这个问题,通过上述方法解决了。
&文章标题 : Re: *6天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
看起来挺靠谱的,不过不太行啊。1
第一点是说保证initramfs-tools是最新的,是吧?反正我是这样理解的,看了,我的源里最新的了,0.85eubuntu39.22
然后就查看swap的uuid值。
确实我的分区有点乱,因为删了硬盘里处在中间的一个分区,导致swap值改变;之前都不能自动swapon的,我通过其它方法查到正确的值后更改了/etc/fatab。
接着第四点,那个文件里的值是以前的错误值,这次我就改了。3
执行第五点4
重启,还是那样!!不过还是要感谢xprotector兄弟!
&文章标题 : Re: *7天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
3:09帖子: 5773
送出感谢: 0 次
artwork正确安装?
_________________HUNT Unfortunately No Talent...
&文章标题 : Re: *7天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
HuntXu 写道:artwork正确安装?我没动过artwork。也没有提示什么包损坏啊
&文章标题 : Re: *8天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
21:52帖子: 154
送出感谢: 0 次
接收感谢: 0 次
其实论坛有点冷!
&文章标题 : Re: *8天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
22:15帖子: 896
送出感谢: 0 次
接收感谢: 0 次
。。。。8天算什么。。。。自从我在rc.local里加了点小脚本和就一直如此。。。尽管rc.local是登录前才执行的。。。。。。。既然提出来了。。。那我就先在自己这整整感觉是内核本身的问题
&文章标题 : Re: *8天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
22:15帖子: 896
送出感谢: 0 次
接收感谢: 0 次
查了下发现我的usplash只运行了10秒。。。
hardy-.png [ 123.15 KiB | 被浏览 573 次 ]
&文章标题 : Re: *8天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
22:15帖子: 896
送出感谢: 0 次
接收感谢: 0 次
从图上不难看出是ubuntu的休眠模块出错了(resume)
&文章标题 : Re: *8天*★悬而未决★―――我的usplash只在开头显示,然后就不见了,相当于不用splash内核参数....怎么办?发表于 :
22:15帖子: 896
送出感谢: 0 次
接收感谢: 0 次
然后我在/boot/grub/menu.lst添加了resume相关内容就又回到了以前到network才报错的状态了估计关了resume应该也可以(noresume)参考示例title
Ubuntu 8.04.1, kernel 2.6.24-21-genericroot
(hd0,1)kernel
/boot/vmlinuz-2.6.24-21-generic root=UUID=fd-4ef0-95fd-b5acd4e27757 resume=UUID=08-40d5-b959-40c ro quiet splashinitrd
/boot/initrd.img-2.6.24-21-genericquiet
hardy-.png [ 129.09 KiB | 被浏览 570 次 ]
显示帖子 : 全部帖子1天7天2周1个月3个月6个月1年&排序 作者发表时间文章标题 升序降序&
&[ 17 篇帖子 ]&
正在浏览此版面的用户:没有注册用户 和 2 位游客
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件
选择一个版面
------------------
公告/注意事项
& &新闻和通知
& &校园社团支持
& && &华东校区
& && &华南校区
& && &华北校区
& && &华中校区
& && &东北校区
& && &西北校区
& && &港澳台校区
& && &国外校区
& &软件推荐
& &非常任务
系统安装区
& &教学和常见问答
& && &课堂教学和培训
& &初学者园地 - 16.10 - Yakkety Yak
& &系统安装和升级
& && &新立得和软件源
& && &Wubi安装讨论
& &启动和引导
& &网卡问题以及网络和拨号
& && &校园网拨号
& &笔记本、UMPC支持
& &手机和平板
& && &Ubuntu移动应用开发
& &常用硬件支持
& &系统架构支持
配置美化区
& &字体美化和中文支持
& && &个人配置文件存放点
& &桌面特效
& &窗口管理器
& &屏幕抓图
& &办公、图像、机械电子设计等
& && &Vim和Emacs
& &因特网相关软件
& &影音多媒体
& &Wine及其分支
& &游戏和游戏模拟器
& &虚拟机和虚拟化
& &其它类软件
& &开源模板库
服务器管理
& &服务器基础应用
& &数据库管理
& &服务器维护和硬件相关
& &Ubuntu VPS
参与Ubuntu开发
& &软件和文档翻译
& &编译或打包
& &Ubuntu错误报告
程序设计区
& &Shell脚本
& &GTK+和QT
& &软件/网站开发
& && &Python/Php/Perl
& && &C/C++/Java
& &内核及嵌入式开发
& &开源小工具
& &Ubuntu 17.04
& &Ubuntu 16.04 LTS
& &Ubuntu 14.04 LTS
& &Ubuntu 12.04 LTS
& &Ubuntu 10.04 LTS
& &老旧版本支持
& && &Ubuntu 15.10
& && &Ubuntu 15.04
& && &Ubuntu 14.10
衍生发行版
& &Ubuntu GNOME
& &Kubuntu
& &Xubuntu & Lubuntu
& &Ubuntu中文衍生版
& && &UbuntuKylin
& &Ubuntu国外衍生版
& && &Mint
& &Ubuntu衍生版制作
& &其它类Unix OS发行版
& && &Arch发行版
& && &Debian发行版
& && &OpenSUSE发行版
& && &Deepin
& &深度PK版
& &Ubuntu故事和感慨
& &Full Circle开源杂志
分享交流区
& &同城交流
& &线下活动专版
& &Ubuntu宣传推广
& &论坛管理
& && && &Ubuntu中文网上商店轻松拿下Bootsplash - Linx时代 - ChinaUnix.net
轻松拿下Bootsplash
作者:tram
10:16:22 来自:www.linuxsir.org
安装Bootsplash手记。我的内核是2.4.23,LFS版本是5.0后的cvs1222。1.下载所需内核补丁,工具和主题:2.给内核打补丁,并加上所需要的内核参数。cd /usr/src/linuxmake mrproperpatch -Np1 -i ../bootsplash-3.0.7-2.4.23.diffmake 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 selection 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/lfs-bootsplash再在grub的配置文件/boot/grub/menu.lst里面增加一项:title LFS Boot Splashroot (hd0,6)kernel /boot/lfs-bootsplash root=/dev/hda7 ro现在这个已经能启动了,不过还缺少一些boot splash需要的参数,我们后面还要改的。3.安装bootsplash-3.0.7里面的工具解压,并进入bootsplash-3.0.7/Utilities目录。执行命令:makecp fbresolution fbmngplay fbtruetype splash /sbin/4.把图片用splash程序写到ramdisk里,这样在启动的时候才能读到,因为这时候还没有加载分区呢。建立目录/etc/bootsplash/themes,解压Theme-Linux.tar.bz2到这个目录下,现在的目录结构应该是:/etc/bootsplash/themes/Linuxln -s Linux current再使用splash程序:/sbin/splash -s -f /etc/bootsplash/themes/Linux/config/bootsplash-.cfg && /boot/initrd.splash这时候,就需要修改刚才的menu.lst文件了,改成:title LFS Boot Splashroot (hd0,6)kernel /boot/lfs-bootsplash root=/dev/hda7 ro vga=791 splash=silentinitrd /boot/initrd.splash现在重启,就能看到可爱的小企鹅了,按F2,会变成verbose模式。5.加个进度条。这一步需要修改启动脚本。打开文件/etc/rc.d/init.d,在最后加入:
progressbar()
if [ $# != 1 ]
echo "Usage: progressbar {progress}"
echo "show $(( 65534 * $1 / 100 ))" & /proc/splash
}这个就是进度条函数了。要使用这个函数,还需要在具体的启动脚本里添加调用语句。我一般是用运行级3的,这时的启动过程,需要经过rcsysinit.d和rc3.d两个目录。我的这两个目录下面的链接是这样:[root:/etc/rc.d/rc3.d]# ls /etc/rc.d/rcsysinit.d/S10swap S30checkfs S50cleanfs S70loadkeys S20mountproc S40mountfs S60setclock S80localnet[root:/etc/rc.d/rc3.d]# ls /etc/rc.d/rc3.d/S10sysklogd S25random S40alsa现在就需要根据个人的情况,编辑相应的启动脚本。别忘了,所有的启动脚本都在/etc/rc.d/init.d下面。按照我的情况,需要编辑的脚本是:checkfs mountfs cleanfs setclock loadkeys localnet sysklogd random 和 alsa.为什么不编辑前两个脚本swap和mountproc呢?这是因为,progressbar函数里用到了/proc/splash,而在 mountproc之前,这个文件是不存在的。一共是10个脚本,在每个脚本的loadproc那一句(有些脚本没有loadproc的,这就需要根据情况来看了,反正都是在start参数后面,而在evaluate_retval前面的)前面,加上:progressbar XXX这个XXX是小于100的数字,也就是表示启动时进度条的百分比。要说明的是,这个数字按照启动顺序,只能增大,要不然,进度条就会反着走了。启动顺序就是我上面列出的从小到大,从rcsysinit.d到rc3.d。举个例子,第一个要编辑的是S30checkfs,就进入/etc/rc.d/init.d目录,打开checkfs脚本,这个脚本不仅没有 loadproc,而且连start参数也没有,但没关系,我们找到evaluate_retval,它前面的一句就是真正执行的语句,如下:echo "Mounting root file system in read-only mode..."mount -n -o remount,ro /evaluate_retval我把它改成:echo "Mounting root file system in read-only mode..."progressbar 10mount -n -o remount,ro /evaluate_retval其他的也差不多。由于执行各个脚本的时间不太清楚,所以需要经过仔细调整,才能让进度条走得均匀。不过这个问题倒是不大,只要能从0走到100就差不多了吧:)现在重启,就能看到进度条了。不过我做完了以后,发现意思不大,因为在checkfs之前,进度条不走,而开始走了以后,很快就到100%啦,呵呵,可能服务装多了以后,效果更明显吧。6.动画效果在前面的bootsplash-3.0.7.tar.bz2解压后,里面有个Scripts目录,这里提供了bootanim和splash.sh两个脚本,但它都是用于suse的,对于LFS不太适用,因此我做了两个脚本:bootanim.sh:
#!/bin/bash
# splash.sh - This shell script triggers bootsplash actions during
# system boot/shutdown. It can be run by the init scripts repeatedly
# specifying the currently executed system script.
# This script is used to play animations/sounds/show text/move the
# progress bar, etc.
# We call this function from /etc/rc.status:rc_splash()
# This prog you may redistribute it under
# the terms of the GNU General Public License. This program has
# absolutely no warranty.
Stefan Reinauer, &stepan@suse.de&
# this script expects the following environment variables for an
# operable
# progress bar:
sscripts = number of start scripts to be executed for runlevel change
kscripts = number of stop scripts to be executed for runlevel change
progress = number of currently executed start/stop script
RUNLEVEL = runlevel to be reached.
# To play animations, it's advised that you have an animations.cfg in
# theme's config directory specifying the initscript name for an event
# the command to be executed:
fsck start:bootanim start bounce.mng
master:bootanim stop
for more information.
_procsplash="`cat /proc/splash 2&/dev/null`"
THEME="current"
#test -f /etc/sysconfig/bootsplash && . /etc/sysconfig/bootsplash
test ! -d "/etc/bootsplash/themes/$THEME" && exit 0
# parse animations.cfg. This part should not be handled by the
# splash binary.
function box() { } # ignore box descriptions in the config file
"/etc/bootsplash/themes/$THEME/config/bootsplash-`fbresolution`.cfg" &&
. /etc/bootsplash/themes/$THEME/config/bootsplash-`fbresolution`.cfg
if [ -f /etc/bootsplash/themes/$THEME/config/animations.cfg ]; then
COMMAND="`cat /etc/bootsplash/themes/$THEME/config/animations.cfg |
grep "^$1"|cut -f2 -d\:`"
eval $COMMAND
fi第二个是bootanim:
#!/bin/bash
# bootanim - boot animation wrapper script for fbmngplay
# This script parses /usr/share/splash/current/config/bootsplash-XxY.cfg
# to determine the correct animation position.
# (C) 2002 SuSE AG. Written by Stefan Reinauer &stepan@suse.de&
# modified by Michael Aichler &micha at aichler dot net&
echo "Usage: `basename $0` COMMAND [OPTIONS] mng1 [mng2 ...]"
cat && EOF
Available commands:
starts given animation
fades out all running animations
immediately stops all animations
kills current and starts next animation.
Options for use with start command:
echo -e "`fbmngplay -h 2&&1 | grep -v \"usage:\" | grep
if [ ! -x /sbin/splash ]; then
echo "`basename $0`: can't find splash utility"
DIRECTORY=/etc/bootsplash/themes/current/animations
OPTIONS=""
console=""
case "$1" in
# We fall through here.
killall -q -2 fbmngplay
killall -q fbmngplay
killall -q -USR1 fbmngplay
echo "`basename $0`: illegal parameter."
# We end up in bootanim start
for arg in $*; do
if [ "${arg#*.}" == "mng" ]; then
FILES="$FILES $arg"
test "$arg" == "-b" && buffer="true"
test "$arg" == "-c" && console="true"
OPTIONS="$OPTIONS $arg"
"/etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg" &&
. /etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg
test -z "$buffer" && OPTIONS="$OPTIONS -b"
test -z "$console" && OPTIONS="$OPTIONS -c 1"
OPTIONS="$OPTIONS -x $ax -y $ay"
CMDLINE="fbmngplay $OPTIONS"
for file in $FILES; do
CMDLINE="$CMDLINE ${DIRECTORY}/${file}"
eval "$CMDLINE &"把这两个脚本保存好,然后:chmod 755 bootanim.sh bootanim &&cp bootanim.sh bootanim /sbin这两个脚本以及前面安装的fbmngplay程序是用来处理动画效果的。不过,动画效果还需要主题的支持。我前面下载的主题Linux,不支持动画效果。关于主题所支持的功能,参见:我下载了一个Redmond的主题,它能支持动画。与前面的做法一样,还是解压到/etc/bootsplash/themes目录下,并删除老的current链接,新建一个:rm currentln -s Redmond current由于主题换了,自然就需要重新写initrd文件了:/sbin/splash -s -f /etc/bootsplash/themes/current/config/bootsplash-.cfg && /boot/initrd.splash为了使用动画,还要在/etc/rc.d/init.d/functions里增加新的函数。
if [ $# = 0 ]
echo "Usage: animate {hook}"
/sbin/bootanim.sh "$*"
}还要修改启动脚本,使用这个函数要比progressbar复杂一点。需要在启动脚本里添加:animate HOOK这个HOOK的值,要到/etc/bootsplash/themes/current/config/animations.cfg文件里找。对于Redmond这个主题,这个文件的内容是:fsck start:bootanim start bounce.mngmaster:bootanim stopshutdown: bootanim start bounce.mng这里的格式是:HOOK:command冒号前面的,是需要增加到启动脚本里的内容,而后面的,是真正执行的命令。我修改了三个脚本,第一个是checkfs(动画开始),第二个是alsa(动画结束),第三个是/etc/rc.d/rc6.d里面的第一个alsa(显示关机画面).例:checkfs脚本,修改后相关内容如下:echo "Mounting root file system in read-only mode..."progressbar 10mount -n -o remount,ro /animate fsck startevaluate_retvalalsa脚本要修改两个地方,开机动画结束,应该在start参数里,而关机画面,则是在stop参数里。如下:
echo "Starting ALSA...
Restoring volumes..."
progressbar 100
animate master
loadproc /usr/sbin/alsactl restore
Loading MIDI font..."
#loadproc sfxload /path/to/soundfont
echo "Stopping ALSA...
Saving volumes......"
animate shutdown
loadproc /usr/sbin/alsactl store
Removing MIDI font.........."
#loadproc sfxload -i现在开机的时候比较正常了,既有背景,又有动画。没有进度条是因为这个主题不支持进度条。关机的时候还不太好,只有动画,没有全图。7.关机画面。在你关机执行的第一个脚本里加入echo "silent" & /proc/splash还没忘记吧,要在/etc/rc.d/rc6.d里面找以K打头,数字最小的链接。我的机子上是alsa,改了以后,stop参数是:
echo "Stopping ALSA...
Saving volumes......"
echo "silent" && /proc/splash
animate shutdown
loadproc /usr/sbin/alsactl store
Removing MIDI font.........."
#loadproc sfxload -i
;要说明的是,这个关机画面其实就是把主题切换到silent模式,所以如果主题不支持silent模式,就没有用了。Linux和Redmond都支持silent模式的。同样,在关机的时候也可以显示进度条,只要按照上面所说的,在/etc/rc.d/rc6.d下的脚本里添加progressbar 1-100 就行了,注意要加到stop参数里。8.不同控制台用不同的背景图片。splash -n -s -u 1 \/etc/bootsplash/themes/{任何主题}/config/bootsplash-.cfg那个1表示第2个终端。为了一启动就每个控制台控制台都有背景,可以把这些语句加到你的启动脚本里。我是加到alsa脚本里了。如下:
echo "Starting ALSA...
Restoring volumes..."
progressbar 100
animate master
splash -n -s -u 1 \
/etc/bootsplash/themes/Linux/config/bootsplash-.cfg
splash -n -s -u 2 \
/etc/bootsplash/themes/SuSE-8.2/config/bootsplash-.cfg
splash -n -s -u 3 \
/etc/bootsplash/themes/SuSE-8.2/config/bootsplash-.cfg
loadproc /usr/sbin/alsactl restore
Loading MIDI font..."
#loadproc sfxload /path/to/soundfont
;如果要把背景去掉:splash -n -s -u 1注意,有的主题是不能做背景的,比如Redmond,因为它只有silent模式,而normal模式的图片是全黑的,做背景的话,和正常的没什么区别,看不到图。但Linux主题是支持做背景的。9.使用其他分辨率。主要是主题要支持,我看下来,还是支持最好,不过方法都是一样的啦。下面给一个表,是vga模式与分辨率和色深的关系:Colors-----640x480-----800x600----------256----------769---------771----------773----------77532000--------784---------787----------790----------79365000--------785---------788----------791----------79416.7 Mill.---786---------789----------792----------795我用的vga是791(没忘吧?在grub的menu.lst里面),也就是000种颜色。10.定做自己的主题bootsplash作为背景,应该是比较顺利的,做进度条稍麻烦,需要手工调整时间,做动画最麻烦,因为没有通用的脚本支持。我上面的脚本只是能在Redmond主题下使用,效果还不错,其他版本的主题,就不知道如何了。为什么没有一个既好看,又能支持所有特性的主题呢?最后我选择用Linux作为主题,因为不想让LFS背着个SuSE的名字。为了让Linux主题支持动画,我把 Redmond下面的animation目录和config/animations文件拷贝到了Linux主题下,并且修改Linux主题下的 config/bootsplash-.cfg文件,增加两个动画所需要的变量。ax和ay是动画显示的位置,我添加如下:ax=420ay=10011.支持TrueType字体可以在启动过程中显示TrueType字体,定制消息:)首先要修改主题。Linux主题不支持TrueType字体。在/etc/bootsplash/themes/Linux/config/bootsplash-.cfg中添加:# ttf message output parameterstext_x=204text_y=544text_size=36text_color=0xeef4ff这样就行了。建立文件/sbin/bootttf:
#!/bin/bash -x
# bootanim - boot animation wrapper script for fbmngplay
# This script parses /usr/share/splash/current/config/bootsplash-XxY.cfg
# to determine the correct animation position.
# (C) 2002 SuSE AG. Written by Stefan Reinauer &stepan@suse.de&
# modified by Michael Aichler &micha at aichler dot net&
function box() { } # ignore box descriptions in the config file
"/etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg" &&
. /etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg
STRING="What are you going to do?"
case "$1" in
STRING="Booting LFS...Press F2 for verbose mode"
STRING="Shutting down...Press F2 if you want to"
if [ "$text_x" != "" -a "$text_y" != "" \
-a "$text_color" != "" -a "$text_size" != "" ];
fbtruetype -x $text_x -y $text_y -t $text_color -s $text_size \
"$_boot $STRING"
fi这个文件的case那里,可以接受不同的参数,你可以修改或增加自己的消息。使这个脚本可执行:chmod 755 /sbin/bootttf然后是在启动脚本里调用。我只用了两个消息,呵呵。在checkfs中:/sbin/bootttf startanimate fsck startecho "Checking file systems..."#Note: -a option used to be -p; but this fails e.g. on fsck.minixfsck $options -a -A -C -Terror_value=$?animate fsck stop第一行就是调用啦。在alsa中,显示关机消息:
echo "Stopping ALSA...
Saving volumes......"
echo "silent" && /proc/splash
/sbin/bootttf shutdown
progressbar 1
animate shutdown
loadproc /usr/sbin/alsactl store
Removing MIDI font.........."
#loadproc sfxload -i
;现在重启,就什么都有啦:)更进一步的主题定制,需要阅读bootsplash.org上的文档。参考:bootsplash的官方网站。上面可以找到自定义主题的内容,以及其他版本内核的补丁。如果需要编译静态的fbmngplay,以便在没有加载/usr分区时使用,可以参考这里。
此帖于 04-01-16
被 tram 编辑.
(编辑:zhou_rm)
【】【】【】
Linux文档搜索
以下网友评论只代表网友个人观点,不代表ChinaUnix.net观点}

我要回帖

更多关于 上宅集团 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信