1.建立根文件系统目录与文件
1.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
1.2 创建设备文件
- Linux系统中,绝大部分的设备通过文件来操作,通过文件读写来实现对设备的读写,dev目录下存放各种设备文件,console文件和null目录必需的,用mknod创建设备文件。(c代表的是字符设备,5是主设备号,1是次设备号)
- #cd rootfs/dev
- #mknod -m 666 console c 5 1
- #mknod -m 666 null c 1 3
1.3 加入配置文件(与体系结构无关)
- 首先需要下载etc.tar.gz文件
- 解压:#tar xvzf etc.tar.gz
- 把解压后的所有文件拷贝到创建的rootfs/etc文件下:#mv etc/* …/root/etc/ -rf
1.4 添加内核模块
- 进入内核代码:#cd …/linux
- 编译内核模块:#make modules ARCH=arm CROSS_COMPILE=arm-linux-
- 把编译好的内核模块复制到rootfs目录下(...为rootfs目录前缀):#make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs
1.5 编译/安装busybox
- Busybox: 嵌入式开发中的瑞士军刀,提供嵌入式开发中很多的的命令、小工具先下载busybox源代码,解压后进去文件夹中。
- 配置busybox:
- #make menuconfig
- 在Busybox Settings->
- build Options->
- 选中 “Build busybox as a static binary”, 静态链接
- Cross Compiler prefix (arm-linux-)配置成arm-linux-
- 选中 “Build busybox as a static binary”, 静态链接
- build Options->
- 在Busybox Settings->
- Installation Options->
- 选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的usr目录下,破坏宿主系统。
- Busybox Installation Prefix (/xxx/rootfs)该选项表明编译后的busybox的安装位置。
- 选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的usr目录下,破坏宿主系统。
- Installation Options->
- 编译、安装busybox
- make
- make install
2.挂载根文件系统
2.1 文件系统类型
- 根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等。
2.2 挂载initramfs文件系统
- 基于内存的文件系统,主要用于产品,优点是访问速度快,缺点是根文件系统发生变化时都要重新制作一遍,下面是建立initramfs文件系统的步骤。
- 进入rotfs创建软连接,名字叫做init
- #cd …/rootfs/
- #ln –s ./bin/busybox init
- 配置Linux内核,支持initramfs,进入内核目录
- #make menuconfig ARCH=arm
- General setup->
- 选中Initial RAM filesystem and RAM disk (initramfs/initrd) support
- 配置下面目录为根文件系统目录****/rootfs/
- 编译内核
- #make uImage ARCH=arm CROSS_COMPILE=arm-linux-
- 拷贝uImage到/tftpboot/目录下
- 进入到U-boot,配置环境变量,U-boot通过bootargs告诉内核以什么样的方式启动
- #setenv bootargs noinitrd console=ttySAC0,115200
- 下载并启动linux内核:
- #tftp 31000000 uImage
- #bootm 31000000
到这里根文件系统就挂载成功了。
2.3 挂载NFS文件系统
- 基于网络的文件系统,主要用于开发阶段,通过NFS可以非常方便的往开发板中添加文件。
- 首先需要对内核进行配置
- #make menuconfig ARCH=arm
- General setup->,
- 取消掉IInitial RAM filesystem and RAM disk (initramfs/initrd) support
- 然后进入File system->
- Network File Systems,保证Root file system on NFS是选上的,Network File Systems也要选上
- 进行内核编译
- #make uImage ARCH=arm CROSS_COMPILE=arm-linux-
- 拷贝uImage到/tftpboot/目录下
- 进入到U-boot,配置环境变量
- setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.0.110:/home/linux/workdir/rootfs,proto=tcp,nfsvers=3 ip=192.168.0.112:192.168.0.110:192.168.0.1:255.255.255.0::eth0:off
- saveenv
- console的配置表示使用;
- 串口作为控制台,波特率为115200;
- root表示使用/dev/nfs作为根文件系统;
- nfsroot用来指明NFS服务器的地址,即Linux的地址,后面的冒号是制作的根文件系统的路径要选择和自己相符的路径;
- ip第一项是启动后自己的ip地址(开发板ip),第二项是NFS服务器地址,第三项是网关,第四项是掩码,中间可以给开发板取主机名,这里空掉,eth0表示启动后把ip地址赋值给eth0网卡,off表示关闭动态ip获取功能。
- 注意:启动前需要保证Linux启动了,NFS并配置见博文。
- 下载并启动linux内核:
- #tftp 31000000 uImage
- #bootm 31000000
到这里根文件系统就挂载成功了。