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.创建设备文件
(1)在Linux中设备都以文件的形式存在和操作。
(2)这些文件都在dev目录
(3)在启动Linux系统的时候必须要使用两个设备文件console和null
#cd rootfs/dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
3.加入配置文件(一般都是借鉴已有的)
#tar etc.tar.gz
#cp etc/* /rootfs/etc/ -rf
4.添加内核模块
#cd …/linux
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
#make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs
5.编译安装busybox(瑞士军刀)
(1)busybox提供linux的系统调用等功能
(2)配置busybox
#make menuconfig
Busybox Settings àbuild Options->
--》 “Build busybox as astatic binary”, 静态链接
--》 Cross Compiler prefix (写入前缀arm-linux-)
Installation Options->
--》选中 “Don‘t use /usr”
选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统
--》 Busybox Installation Prefix(写入参数/xxx/rootfs)
该选项表明编译后的busybox的安装位置
(3) 编译/安装busybox
make
make install
6.文件系统分类
根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等
7.根文件系统一般用initfamfs,基于内存的文件系统掉电丢失,但是速度快。一般一个系统是多个文件系统混合使用。
8.要使用initramfs就必须使用软链接
ln -s ./bin/busybox init
在当前文件夹产生init的快捷方式对应于./bin/busybox
9.配置内核要选上 initramfs选项(General里),且紧接着填写根文件系统所在位置。再重新编译内核。
10.设置UBOOT环境变量(传给内核的启动参数)
setenv bootargs noinitrd console=ttySAC0,115200
但是这样,如果要添加文件则必须要重新编译内核使得文件系统得到更新,因为此时的文件系统是通过解压存在内存里面的。即这种方式的文件系统是包含在内核里的。
11. 使用NFS
(1)内核配置
---》取消initramfs
---》进入File System
---》根文件系统onNFS选上
(2)编译内核
(3)设置UBOOT启动参数
setenv bootargs noinitrd (设置启动参数的固定格式)
console=ttySAC0,115200 init=/init (启动项信息,串口0,波特率)
root=/dev/nfs rw (指明用nfs启动)
nfsroot=192.168.1.3:/home/S5-driver/lesson9/rootfs(根文件系统在主机的路径)
ip=192.168.1.6(开发板IP地址):192.168.1.3(主机IP):192.168.1.1(网关):255.255.255.0(掩码):(开发板主机名):eth0(启动之后IP地址赋值的对象):off(关闭动态IP)
setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.108:/nfsroot/motion_rootfs ip=192.168.1.186:192.168.1.108:192.168.1.1:255.255.255.0:XiaoJunJun:eth0:off
12.产品成熟以后都用initramfs和yaffs2文件系统。如果开发板的IP和windows的相同会导致访问NFS很慢甚至掉线。