文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操做系统的交互。
嵌入式Linux系统由Linux内核和根文件系统两部分组成,二者缺一不可。
内核制做:
1. 清除全部配置和中间文件
X86:make distclean
Arm: make distclean
2. 配置内核
X86:make menuconfig
Arm: make menuconfig ARCH=arm
3. 编译内核
X86:make bzImage
Arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
make -j4 bzImage //表示用4线程编译
根文件系统: Linux启动时,使用的第一个文件系统。
根文件系统的制做:
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. 建立设备文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3. 安装/etc
tar etc.tar.gz -C /xxxx/rootfs
这是利用已有的etc配置目录,固然也能够本身新建这些配置文件。
4. 编译内核模块
进入到编译内核的内核源码顶层目录中。
make modules ARCH=arm CROSS_COMPILE=arm-linux-
5. 安装内核模块
make modules_install ARCH=arm INSTALL_MOD_PATH=
/xxxx/rootfs
该命令只是将上一步编译生成的内核模块,从内核源码中相应目录拷贝到/xxxx/rootfs/lib/modules目录下。
6. 配置busybox
进入busybox源码目录
配置:
make menuconfig
7. 编译、安装busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
NFS启动设置
若是想使用nfs做为根文件系统,
则要
1. 修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为以下:
CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=192.168.0.10:/home/xgm/rootfs ip=192.168.0.13 console=ttySAC0 mem=64M"
注释:
root=/dev/nfs : 指明使用使用哪一种文件系统做为根文件系统,这里表示使用nfs做为根文件系统,
若root=/dev/ram,表示使用ramdisk做为根文件系统
rw : 权限,可读,可写。
nfsroot=192.168.0.10:/home/xgm/rootfs:根文件系统存储的位置,
192.168.0.10为存储根文件系统的计算机的IP
/home/xgm/rootfs为根文件的目录。
ip=192.168.0.13:开发板启动后的IP地址。
console=ttySAC0:代表使用串口0做为控制台。
mem=64M:开发板内存的大小。
2. 从新编译内核。
制做Ramdisk
基于前面步骤制做好的根文件系统
/xxxx/rootfs
。
1. genext2fs -b 8192 -d /xxxx/rootfs ramdisk
genext2fs为制做ramdisk的工具,也可用其余工做来制做。
2. 压缩
gzip -9 -f ramdisk
Ramdisk启动设置:
1. 修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为以下:
CONFIG_CMDLINE="root=/dev/ram rw console=ttySAC0 mem=64M"
2. 从新编译内核。
制做Initramfs
1.配置内核,使其支持Initramfs
进入内核源码目录,执行
make menuconfig ARCH=arm
在General Setup菜单下,将"Initial RAM filesystem and RAM disk(initramfs/initrd) support"
选项给选中。
并将上图中蓝色部分中的"../../rootfs"修改成你制做的rootfs文件目录/xxxx/rootfs,注意并不是ramdisk目录。
2. 进入制做好的根文件系统(/xxxx/rootfs)中,执行
ln -s ./bin/busybox init
3. 修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为以下:
CONFIG_CMDLINE="console=ttySAC0 mem=64M"
具体修改参数,根据不一样的硬件,不一样。
4. 从新编译内核。
注意:使用Initramfs时,内核和根文件系统是一块儿编译成了一个文件了的。
vmlinux:原始的,未压缩的内核镜像
zImage:压缩过的vmlinux内核镜像,文件开始为一段解压程序,故可自解压。
uImage:uboot引导的zImage