LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 10967|回复: 13

我制作U盘上的LFS过程小结

[复制链接]
发表于 2005-12-20 15:27:47 | 显示全部楼层 |阅读模式
我制作U盘上的LFS过程小结:20051220

我希望自己的LFS运行在U盘上,远期目标是要制作一个基于LFS的编程练习U盘,方便自己的编程练习。今天算是工作的第一步,先把LFS做到U盘上。

把Linux做到U盘上通常的做法是采用两步启动法:先生成initrd文件,系统启动的时候是先在内存中启动一个小型系统,再把控制权交给U盘上的根系统。我不喜欢这种做法----虽然这种做法的好处很多----而且我觉得制作initrd文件、编译busybox等比较麻烦。我希望自己U盘上的LFS能够一步启动,这就需要打个补丁。今天试了一下,成功,记录于下,供大家参考,也为自己以后查看方便。

1 我是在Sarge下制作LFS6.1.1成功。

2 在Sarge主系统打开一个终端,下载下面这个针对USB启动Linux的、内核为2.6版本的补丁:
http://dedasys.com/freesoftware/patches/blkdev_wakeup.patch
并把这个补丁复制到LFS下的sources目录之中。

3 在Sarge系统下再打开一个终端,chroot进入自己的LFS。

4 在LFS下解压kernel2.6.11.12的源码,进入linux-2.6.11.12的源码目录当中先打补丁:
    #cd sources
    #tar jxvf linux-2.6.11.12.tar.bz2
    #cd linux-2.6.11.12
    #patch –Np1 –i ../blkdev_wakeup.patch

5 然后就是常规的内核编译了。注意选上那些SCSI的东西。但是我没有选择支持模块,我好象不需要。比如说网卡吧,我能用到的电脑都是8139,我就把它直接编译进内核了。
    #make mrproper
    #make menuconfig
    #make

6 把我的128M的U盘分区:
    #fdisk /dev/sda
我把前面100M作为根目录,后面20几M作为交换分区,注意/dev/sda1设置为可启动的。

7 格式化U盘:
    #mke2fs /dev/sda1
    #mkswap /dev/sda2

8 拷贝grub文件(无论是Sarge主系统还是LFS系统的都可以)
    # mount /dev/sda1 /theDirYouLike    (后者是指你挂载U盘第一个分区的目录)
    #cp –R /boot /theDirYouLike
然后把里面原先的内核删除

9 启动grub以使U盘能由grub引导:
    # grub
grub> root(hd1,0)
    grub> setup (hd1)     (注意以上都是hd1代表U盘)
    grub> quit

10 拷贝内核到U盘:
    #cp $LFS/sources/linux-2.6.11.12/arch/i386/boot/bzImage /theDirYouLike/vmlinuz

11 编辑你的U盘上的grub配置文件:
    #nano /theDirYouLike/boot/grub/menu.lst
文件内容为:
    default 0
    timeout 10
    title LFS on USB
    kernel=(hd0,0)/vmlinuz
    root=/dev/sda1

12 复制LFS的除boot proc sys外的其他目录和文件文件----当然,我已经把自己的LFS删减到100M以下:
    #cp –R {etc,var,usr ……} /theDirYouLike

记得退出前要   
    # umount /theDirYouLike

    好了,现在你可以启动U盘上面的LFS了。
发表于 2005-12-20 18:35:42 | 显示全部楼层
楼主应该不是用glibc吧
用的是uclibc吧,否则很难缩到这么小的空间
回复 支持 反对

使用道具 举报

发表于 2005-12-21 22:22:00 | 显示全部楼层
我希望自己U盘上的LFS能够一步启动,这就需要打个补丁。

这个补丁是干嘛的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-22 08:39:27 | 显示全部楼层
Post by 终极幻想
这个补丁是干嘛的?



不打补丁的时候,内核启动完了U盘还没有初始化完,会造成内核找不到
/dev/sda1,也就是找不到根文件系统.

这个补丁就是解决这个问题,相当于initrd在linuxrc里面让机器等待
几秒的作用.
回复 支持 反对

使用道具 举报

发表于 2006-9-27 17:14:25 | 显示全部楼层
  哎,现在2.6的补丁都出来了啊,我去年查了N多资料,看了N多的贴子,就是没有解决,一直到现在都没有成功在U盘上启动过,后来,儿子出世没有时间搞,现在总算腾出一点时间来了,继续搞我的LFS,我试试照着楼主的做做看能不能成功。
  哦,对了,你的那个补丁适合哪个版本的内核啊。2.6.N??
