初级根文件系统的制作.doc
文本预览下载声明
本来想把文件系统制作的过程系统的整理一下,发现离最终目的还有一段距离。所以,还是采取边实验边修改,尝试可能情况,最终完成常用的所有功能的移植。这样,在具体应用中只需要做相应的裁减就可以了。为了搞清楚每一个功能部件的依赖关系,要从最小的功能出发,逐步添加功能。
Linux的启动阶段分为两大阶段。第一个阶段从bootloader引导内核,至内核挂载root fs成功为止,这个阶段的一个标志就是如下打印信息:
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 100K
第二个阶段分为如下顺序:init -- getty -- login -- shell四个阶段。而成功的打印信息:
[root@listentec ~]#
当然,根据你设定的shell的PS1,显示也会有所不同。但最终成功都会打印出shell prompt。
init现在力求统一标准,最为常用的还是system V init和busybox init。system V init是host上常用的,也是redhat的默认init。system V init是比较复杂的,支持多级别启动。相对于嵌入式系统来说,有些复杂。busybox只支持一个级别,相对来说,更适合嵌入式系统应用。
login在选择上也有busybox login和tinylogin。而tinylogin要支持的好一点。
shell的选择上有busybox ash,也可以交叉编译出一个bash,这样的话bash的功能要强一点。
原来没有细细整理笔记,现在整理时,看到Tekkaman Ninja已经整理得比较详细了,具体见:/u1/34474/showart_485837.html,现在就参考Tekkaman Ninja的笔记,再附上自己的理解,算作是根文件系统制作的第一个阶段总结。
(1)创建根文件系统的基本目录结构
这个肯定要参考FHS。最初制作的时候,我认为直接用root用户创建就可以了,这个与host还是比较一致的。
[armlinux@lqm basicfs1]$ tree -L 1
.
|-- bin
|-- dev
|-- etc
|-- home
|-- lib
|-- mnt
|-- proc
|-- root
|-- rootfs
|-- sbin
|-- sys
|-- tmp
|-- usr
`-- var
也写了小的脚本:
[armlinux@lqm fs]$ cat mkrootfs.sh
#!/bin/bash
# make the basic root file system
# set the target documentation
ROOTFS=rootfs
TRUE=1
FALSE=0
# check whether the user is the root
is_root()
{
if [ `id -u` == 0 ]; then
return $TRUE
else
return $FALSE
fi
}
# must be the root
if is_root; then
echo Must be root to run this script.
exit 1
fi
# create the rootfs
mkdir $ROOTFS; cd $ROOTFS
mkdir -p bin dev etc lib/modules proc sbin sys usr/bin usr/lib usr/sbin tmp
# create the basic dev
mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
# copy lib
cp -av ../simple_fs/lib
cp -av ../simple_fs/etc/* etc/
这个制作过程并不复杂。只是在最小的组织上还是有待考虑的。
(2)编译busybox
主要就是修改ARCH和CROSS,然后menuconfig,最后指定路径安装。这里有一个版本对应问题,我是选择了cross-3.4.1,编译没有问题。
文件: busybox.rar
大小: 0KB
下载: 下载
(3)编译tinylogin
这里需要注意的是,不采用tiny
显示全部