分类: LINUX
2010-12-08 20:40:05
根文件系统的制作
(贴在这是为了方便分析,和大家一起讨论分析,尊重原创)
使用Busybox-1.16.1制作根文件系统
Busybox下载地址:
交叉编译器:arm-linux-4.3.2
一、 STEP 1 创建根目录:
在home目录下创建/home/rootfs文件夹,用作新构建的根文件系统的根目录
#cd /home
#mkdir rootfs
创建根文件系统目录,主要包括以下目录
/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin
#mkdir dev etc lib usr var proc tmp home root mnt bin sbin sys
二、 STEP 2 构建 /bin、/sbin、linuxrc:
解压并进入busybox-1.16.1目录,执行
# make defconfig
# make menuconfig
Busybox Setting ----->
Build Options ----->
[*]Build BusyBox as a static binary (no shared libs) \\静态编译busybox
指定交叉编译器为
(/usr/local/arm/4.3.2/bin/arm-linux-)Cross Compiler prefix
Installation Options ----->
选择上 Don’t use /usr
Busybox Library Tuning--->
[*]Username shell prompts
[*]Query cursor position from terminal
[*] Fancy shell prompts (这个要是不加会出现[\u@\h \W]#ls这样的错误)
编译出的busybox的shell命令解释器支持显示当前路径及主机信息
保存退出
# make
# make install
在busybox目录下会看见 _install目录,里面有/bin /sbin linuxrc三个文件
三、 STEP 3 构建etc目录:
1) 进入根文件系统rootfs的etc目录,执行如下操作:
#cd /home/rootfs/etc
拷贝Busybox-1.2.0/examples/bootfloopy/etc/* 到当前目录下
# cp –r busybox-1.16.1/examples/bootfloopy/etc/* rootfs/etc
修改inittab,把第二项改为::respawn:-/bin/login
2) 拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow到rootfs/etc下。
# cp /etc/passwd rootfs/etc
# cp /etc/group rootfs/etc
# cp /etc/shadow roofs/etc
对以上三个文件修改,只保存与root相关 的项,根据具体情况内容会有所不同。
修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/ash (也就是只保留第一行)
修改group为root:x:0:root
修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::
登陆开发板时需输入用户名密码,同虚拟机相同
3) 修改profile
PATH=/bin:/sbin:/usr/bin:/usr/sbin \\可执行程序 环境变量
export LD_LIBRARY_PATH=/lib:/usr/lib \\动态链接库 环境变量
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]# '
显示主机名、当前路径等信息:
4) 修改 etc/init.d/rc.S文件
/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir /var/tmp
/bin/mkdir /var/modules
/bin/mkdir /var/run
/bin/mkdir /var/log
/bin/mkdir -p /dev/pts
/bin/mkdir -p /dev/shm
/sbin/mdev -s
/bin/mount –a
echo /sbin/mdev > /proc/sys/kernel/hotplug
5) 修改etc/fstab文件,增加以下文件
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
四、 STEP 4 构建lib目录:
进入 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t /lib目录
将以下动态库拷贝到rootfs/lib下
#cp *so* roofs/lib -a
进入以下目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
将以下动态库拷贝到rootfs/lib下
#cp ./libstdc++.so.* rootfs/lib -a
五、 SETP5下载验证
经过以上几步,一个最基本的linux根文件系统已经制作完毕
可以将制作好的根文件系统通过nfs、cramfs、yaffs工具进行验证
1)CRAMFS工具包主要有两个工具,分别是mkcramfs和cramfsck
mkcramfs工具用来创建CRAMFS文件系统
# mkcramfs dirname outfile
cramfsck工具用来进行CRAMFS文件系统的释放和检查
# cramfsck file -x dir
2)Yaffs工具包yaffs.tar.gz的使用:
#tar zxvf yaffs.tar.gz
#cd yaffs;
#cd untils
#make //会产生mkyaffsimage
用mkyaffsimage制作yaffs文件系统镜像:
#mkyaffsimage usr usr.yaffs
与cramfs不同,这个过程是不可逆的