构建根文件系统之根文件系统

时间:2022-11-11 16:30:56

 

在构建根文件系统之busybox中,我们已经实现了配置,编译,安装busybox。即那个init程序的来源。

首先在pc看一下,/dev/console  和/dev/null的具体信息:

执行ls /dev/console  /dev/null

crw------- 1 root root 5, 1 6月 27 08:06 /dev/console   //字符设备 ,主设备号为5,次设备号为1
crw-rw-rw- 1 root root 1, 3 6月 27 08:06 /dev/null   //字符设备,主设备号为1,次设备号为3

切换到/work/nfs_root/first_fs目录下,创建/dev/console  /dev/null

mknod  console  c 5 1

mknod  null   c  1 3

这样就完成了console和null设备的创建。

 

接下来再处理/etc/inittab,你如果不去创建的话,它就会使用默认的配置项。在默认的配置项中,有很多都是我们不需要的,因此需要我们自己处理这个配置项。

首先创建dev目录,接下来创建配置文件inittab。加入这条信息:

console ::askfirst:-/bin/sh    //执行时机:askfirst     执行程序或脚本: /bin/sh   标准输入、标准输出、标准错误定位到console中。

 

接下来安装glibc库

在我们制作交叉编译工具链arm-Linux-gcc时,已经生成了glibc库,可以直接使用它来构建根文件系统,本文使用的时光盘里自带的压缩库,是arm-linux-gcc3.4.5版本的glibc库。

如果用arm-linux-gcc是4.3.2的,可不可以使用呢?我试验过:

1、用arm-linux-gcc -4.3.2,然后将其里面的所谓的glibc库拷到了/work/nfs_root/first_fs/lib,这样根文件系统起不来。

2、用arm-linux-gcc -4.3.2,,将arm-linux-gcc-3.4.5-glibc-2.3.6.tar中的所谓的glibc库拷到了/work/nfs_root/first_fs/lib,这样根文件系统起不来。

分析以上情况,是因为glibc库出现了问题。最好索性用的是韦老大制作好的arm-linux-gcc-3.4.5-glibc-2.3.6.tar,成功了。

在开发板上只需要加载器和动态库,构建的根文件系统的目录为/work/nfs_root/first_fs,操作如下:

mkdir  -p  /work/nfs_root/first_fs/lib  

cd  ~/work/gcc-3.4.5-glibc-2.3.6/arm-linux/lib   //每个人存放的位置是不同的。

cp *.so.*  /work/nfs_root/first_fs/lib -d  注意-d表示,如果本来是一个链接文件,让它保持链接文件

如果要创建目录A并创建目录A的子目录B,没有用-p的情况下是mkdir 2次

如果用-p 可以直接创建2个目录 mkdir -p 目录A/子目录B就可以

 

这样一个最小的文件系统就做好了,怎么把它弄到开发板上呢?需要做一个映像文件。

所谓制作文件系统的映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。当系统启动后挂接这个设备,就可以看到与原来目录一样的内容。

怎样做一个映像文件?制作yaffs2的映像文件

将光盘中的yaffs_source_util_larger_small_page_nand.tar拷贝到~/work目录下

tar  -xjf yaffs_source_util_larger_small_page_nand.tar   解压得到Development_util_ok,

cd Development_util_ok/yaffs2/utils

执行make命令生成mkyaffs2image工具,将其复制到/usr/local/bin目录

 cp mkyaffs2image /usr/local/bin

加上可执行权限:chmod  +x  /usr/local/bin/mkyaffs2image

注意:在编译遇到错误时,切换到root权限下试试 

cd /work/nfs_root目录

sudo mkyaffs2image first_fs  first_fs.yaffs2

 将first_fs.yaffs2烧到开发板上,我这里用的是tftp

tftp 30000000  first_fs.yaffs2

nand  erase  root

nand  write.yaffs  30000000  0x260000 $(filesize)

然后重启开发板,你会看到如下的内容:

Please press Enter to activate this console. 

然后按下enter键,你又会看到:

starting pid 763, tty '/dev/console': 'bin/sh'
#

这不就是我们在etc/inittab中写入的东西嘛!