在前一段时间我们在做嵌入式的时候,要把系统作到U盘上去。遇到了一个问题就是系统如何从U盘启动,因为如果按照正常的流程来的话,那么U盘还未初始化完毕就要进行加载,这样将导致系统引导失败。
可以有几个方法来解决这个问题:
1)先生成initrd文件,系统启动的时候是先在内存中启动一个小型系统,再把控制权交给U盘上的根系统。
修改initrd.img中linuxrc文件中的sleep,将时间改得长一点。
将USB的驱动编译到内核里面。
2)向内核打补丁
3)2.6.11以后的内核不用对USB设备启动打补丁了,因为内核里已经包含了该功能,
只要在引导内核时给内核传递一个参数rootdelay即可,如下(Grub实例),rootdelay=5 表示等待5秒,我经过测试,OK!
root (hd0,1) #我从U盘启动时Grub把U盘认成hd0,所以(hd0,1)就是sda2
kernel /boot/vmlinuz-2.6.13.4 ro root=/dev/sda2 rootdelay=5 vga=791
boot
其支持代码在 init/do_mounts.c
第三条我是最近才看到的,要是当时看到的话,就可以省掉很多时间。
阅读(1846) | 评论(2) | 转发(0) |