构建一个根文件系统基本上这三个步骤
一.busybox创建基本的跟文件系统。
这个工具可以生成基本的目录和一些基本的命令,这些基本的命令都是一些软连接,连接到/bin/busybox名称的应用程序。执行这个命令实际就执行busybox这个程序,busybox应用程序具体再执行这个命令所代表的功能。
busybox的安装
首先在Makefile中指定交叉编译器:
找到并更改为:CROSS_COMPILE ?= arm-linux-
安装:
- make menuconfig //这个可以配置一些选项
-
make
-
make CONFIG_:PREFIX=/your path/ install //一定要指定要释放的目录,否则会释放的主机的根目录下。
二.构建最小根文件系统
1.首先要先把C库拷到生成的根文件系统中,busybox(选择动态编译)和将要运行的应用程序都将用到。操作如下:
(1)在生成的根文件系统根目录中创建lib目录。mkdir lib
(2)在交叉编译器目录中找到glibc库的的目录lib
(3)复制glibc到lib目录 cp *.so* /work/my_root/lib –d (-d表示将连接符号还按符号复制)
2.创建etc/inittab文件
Busybox读取此文件来注册一些要运行的配置。
- ::sysinit:/etc/init.d/rcS
- console::askfirst:-/bin/sh
- ::shutdown:/bin/umount -a -r
3.创建etc/init.d/rcS文件
这个shell脚本文件添加想要自动运行的任务。
- #!/bin/sh
-
ifconfig eth0 192.168.71.200 #配置本机IP
-
mount -a #挂载在etc/fstab中配置的挂载项
-
mkdir /dev/pts #支持外部网络连接的虚拟终端telnet
-
mount -t devpts devpts /dev/pts
-
echo /sbin/mdev > /proc/sys/kernel/hotplug #热插拔
-
mdev –s #在dev目录下生成内核支持的所有节点
4创建etc/fstab文件
这个文件控制mount命令的行为,在mount –a命令执行时。将读取这个文件中的配置挂载相应的内容。
- # device mount-point type options dum fsck order
- proc /proc proc defaults 0 0
- tmpfs /tmp tmpfs defaults 0 0
- sysfs /sys sysfs defaults 0 0
- tmpfs /dev tmpfs defaults 0 0
proc:Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
Sys: sysfs 文件系统总是被挂载在 /sys 挂载点上. 这里sysfs文件系统是为了支持mdev。为了减少写入flash。将dev目录挂载为tmpfs使写入操作在内存中。
在busybox运行mdev创建所有设备节点之前,init进程需要dev/console和dev/null设备节点:
- mknod dev/console c 5 1
-
mknod dev/null c 1 3
5 构建其他目录
包括proc mnt sys root。
三.挂接根文件系统
1.如果要烧入Nand flash中运行,则制作为yaffs映像。制作yaffs的工具可以用已经编译好的文件,因为的源码包要打
补丁才能制作出和内核匹配的映像。主要是生成oob数据区的位的问题。因为我手里有友善制作好的现成的二级制文件,
512字节每页大小的Flash用mkyaffs2image 2K的用mkyaffs2image-128M,命令格式为
mkyaffs2image(-128M) 要制作的根文件系统目录 将生成的文件 eg.mkyaffs2image-128M work/my_root
my_root.yaffs2
如果利用uboot烧写yaffs文件系统。要使用nand.yaffs,当然uboot是添加好了支持yaffs烧写的功能。同时要注意写入
数据的大小应是Nand flash 页大小的整倍数。
uboot的bootargs参数中设置root=/dev/mtdblock3 。mtdblock3是和你的内核的mtd分区设置有关。改写内核
arch/arm/mach-s3c2440/mach-mini2440.c文件中的 mtd_partition类型数组,可以设置mtd分区。
2.如果以nfs挂载。
PC端:
(1).首先确保安装好了nfs功能。
(2)在/etc/exports文件中配置nfs服务,内容如下:
/work/my_root/ 192.168.71.*(rw,sync,no_root_squash)
说明:/work/my_root/为要共享的路径 192.168.71.*是接受连接的ip(这里可以是*(星号)表示接受所有的IP连接)rw:
读写权限. sync: 同步写入. no_root_squash:表示如果是链接端root的话,那么对于这个分享的目录来说,他就具有
root 的权限。
(3)重启nfs服务 /etc/init.d/nfs restart。 此时可以自己本地挂接测试一下。mount-t nfs
127.0.0.1:/work/my_root
嵌入式端:
如果是以uboot作为bootloader,给内核传递参数。则bootargs大致设置为
- noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs
-
-
ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
其中92.168.0.1为PC端地址 192.168.0.2为嵌入式端地址
阅读(2485) | 评论(0) | 转发(1) |