没有根文件系统是启动不了linux,会出错,见3.1中的演示。
什么是文件系统?
文件系统包含两个层次的含义:
1. 按照固定格式组织的目录与文件(看得见)
2. 在特定的存储介质上管理这些目录和文件需要的数据(看不见)
如何制作嵌入式linux所需的文件系统?
1. 创建目录和文件
2. 为创建好的目录和文件建立管理数据
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(etc目录下的是配置文件,是通用的,所以是直接从别的地方拷贝过来)
tar xvzf etc.tar.gz -C /xxx/rootfs
4. 编译内核模块
进入linux内核目录(linux 2.6.36)
在3.1中做的是内核的编译,而没有做内核模块的编译。这里是模块的编译,并且要安装到文件系统中去。是安装在lib/modules/下面,此时这个目录下还是空的。
make modules ARCH=arm CROSS_COMPILE=arm-linux-
...
5. 安装内核模块
make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs
INSTALL_MOD_PATH是指定安装的路径。
查看是不是将上面编译生成的模块拷贝到了rootfs/lib/modules下面:
6. 配置busybox(安装linux命令工具)
我们这里使用的是busybox-1.17.2,首先解压:
tar zxvf busybox-1.17.2.tgz
进入busybox目录中执行:make menuconfig
注意:这里的控制台窗口必须拉大一点,否则出错:
对于哪些功能要,哪些不要,这个是根据自己的需要来的。但是有些是必须的,比如说静态链接等。
a. 配置
进入Busybox Setting -->
build options -->
<1> 选中"Build busybox as a static binary",静态链接
<2> Cross Compiler prefix(arm-linux-)
指明使用到的交叉工具链的前缀,也可以在make命令中使用"CROSS_COMPILE=arm-linux-"来指明
Installation Options -->
<1> 选中"Don't use /usr",选中该项可以避免busybox被安装到宿主机系统的/usr目录下,破坏宿主机
<2> Busybox Installation Prefix(/xxx/rootfs)
该选项表明编译后的busybox的安装位置。
可以在editors里面去掉vi编辑器,因为在嵌入式里面不需要这个工具,awk,cmp,diff,sed等这些命令都不需要:
find,grep,xargs命令也不需要:
b. 编译busybox
make
c. 安装busybox
在安装之前,rootfs/bin/下面是空的:
make install
再查看下rootfs/bin/下面是否是空(当然其他目录下也会有东西加进去,比如sbin):
里面多了好多的东西,这都是安装进去的命令工具。而且他们都是一些软连接,连接到busybox的应用程序上
所以我们执行的命令都是busybox提供的。它根据命令的名称来分辨是哪个命令。