根文件系统制作
一、如何制作一个根文件系统
1、创建根文件系统的目录
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
2、创建设备文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3、安装 /etc
tar etc.tar.gz –C /xxx/rootfs
4、编译内核模块
进入Linux内核目录( linux 2.6.29) make modules ARCH=arm CROSS_COMPILE=arm-linux-
5、安装内核模块
make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs
6 、配置busybox
进入busybox目录执行
make menuconfig
- a、进入 Busybox Settings ->build Options->
-
- 选中 “Build busybox as a static binary”,静态链接
-
- Cross Compiler prefix (arm-linux-)
- b、 Installation Options->
-
- 选中 “Don‘t use /usr”,选中项可以避免 busybox被安装到宿主系统的 /usr目录下,破坏宿主系统
-
- Busybox Installation Prefix (/xxx/rootfs)选项表编译后的busybox的安装位置
- make ARCH=arm CROSS_COMPILE=arm-linux-
- make install
二、Ramdisk
基于前步骤制作好的根文件系统,可进一步制作 ramdisk,步骤如下 :
1、 genext2fs -b 8192 -d /xxx/rootfs ramdisk
** genext2fs为产生ramdisk的工具 **
2、 gzip -9 -f ramdisk
3、制作init ramdisk
mkinitrd initrd-$version $version (Ubuntu下面没有mkinitrd, 相应的命令为 mkinitramfs -o initrd-$version $version)
例:
mkinitrd initrd-2.6.29 2.6.29
**这是将/lib/modules/$vesion 制作成ramdisk**
*$version 可以通过查询/lib/modules下的目录得到
4:解压:
file initrd看是否是gzip compressed data, was "initrd.img"
cp initrd initrd.img.gz gunzip initrd.img.gz
mkdir tmp
cd tmp cpio -ivmd <initrd.new.img
5:压缩:
find . | cpio -c -o > ../initrd.img
gzip ../initrd.img