上篇:CF卡分区, extlinux的安装
中篇:构建根文件系统
下篇:2.6内核剪裁及Busybox编译配置及其分析
硬件平台:研华3355
软件:busybox-1.13.3, extlinux 3.63, linux-2.6.32
开发环境: Ubuntu 9.10
(一)CF卡的分区, 格式化:
PC机上利用多口读卡器连接CF卡,
fdisk -l 查看CF卡的分区, 例如我的CF卡对应的是/dev/sdb;
fdisk /dev/sdb,进入fdisk分区命令提示, 简单的介绍fdisk分区过程
m 打印提示;
p 打印分区信息;
d 删除分区, 假设已经存在分区/dev/sdb1, 按下d后输入1, 即删除了此分区;
n 添加分区, 这里只添加一个p(primary), 并占用所有的存储空间;
a 设置某分区为boot分区, 即可引导分区;
w 将改动写入, 并推出fdisk, 键入w之前, 先用p查看当前分区情况;
q 不做改动退出;
将分区格式化为ext2格式: mkfs.ext2 /dev/sdb1
检测ext2格式: e2fsck -a /dev/sdb1
注:如果不运行e2fsck, 系统启动的时候会报"EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended"
(二)CF卡上bootloader的创建
常见的有GRUB, LILO, syslinux, extlinux, 后两者更适合U盘/CF卡,
syslinux适用于dos分区, 而extlinux适用于ext2分区, 下载地址:
http://syslinux.zytor.com/wiki/index.php/SYSLINUX
http://syslinux.zytor.com/wiki/index.php/EXTLINUX
Ubuntu 9.10用apt-get install extlinux安装, 设备名为/dev/sdb1,挂载到/mnt/cf :mount /dev/sdb1 /mnt/cf
extlinux -i /mnt/cf
注意syslinux和extlinux的不同:
syslinux的配置文件是syslinux.cfg, 要先安装syslinux再挂载分区,例 syslinux /dev/sdb1;
extlinux的配置文件extlinux.conf, 要先把分区挂载然后安装extlinux, 例extlinux -i /mnt/cf;
在/mnt/cf创建配置文件extlinux.conf然后编辑, 内容如下:
default emblinux
timeout 10
prompt 0
label emblinux
kernel bzImage
append noinitrd root=/dev/sda1 rw init=/linuxrc ide=nodma
注意CF卡在工控机上被识别为sda, 而不是hda上, noinitrd表示没有挂载initrd.img,
类似于嵌入式arm平台的linux"noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
详细解释在下面的链接
http://www.sudu.cn/info/html/edu/20080407/262839.html
(三)向CF卡拷贝Kernel
内核的剪裁及配置, 请见http://blog.csdn.net/dos5gw/archive/2010/10/26/5965992.aspx
make mrproper #清除从前编译内核时残留的.O文件
make menuconfig
make dep #(确保关键文件在正确的位置)
make clean #(确保所有有关文件都处于最新版本状态)
make bzImage
然后把生成的/linux-2.6.32/arch/x86/boot/bzImage拷贝至CF卡分区/dev/sdb1下.
//-----------------------------------------------
//--linux大致启动过程-------------------------
grub(bl) ->kernel -> initrd.img -> rootfs -> sbin/init(linuxrc, 仅针对busybox)
解释如下:
kernel :桌面os中一般为vmlinuz文件,或者zImage、bzImage;
initrd.img :临时的根文件系统映像全名是initial ram disk(google keywords initrd 制作),使用完后被卸载,然后转入真正的根文件,当然在有些嵌入式系统中也可以不卸载initrd,而继续作为根文件系统;
rootfs:不解释;
sbin/init: 见http://hi.baidu.com/tcxx05/blog/item/15cfc7fc0cd0d089b801a0d8.html