Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4611694
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: LINUX

2007-01-22 22:14:52


From: http://alwaysgo.blog.hexun.com/4955952_d.html
把U盘分两个区
Disk /dev/sda: 511 MB, 511863296 bytes
31 heads, 32 sectors/track, 1007 cylinders
Units = cylinders of 992 * 512 = 507904 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          99       49088    6  FAT16
/dev/sda2             100        1007      450368   83  Linux



其中,
sda1:
boot.msg
ldlinux.sys
syslinux.cfg    这三个文件估计是从以上的那个URL下载下来的syslinux生成的,现在没有时间,想要的可以直接 找我. student9119_cn@sina.com, 知道的同志补充一下,其实就是一个bootloader
vmlinuz         直接把fc4的/boot/vmlinuz-2.6.11-1.1369_FC4 copy来
initrdu.gz      下面会讲它的制作过程
----------------------------------------------------------------------
syslinux.cfg :
default linux
prompt 1
display boot.msg
timeout 1
label linux
        kernel vmlinuz
        read-write
        append initrd=initrdu.gz ramdisk_blocksize=1024 ramdisk_size=4096 rw root=/dev/sda2 vga=791
也许append 参数不用那么多,可以自己试试.

--------------------------------------------------------------------------
sda2就是根文件系统,要看你怎么制作了,我是用busybox做的一个.直接从FC4的根文件系统形copy一些文件过去也 可以,在本文的最后,我把它的文件list 贴出来供大家参考.

由于FC4默认根文件系统是ext3,所以,sda2应该mkfs成ext3的.ext2应该可以,不过要在下面制作initrdu.gz的过程 中,mkinitrd的时候preload ext2的模块.

------------------------------------------------------------------
# initrdu.gz的制作过程.
export LC_CTYPE="UTF-8"
如果不运行这个,可能会出现这个的提示:
sort: sort.c:701:inittables_mb: 断言“mblength != (size_t)-1 && mblength != (size_t)-2”失败。
# mkinitrd --preload=scsi_mod --preload=ehci-hcd --preload=uhci-hcd --preload=sd_mod --preload=usb-storage initrdu.gz 2.6.11-1.1369_FC4
这样,当前目录下就有一个initrdu.gz的文件了.
# mkdir usb-initrd
# gzip -d initrdu.gz
如果你的文件名不是以.gz结尾的,请把它mv成.gz结尾的,否则,有你好看的,不信试试 :)
运行之后,initrdu.gz -> initrdu
# cd usb-initrd
# cpio -iv < ../initrdu
# vi init
在这两行
insmod /lib/ext3.ko
/sbin/udevstart
之间加入一个sleep  10
以保证模块加载完之后U盘有一个初始化的时间.
这时候你还需要一个static链接的sleep命令,我是把busybox安装目录下(_install/bin)
的bin/sleep链接和bin/busybox都拷到当前目录下的bin/
我不知道如何单独编译一个静态的sleep命令,只好把整个busybox文件都copy过来.这个busybox可以在只选一个sleep命令的下情况下编译出来,这样应该会比较小一点.

# rm ../initrdu
# find . | cpio -c -o  > ../initrdu
# cd ../
# gzip -v9 initrdu
# cp initrdu.gz 到sda1

# syslinux /dev/sda1  (不知道这时候有没有必要先把sda1 umount)

OK, 我的U盘系统就这样完成了
至于你想要U盘系统有什么样的功能,那要看你根文件系统了(/dev/sda2)
我打算在这上面做一个多媒体中心.欢迎交流.

补充一点,如果能要做一个功能丰富的U盘系统,根文件系统的那些基本命令就没有必要用busybox来代替了,因为如 果加一些功能的话,那些基本库是逃不掉的.
阅读(2100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~