您的位置:首页 > 运维架构 > Linux

嵌入式Linux-根文件系统制作

2017-01-16 20:05 543 查看
嵌入式Linux-根文件系统制作

一, 文件系统相关概念

嵌入式文件系统可以有多个文件系统,但是必须有一个根文件系统,根文件系统RootFs,可以简单的说就是使用ls命令列出来的目录和文件,这就是文件系统的基本概念。

二, 根文件系统的创建

我使用的开发板来测试创建的文件系统,基于Linux3.0.8内核, 使用的redhat-2.6系统,下面是创建RootFs的一些基本的步骤。

建立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


创建设备文件:console, null

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


加入配置文件

配置文件与体系结构无关,我们可以直接拷贝,然后自己修改,本次拷贝5个配置文件到/etc/下

etc/init.d/rcS
fstab
inittab
profile


添加内核模块:在开发板对应的内核源代码目录下,编译内核模块,然后将模块安装到rootfs中

#你的内核源码根目录
cd .../linux
make modules ARCH=arm CROSS_COMPILE=arm-linux-
#你自己的rootfs的路径
make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs


编译BusyBox:BusyBox被称为嵌入式系统中的瑞士军刀,可以为嵌入式系统添加命令和功能。

配置BusyBox, 首先你需要到网站上下载busybox源代码

cd busybox/
make menuconfig


配置选项:

1.BusyBox Settings -> build options ->

选中Build busybox as a static binary

设置Cross Compiler prefix(arm-linux-)

2.Installation Options ->

选中 Don`t use /usr

3.Busybox Installation Prefix(…/rootfs)

…/rootfs为你自己的rootfs的根目录

编译安装BusyBox

make
make install


三, 根文件系统挂载

1.挂载方式

主要的存储设备为 RAM 和 FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等

NandFlash:可读可写

Yaffs

UbiFS

NorFlash:可读可写

Jffs2

基于内存:启动速度很快,但是不能保存数据,会掉电丢失

Ramdisk:固定大小

Initramfs:可以动态改变大小

基于网络:

NFS:在产品开发阶段经常使用

多种FS可以结合:

Initramfs + UbiFs

2.Initramfs挂载

在rootfs根目录建立busybox软连接

ln -s ./bin/busybox init


配置内核,支持initramfs

cd .../linux
make menuconfig


重新编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-


此时我们编译的内核已经挂载了rootfs

设置启动参数:

setenv bootargs noinitrd console=ttySAC0,115200


启动tftp服务,下载uImage, 启动内核

tftp 0x20000000 uImage
bootm 0x20000000


测试

因为我们使用的Initramfs,每次改变rootfs中内容后,我们只有重新编译内核,因为编译的uImage = kernel + fs(RootFs压缩后的fs),uImage启动后会将fs解压到内存中去,才能对新加的内容进行测试,这非常不利于产品的开发,在产品的开发过程中,我们多数都是使用NFS。

3.NFS挂载

配置内核,使得其支持NFS,并重新编译

cd .../linux
make menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-


启动Linux上的NFS服务

sudo service nfs restart


设置开发板启动参数

#ip=10.13.1.150(开发板IP):10.13.1.215(Linux 服务器IP):192.168.1.1(网关):255.255.255.0:空白:eth0:off

setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=10.13.1.215:/root/Desktop/work/RootFs,proto=tcp nfsvers=3 ip=10.13.1.150:10.13.1.215:10.13.0.1:255.255.255.0::eth0:off


如何查看ip和默认网关呢

#查看ip
ifconfig

#查看网关,default选项
route


重启开发板,下载内核

tftp 0x20000000 uImage
bootm 0x20000000


测试

在Linux下的rootfs根目录中添加一个测试文件,在开发板中立刻可以看到添加的文件,这非常方便我们调试产品。

四,总结

本次介绍了rootfs的基本知识,希望大家共同学习,下面是思维导图:



本次资料链接:链接:http://pan.baidu.com/s/1qXJzrnI 密码:tt6o
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: