嵌入式根文件系统制作

根文件系统是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。内核是Linux系统的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。


这里写图片描述

1.创建目录(目录名随便取,这里取rootfs)

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.创建设备文件
设备文件是用来表示Linux所支持的大多数设备的,每个设备文件除了设备名,还有三个属性:即类型、主设备号、次设备号。设备文件可以理解为与设备通讯的接口,通过设备文件中的主次设备号以及其他信息可以找到对应的设备,然后可以进行具体的操作。在Linux系统启动过程中,有两个文件是必须的,一个是控制台console,一个是null

cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3

3.加入配置文件
利用配置文件包etc.tar.gz进行配置

tar xvzf etc.tar.gz
cp 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地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值