回复 支持 反对

使用道具 举报

发表于 2006-9-27 17:41:52 | 显示全部楼层
Post by 独孤不羁
  哎,现在2.6的补丁都出来了啊,我去年查了N多资料,看了N多的贴子,就是没有解决,一直到现在都没有成功在U盘上启动过,后来,儿子出世没有时间搞,现在总算腾出一点时间来了,继续搞我的LFS,我试试照着楼主的做做看能不能成功。
  哦,对了,你的那个补丁适合哪个版本的内核啊。2.6.N??

多嘴一句,
都有孩子了,恭喜啊!
回复 支持 反对

使用道具 举报

发表于 2006-9-27 19:28:33 | 显示全部楼层
Post by 独孤不羁
  哎,现在2.6的补丁都出来了啊,我去年查了N多资料,看了N多的贴子,就是没有解决,一直到现在都没有成功在U盘上启动过,后来,儿子出世没有时间搞,现在总算腾出一点时间来了,继续搞我的LFS,我试试照着楼主的做做看能不能成功。
  哦,对了,你的那个补丁适合哪个版本的内核啊。2.6.N??
Sandr0 兄都说过自 2.6.11 以后的内核不需要这个延时补丁了,还去找延时补丁干嘛?而且Sandr0 兄其实说得很白了,只是有一点点没有交待而矣。

http://www.linuxsir.cn/bbs/showthread.php?t=217714

刚好今天我把移动硬盘的内核升级为 2.6.18,我顺便在此说一说要注意的地方就是了。

由於新版内核的 /init/do_mounts.c 都已更新过了,因此要从外置设备去启动 Linux 比以往简单多了,更不用再去消化以前介绍给你的那篇 IBM Developer Works 的内功心法。

部骤如下:

1. 外置备一般是被模拟成为 SCSI 设备的,由於无需再用 initrd,而系统时需要 SCSI 的支持,所以要把[color="Red"]下列东西编译进内核而[color="Red"]不要编译成模块:

SCSI device support --->
<*> SCSI device support
这个相当於 CONFIG_SCSI (亦即是 scsi_mod)

<*> SCSI disk support
这个相当於 CONFIG_BLK_DEV_SD (亦即是 sd_mod)

USB support --->
<*> Support for Host-side USB
这个相当於 CONFIG_USB (亦即是 usbcore)

<*> EHCI HCD (USB 2.0) support
这个相当於 CONFIG_USB_EHCI_HCD (亦即是 ehci-hcd)

<*> UHCI HCD (most Intel and Via) support
这个相当於 CONFIG_USB_UHCI_HCD (亦即是 uhci-hcd)

<*> OHCI HCD support
这个相当於 CONFIG_USB_OHCI_HCD (亦即是 ohci-hcd)

<*> USB mass storage support
这个相当於 CONFIG_USB_STORAGE (亦即是 usb-storage)

<*> USB Human Interface Device (full HID) support
这个相当於 CONFIG_USB_HID (亦即是 usbhid)


2. 把编译成功的内核安装好

3. 修改 menu.lst,除了指定正确的路径外,在内核後面加一个參数 rootdelay=8,比如

...
kernel (hd0,0)/boot/vmlinuz root=/dev/hda [color="Red"]rootdelay=8 ....
...

rootdelay=8 的作用跟以前在 initrd 内用 sleep 8 是一样的意思,这个时间跟移动设备上的驱动芯片有关,快则 4 秒左右,慢则要 5 至 6 秒,取 8 秒相当保险了,你可以自行测试一下

4. 重启

好了,这样就算完成,Good Luck!

By the way,有子万事足,在此恭喜狐独兄不再狐独了。
回复 支持 反对

使用道具 举报

发表于 2007-8-16 11:13:19 | 显示全部楼层
Post by yhyzh


12 复制LFS的除boot proc sys外的其他目录和文件文件----当然,我已经把自己的LFS删减到100M以下:
    #cp –R {etc,var,usr ……} /theDirYouLike



为什么不要proc sys 这两个目呢?
   #cp –R {etc,var,usr ……} /theDirYouLike
              是不是该在{etc,var,usr ……} 前加个/
回复 支持 反对

使用道具 举报

发表于 2007-8-16 14:19:49 | 显示全部楼层
应该还需要加入 /proc, /sys两个目录,否则系统启动后无法正常登录,至少我试过了是这样的!
回复 支持 反对

使用道具 举报

发表于 2009-1-3 01:26:53 | 显示全部楼层
不知道现在用ubuntu行不,找个时间试一试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表