本文共 2245 字,大约阅读时间需要 7 分钟。
根文件系统是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。内核是Linux系统的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。
1.创建目录(目录名随便取,这里取rootfs)
mkdir rootfscd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp varmkdir usr/bin usr/lib usr/sbin lib/modules
2.创建设备文件
设备文件是用来表示Linux所支持的大多数设备的,每个设备文件除了设备名,还有三个属性:即类型、主设备号、次设备号。设备文件可以理解为与设备通讯的接口,通过设备文件中的主次设备号以及其他信息可以找到对应的设备,然后可以进行具体的操作。在Linux系统启动过程中,有两个文件是必须的,一个是控制台console,一个是nullcd dev/mknod -m 666 console c 5 1mknod -m 666 null c 1 3
3.加入配置文件
利用配置文件包etc.tar.gz进行配置tar xvzf etc.tar.gzcp etc/* rootfs/etc/ -rf
4.添加Linux内核
cd Linux 2.6.29 //进入Linux内核目录make modules ARCH=arm CORSS_COMPILE=arm-linux-make modules_install ARCH=arm INSTALL_MOD_PATH=/***/rootfs //生成rootfs/lib/modules/2.6.29.4-FriendlyARM
5.编译busybox
①解压busybox,进入busybox根目录 make menuconfig ②选择需要使用的工具 进入 busybox settings->build option->,选中 “build busybox as a static binary”,静态链接 更改Cross Compiler prefix 为(arm-linux-) 进入installation option->,选中“do not use /usr”,可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统 更改busybox installation prefix位置为(/xxx/rootfs) ③编译,安装busybox(把相关的命令/文件拷贝到这个正在创建的文件系统) 在busybox根目录下make ARCH=arm CROSS_COMPILE=arm-linux-make install //执行的是busybox这个可执行文件,rootfs/bin/目录下多了好多文件
至此根文件系统制作完成
挂载根文件系统到Linux内核
根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等基于nandflash和基于norflash的文件系统都是可读可写; 基于内存的文件系统启动快,但无法保存数据,initramfs是在ramdisk的基础上进行改进的,比ramdisk好;基于NFS的文件系统一般用于开发阶段。下面介绍initramfs文件系统和NFS文件系统的挂载。
initramfs文件系统
①进入文件系统创建一个软连接 cd …/rootfs/ ln –s ./bin/busybox init ②配置Linux内核,支持initramfs ③编译内核 make uImage ARCH=arm CROSS_COMPILE=arm-linux- ④在bootloader中设置环境变量 setenv bootargs noinitrd console=ttySAC0,115200设置好后就可以将uImage下载到开发板。使用initramfs文件系统,如果要添加一个目录或文件,需要重新编译生成uImage,因为uImage包含了内核和文件系统,也就是说在生成uImage时已经确定了该文件系统。而利用NFS则可以随时往文件系统中添加目录或文件。
NFS文件系统
①配置内核,使其支持NFS ②在bootloader中设置环境变量setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.3:/home/rootfs ip=192.168.1.6:192.168.1.3:192.168.1.1:255.255.255.0::eth0:off
其中192.168.1.3是pc机ip地址,192.168.1.6是开发板ip地址。针对不同的开发平台,需要修改的地方就是上面pc机的ip地址以及开发板的ip地址。