一.根文件系统介绍
文件系统:在存储设备上组织文件的方法
根文件系统:内核启动时挂载的第一个文件系统 –> 根文件系统
Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:
/etc/, /dev/, /usr/, /usr/bin/, /bin/, /var/等。/etc/目录主要含有一些系统配置文件;dev/含有设备特殊文件,用于使用文件操作语句操作设备;/usr/存放库函数、手册和其它一些文件。/bin/存放执行程序;/var/用于存放系统运行时可变的数据或者是日志等信息。
二.根文件系统的制作
采用busybox开源软件制作
busybox源码包:busybox-1.21 .1.tar.bz2
源码存放目录:/opt/busybox/
源码操作:
解压源码:
tar –jxvf busybox-1.21.1.tar.bz2
cd busybox-1.21.1
配置源码:make menuconfig
重新定制模块操作命令
Linux Module Utilities —>
[*] Simplified modutils (NEW) //去掉
[*] insmod //添加
[*] rmmod //添加、
[*] lsmod//添加
[*] modprobe //添加
[*] Blacklist support//添加
[*] depmod //添加
取出闪存flash操作命令
Miscellaneous Utilities —>
[*] nandwrite (NEW) //去掉
[*] nanddump (NEW) //去掉
保存退出
修改Makefile文件
vim Makefile
将CROSS_COMPILE ?= 修改为CROSS_COMPILE=arm-linux-
将ARCH ?= $(SUBARCH)修改为ARCH=arm
编译和安装 make && make install
默认安装当前目录的_install目录:ls _install
用file命令检查编译结果busybox可执行文件的属性:f
ile _install/bin/busybox,打印信息如下:ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped //红色字体的内容必须为ARM,而不是intel X86
进入安装目录:cd _install
创建目录:
mkdir dev lib etc/init.d proc sys home mnt var tmp root -p
添加系统启动配置文件
vim etc/inittab //添加如下内容
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
保存退出
添加文件系统配置文件
vim etc/fstab //添加如下内容
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
说明:sysfs,procfs,tmpfs都是虚拟文件系统,文件系统相关的信息存在内存中。
保存退出
添加系统启动服务配置脚本
vim etc/init.d/rcS //添加内容如下
/bin/mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
保存退出
修改rcS文件权限
chmod 777 etc/init.d/rcS
添加 busybox运行时所需动态库
动态库添加原则:应用软件需要哪些动态库,就添加,不相关不做添加,以便节省闪存空间
应用软件编译连接需要的动态库在交叉编译器中获取:
动态库路径:
/home/tarena/workdir/toolchains/opt/S5PV210-crosstools/4.4.6/arm-concenwit-linux-gnueabi/lib/
查看busybox可执行程序所需的动态库
arm-linux-readelf -a bin/busybox | grep “Shared” //提示信息如下:
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
可知需要动态库为:libc和libm两个动态库
拷贝所需动态库到根文件系统lib目录下
find /home/tarena/workdir/toolchains/opt/S5PV210-crosstools/4.4.6/arm-concenwit-linux-gnueabi/lib/ ( -name “libc-“-o -name “libc.so” ) -exec cp -frd {} lib/ \; //拷贝标准C库
find /home/tarena/workdir/toolchains/opt/S5PV210-crosstools/4.4.6/arm-concenwit-linux-gnueabi/lib/ ( -name “libm-“-o -name “libm.so” ) -exec cp -frd {} lib/ \; //拷贝数学运算库
find /home/tarena/workdir/toolchains/opt/S5PV210-crosstools/4.4.6/arm-concenwit-linux-gnueabi/lib/ ( -name “ld-*” ) -exec cp -frd {} lib/ \; //拷贝动态链接库
测试制作好的根文件系统
备份原有的根文件系统rootf:
mv /opt/rootfs /opt/rootfs_bak
cp _install /opt/rootfs –frd //将安装制作好的根文件系统_install拷贝为/opt/rootfs
注意添加NFS网络服务的支持:sudo vim /etc/exports 添加如下语句:
/opt/rootfs *(rw,sync,no_root_squash)
保存退出
重启网络服务sudo /etc/init.d/nfs-kernel-server restart
uboot中设置NFS网络启动参数
setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0::eth0:on init=/linuxrc console=ttySAC0,115200
saveenv
重启开发板测试挂接制作的rootfs
查看根文件系统的大小: du /opt/rootfs –lh (一般情况下为3.2M)