|
|
搞定,中间有些弯路,说说~
1、mkinitrd4.2 默认生成的是cpio型的initrd,portage里面有个已知的bug是生成cpio的参数不对,不是newc型的,除此之外,始终会kernel panic,找不到root。花了很多时间想用cpio的initrd不可得,最后放弃
2、mkinitrd 3.5.77
这个版本的可以生成可以启动的initrd,不过要注意kernel带上real_root参数,否则无法启动。
3、默认生成的initrd大小是3000K,自己改一下脚本就行。不然大小不够装下theme
4、intelfb还是放弃吧。intelfb如果是在lcd上,不支持更改分辨率。而src/linux/init/main.c里面清清楚楚的告诉我们,load initrd是在prepare_namespace之后完成的,init_post调用的,此时如果编译了intelfb,那么已经加载鸟~怎么改也没用。所以只能用uvesafb。
5、uvesafb需要v86d才能工作,记得添加到initrd 中去,还有要添加dev/zero c 1 5
6、linux/scripts/gen_initramfs_list.sh和linux/usr/gen_init_cpio两个工具要善用。
7、initramfs,initrd,cpio,ramdisk,这些概念最好搞清楚些。
内核首先找的是linux/usr/initramfs.cpio.gz这个映像build in的,如果这个cpio中有/init存在,就不会执行prepare_namespace了,而不管是cpio型的initrd还是ramdisk型的,都是在执行了prepare_namespace之后才加载的。cpio型的 initrd和initramfs都是查找/init来启动。ramdisk的用/linuxrc。
最nb的办法当然是用initramfs,那样所有的mount都是由用户自己定义的,但是现在我还找不到一个制作能带动系统的initramfs.cpio.gz,从mkinitrd生成的反复修改都失败,暂时放在这里吧。
8、splashutils的doc说没有人需要用老的ramdisk initrd来加载,其实偶现在就还是需要滴嘛,自己手动吧theme和splash_helper复制进去,还有mem的node,启动之后很快就是1280x800的splash,确实很pp。
9、如果有大虾有制作带有/init的initramfs cpio的包的指教,那就是抛砖引玉了~:% |
|