[国嵌攻略][101][根文件系统制作]
根文件系统
一个嵌入式Linux系统可以有多个文件系统,但必须有第一个文件系统,也就是根文件系统。系统启动后看到的目录和目录里面的文件就是文件系统。
建立根文件系统
1.创建目录
示例:
mkdir rootfs
cd rootfs
mkdir bin dev etc lib mnt proc sbin sys tmp usr var
mkdir usr/bin usr/lib usr/sbin lib/modules
2.创建设备文件
Linux系统中设备以文件的方式存在dev目录下,Linux系统启动时需要console文件和null文件。
示例:
cd dev
mknod -m 666 console c 5 1 -m 666属性,console设备文件名,c字符设备,5主设备号,1次设备号
mknod -m 666 null c 1 3
3.添加配置文件
配置文件与处理器架构无关
示例:
tar zxvf etc.tar.gz
cp etc/* rootfs/etc/
4.添加内核模块
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install ARCH=arm INSTARLL_MOD_PATH=.../rootfs/
5.编译和安装busybox
5.1配置busybox
make menuconfig
busybox settings->build options->[*]build busybox as a static binary
busybox settings->build options->(arm-linux-)cross compiler prefix
busybox settings->installation options->[*]don’t use /usr
busybox settings->installation options->(.../rootfs)busybox installation prefix
5.2.编译busybox
make
5.2.安装busybox
make install
挂载根文件系统
1.文件系统类型
根据存储设备的硬件特性和系统需求,不同的文件系统有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为ram和flash,常用的基于存储设备的文件系统类型包括:jffs2,yaff2,ubifs,ramdisk等。
基于nand flash的文件系统:yaffs2,ubifs
基于norflash的文件系统:jffs2
基于内存的文件系统:ramdisk,initramfs
基于网络的文件系统:nfs
网络文件系统一般在开发阶段使用,内存文件系统的优势是启动速度快,nand flash文件的优势是可以保存用户数据,所在在实际产品中会采用内存文件系统和nand flash文件系统混用的情况。
2.使用initramfs挂载根文件系统
特点:
使用initramfs的优点在于启动速度快,缺点是无法修改文件系统里面的内容。一般在做成产品后使用。
2.1.在根文件系统下创建软链接
cd .../rootfs/
ln –s ./bin/busybox init
2.2.配置Linux内核
make menuconfig ARCH=arm
general setup->[*]initial ram filesystem and ram disk->(.../rootfs)initramfs source file(s)
2.3.编译Linux内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
2.4.设置启动参数
进入uboot设置环境变量
setenv bootargs noinitrd console=ttySAC0,115200
saveenv
2.5.下载内核文件
tftp 31000000 uImage
2.6.启动内核
bootm 31000000
3.使用nfs挂载根文件系统
特点:
使用nfs的优点在于可以通过网络直接修改文件系统里面的内容,缺点在于需要网络。一般在开发阶段使用。
3.1.配置内核
make menuconfig ARCH=arm
general setup->[ ]initial ram filesystem and ram disk
file systems->[*]network file systems->[*]root file system on nfs
3.2.编译Linux内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
3.3.设置启动参数
进入uboot设置环境变量
console=ttySAC0,115200 表示使用串口0,波特率是115200
root=/dev/nfs rw 表示使用根目录下的/dev/nfs设备作为文件系统,rw可读可写
nfsroot=192.168.1.101:.../rootfs 表示nfs服务器的地址和根文件系统的路径
ip=开发板IP地址:服务器IP地址:网关地址:地址掩码:开发板主机名:IP对应的网卡设备:动态域名获取
示例:
setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.101:.../rootfs ip=192.168.1.230:192.168.1.101:192.168.1.1:255.255.255.0::eth0:off
saveenv
3.4.配置NFS服务器
vim /etc/exports 修改NFS服务器路径
.../rootfs *(rw,sync,no_root_squash)
/etc/init.d/nfs restart 启动NFS服务器
3.5.下载内核文件
tftp 31000000 uImage
3.6.启动内核
bootm 31000000