构建自己的根文件系统

时间:2021-07-04 16:31:14

说明:本篇文章是笔者自己用的,可以参考,由于环境不同,所以可能读者不是太理解。


根文件系统的命令都是busybox的连接命令比如执行ls与执行  busybox ls 是同样的效果

 

一、 最小根文件系统:

1  /dev/console     /dev/null

2  init程序  ,来源于busybox

3 /etc/inittab

4  配置文件中制定的程序

5  c库

 

 

二、配置、编译、安装busybox

1  在Makefile中修改CROSS中加上一句arm-linux-

2  makemenuconfig   进行配置

3 make 进行编译

4 make install (千万不能直接执行makeinstall,因为现在是交叉编译,会破坏电脑文件系统)

需要先新建一个文件夹,然后安装在新建的文件夹中,命令为:

make CONFIG_PREFIX=新建的文件夹(/work/…) install

在busybox文件下的INSTALL文件下有说明

 

三、构造根文件系统

1  首先查看一下PC机上的/dev/目录下的console和null是什么东西,执行命令

ls /dev/console  /dev/null –l  出现如下信息

crw------- 1 root root 5, 1 2016-02-1210:04 /dev/console

crw-rw-rw- 1 root root 1, 3 2016-02-1209:32 /dev/null

说明console和null都是为字符设备,上面还有其主副设备号

根据这个,我们在自己的文件夹下新建一个dev文件,在该文件夹下新建两个设备节点

执行命令:  

mkdir dev   

cd dev  

sudo mknod console  c  5  1

sudo mknod null  c  1  3

 

2  etc/inittab     构造inittab,如果不构造就会有默认的配置项 ,创建etc目录,在etc目录下创建inittab文件

 mkdir  etc

  vietc/inittab

编辑内容  console::askfirst:-/bin/sh

 

 

3 c库

创建lib目录,将pc机上的/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib目录下的库文件拷贝到我们新建的lib目录下,命令最后加一个-d是为了让连接依然为连接,不让其拷贝,如果拷贝的话会让根文件系统变得很大。

cp *.so* /work/nfs_root/my_first_fs/lib -d

 

 

 

 

通过二、三两步就建立好了我们的最小根文件系统,下面就是将我们自己建立的最小根文件系统做成镜像文件(yaffs(小叶(每页512字节)的nand)、yaffs2(大页(每页2048字节)nand)、jffs2等)

 

1 在/work/system/目录下有个文件yaffs_source_util_larger_small_page_nand.tar.bz2,该文件就是制作映像文件的工具。

 

2  将该文件解压就会得到Development_util_ok文件夹,该文件夹下含有两个文件夹:yaffs   yaffs2

 

3  进入到yaffs2中,然后进入utils文件夹下,ls该文件夹,出现以下文件

Makefile mkyaffs2image.c mkyaffsimage.c  nand_ecc.c  yaffs_packedtags1.c

 

4  然后在utils文件夹下执行make就会编译出很多工具,其中包括mkyaffs2image,我们要用到的工具就是mkyaffs2image

 

5  将mkyaffs2image文件拷贝到PC及的系统目录中,并将该文件加上可执行属性

sudo  cp  mkyaffs2image /usr/local/bin/

sudo  chmod  +x /usr/local/bin/mkyaffs2image

其中chmod命令是用来改变权限的格式为

chmod  +[权限代号] 文件

其中权限代号r可读、w可写、x可执行

 

6 返回到制作好的根文件系统文件夹,执行制作映像文件命令即可制作映像文件

可以先执行以下mkyaffs2image看以下调用该工具的格式

mkyaffs2image  my_first_fs my_first_fs.yaffs2

 

注:将某个工具拷贝到PC记得系统目录usr/local/bin/中,该工具就可以当成命令使用了

 

7  将我们制作好的额最小根文件系统装载到开发板上

 

8  完善根文件系统,建立proc目录   mkdir /proc

将proc目录,内核提供了一个虚拟的文件系统  mount -t proc none /proc

这样做的话是手工挂载,如果不想手工挂载的话,就在etc/inittab中添加配置项

::sysinit:/etc/init.d/rcS     添加脚本,还要创建一个脚本文件/etc/init.d/rcS

在rcS文件中编辑如

mount -t proc none /proc

然后在加一个可执行的属性  sudo chmod +x /etc/init.d/rcS最后编译成映像文件

 

在rcS中运用mount –a  ,然后在/etc下建立fstab文件,fstab格式为:

#device   mount-point(挂载点)   type option   dump   fack   order

proc      /proc                proc   0     0

etc 目录下有init.d(文件夹)    inittab    fatab,  init.d文件夹下放着rcS文件

 

inittab的内容如下:

console::askfirst:-/bin/sh

::sysinit:/etc/init.d/rcS

 

 

rcS的内容如下:

#mount -t proc none /proc

mount –a

 

fstab的内容:

#device  mount-point   type    option     dump   fsck   order  

proc     /proc         proc    defaults      0     0

 

 

 

9udev机制:自动创建dev目录下的设备节点,在busybox中以后个udev的简化版mdev

在busybox-1.7.0\docs目录下有个mdev.txt文件,里面有教程

Here'sa typical code snippet from the init script:

[1]mount -t sysfs sysfs /sys

[2]echo /bin/mdev > /proc/sys/kernel/hotplug

[3]mdev -s

 

Ofcourse, a more "full" setup would entail executing this before theprevious

codesnippet:

[4]mount -t tmpfs mdev /dev

[5]mkdir /dev/pts

[6]mount -t devpts devpts /dev/pts

 

a   安装虚拟文件系统,在fstab中添加如下内容

#device  mount-point   type    option     dump   fsck   order  

proc     /proc         proc    defaults      0     0

sysfs      /sys          sysfs     defaults     0     0

tmpfs     /dev          tpfs     defsults      0    0

 

b   在rcS文件中加入内容

mkdir/dev/pts

mount-t devpts devpts /dev/pts

echo/bin/mdev > /proc/sys/kernel/hotplug

mdev-s