jiangtao9999 发表于 2006-5-12 19:30:08

留个笔记:在ML上实现gensplash,但未完全成功

一直在研究 gensplash for ML 。
但实现太麻烦了,需要很多地方进行修改。
留下一点经验,算是这段时间的成果:

1、依赖的 kcc 在 http://www.kernel.org/pub/linux/libs/klibc/
2、gensplash 需要 patch 内核,用 splash 就可以了,vesa-tng 不是必须的,但为了更好,加上也可以,但 ATI 显卡需要给 vesafb 加 nocrtc 参数,但这样会导致不能 >60hz 刷新率。用旧的 VGA 或者针对显卡的 fb也行。
3、splash 内核补丁实现的是内核 Initial 时段的 splash 显示,这里的显示属于静态界面,进度条不能工作(进度条是通过命令画上去的,不是后台服务方式自动画)其他按键也不管用。这个时段是内核初始化阶段。
4、直到内核初始化成功,开始执行启动脚本的时候,splash 才能通过预先在脚本里写好的命令开始显示。一般是通过 splash_util 来实现全部功能。
5、启动后首先需要启动 splash_util 的后台监控(参数 -d),但 ML 的配置文件不能正确生成键盘的 evdev 设备符号,导致不能通过按 F2 切换显示方式。(这个功能无法实现,我都是暂时通过 Ctrl + F1 切换到字符界面)
6、进度条是画上去的,想要多长画多长。进度条的定义是在 /etc/splash 里的外观 config 决定,这里给出长度就可以,从 0~65535 ,splash 的例子代码函数是一个计算公式。使用这个函数时给出 0-100 的百分比就可以,感觉比 bootsplash 的简单。
7、只要启动脚本修改正确,完全可以借助 ML 原来的 bootsplash 控制代码来控制 gensplash 的进度条(进度条控制函数都一样,把内容改了就可以)
8、启动最后要用 splash_util 给所有需要的控制台设置需要的 theme ,但似乎设置 theme 后控制台的 splash 效果会关闭,需要重新给个 on 。
9、不打 patch 的话 splash_util 应该也可以工作,kernel 的 splash 补丁只是提供在 initial 阶段显示 splash 的功能。
10、kernel 阶段的 theme 是固定的,只能通过 splash_geninitramfs 给定一个,生成到 initrd 里,在 kernel 命令行里指定的 theme 一定要相同。建议名称一律 default ,/etc/splash 里把 default 进行 ln -s 到想要的 theme ,这样换 theme 只要 ln -sf 后,splash_geninitramfs 一个 default 就可以了。同时启动脚本里的 splash 命令也可以借助 default 进行同时更换,几乎不用修改设置。当然,kernel 的和启动脚本所使用的 theme 可以不同,启动的半途也可以更换,不同的控制台也可以用不同的 theme ,全看 splash_util 怎么给参数。
11、可以说 gensplash 和内核无关,只要 console 是图形状态,应该就能工作。
12、splash_util 是万能的,splash 上显示的文字也可以用他定义,但此功能我未尝试。

因为现在在 Gentoo 里,暂时不能提供需要的命令及修改。

以上笔记也可能存在错误。

yhlfh 发表于 2006-8-14 22:03:54

老大,ml究竟怎么修改启动画面啊?怎么在多个bootsplash主题之间切换?

jiangtao9999 发表于 2006-8-14 23:48:25

bootsplash 需要建立新的 initrd
根据参数决定用哪个主题。
因为需要在内核刚刚开始初始化显示的时候就要启动 bootsplash ,这个时候需要把资源放到内核可以读取的 RAMDisk 里,也就是 initrd 里。

至于怎么用,看 splahs 和 mkinitrd 两个命令。
我记得 ML 的 mkinitrd 是打过补丁的,你替换相应的文件,重新 mkinitrd 就能用了。
替换的话,还要注意那些文件格式的要求,大小,分辨率,颜色数都是重要的,有的时候用一个别的程序建立的文件,就不能显示,但另一个程序保存的就能使用。这里的资源是内核,程序功能限制很严重,必须完全符合要求。

gensplahs 的开始部分和 bootsplash 性质一样,等系统进入 init 状态,gensplahs 就有自己的程序了,这里就和 bootsplash 完全不同了。同样,gensplash 可以在启动的时候指定 theme ,但需要 initrd 里提供相应的 theme ,而且theme的分辨率和内核初始化后的显示也要一样,不然也是无法显示。

他们两个命令不一样的,所以我没办法告诉你怎么弄。
页: [1]
查看完整版本: 留个笔记:在ML上实现gensplash,但未完全成功