构建根文件系统之根文件系统
Posted 一代枭雄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建根文件系统之根文件系统相关的知识,希望对你有一定的参考价值。
在构建根文件系统之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中写入的东西嘛!
以上是关于构建根文件系统之根文件系统的主要内容,如果未能解决你的问题,请参考以下文章
buildroot arm linux,基于Buildroot的Linux系统构建之根文件系统
buildroot arm linux,基于Buildroot的Linux系统构建之根文件系统
buildroot arm linux,基于Buildroot的Linux系统构建之根文件系统