文档详情

初级根文件系统的制作.doc

发布:2017-12-14约1.22万字共12页下载文档
文本预览下载声明
本来想把文件系统制作的过程系统的整理一下,发现离最终目的还有一段距离。所以,还是采取边实验边修改,尝试可能情况,最终完成常用的所有功能的移植。这样,在具体应用中只需要做相应的裁减就可以了。为了搞清楚每一个功能部件的依赖关系,要从最小的功能出发,逐步添加功能。 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
显示全部
相似文档