嵌入式Linux 试试一张软盘可装下Linux( 二 )


再把文件解压到内存中 , 形成一个虚拟盘(RAMDISK) , 通过RAMDISK控制系统启动 。如果你使用LILO控制启动 , 先检
查一下LILO的配置文件/etc/lilo.conf中定义的RAMDISK的大小:

RAMDISK_SIZE;=;nnn

创建root文件系统

回到根目录或用户的缺省目录 , 用#mkdir;flop建立工作目录flop 。在这个目录下用mkdir建立以下一些目录:
/dev , 设备;/proc;-;proc , 文件系统所需目录;/etc , 系统配置文件;/sbin , 重要的系统程序;/bin , 基本应
用程序;/lib , 共享函数库;/mnt , 装载其他磁盘节点;/usr , 附加应用程序 。

其中/proc、/mnt和/usr在此情况下都是空的 , 只需要用mkdir创建它们即可 。其余的目录应根据需要分别创建 。
下面对它们一个一个地详细叙述 。

/dev:这个目录中含有系统不可缺少的设备文件 。你可以把现有系统中/dev的文件拷贝过来 , 然后删除不必要
的文件 。不过一定要保留console、kmem、mem、null、ram、tty*等文件 。其余的都可以根据需要删除 。

/etc:这个目录中含有一些必不可少的系统配置文件 。一般可以包含rc.d/*;(系统启动脚本)、fstab(列出要登
录的文件系统)、inittab(包含启动过程参数)、passwd;(用户名和目录)、group(用户组)、shadow(用户加密密码) 。
如果不使用init作为登录进程 , 而将init链接到/bin/bash , 则/etc目录下可以不含有任何文件 。

/bin和/sbin:该目录中包含有必不可少的应用程序 , 如ls、mv、cat、cp、getty(mingettty) 。也可以根据自
己的需要选择 , 不过一定要记住包括以下程序:init、getty、login、mount、bash 。

/lib:该目录中包含有你的启动盘启动过程中所需要的共享函数库 。在/lib目录下还必须有函数库装载器 , 这个
装载器或是ld.so;(对a.out库)或是ld-linux.so;(对ELF库) 。

模块

如果有一个模块化的内核 , 你还得必须考虑需要加载的模块 。它们都位于/lib/modules 。你可以把不是很重要的
模块放到别的盘上 , 当系统启动后再加载 , 这样会节省启动盘的空间 。

打包

1)建立loop设备的临时挂接点和一个大小为4.6兆(大小可以调节)的临时文件 , 并将其清零:

#mkdir;/mnt/loop;2>/dev/null

#dd;if=/dev/zero;of=/tmp/loop_tmp;bs=1k;count=4600;>/dev/null

2)将loop设备与临时文件联系起来

#losetup;/dev/loop0;/tmp/loop_tmp

3)Linux内核识别两种可以直接拷贝到RAMDISK的文件系统 , 它们是minix和ext2 , ext2性能更好:

#mke2fs;-m;0;/dev/loop0;2>/dev/null

#mke2fs将会自动判断设备容量的大小并相应地配置自身 , -m;0参数防止它给root保留空间 , 这样会腾出更多
的有用空间 。

4)接着把虚拟盘挂在节点/mnt上:

#mount;/dev/loop0;/mnt/loop;-t;ext2

5)将制作好的root文件系统拷贝到所挂的节点上 , 卸下挂接点 , 删除建立的挂接点 , 再取消loop设备与临时挂
接点的联系 。

#cp;-a;./tree/*;/mnt/loop

#umount;/mnt/loop

#rmdir;/mnt/loop;2>/dev/null

#losetup;-d;/dev/loop0

6)压缩文件系统后 , 就拥有了一个压缩的root文件系统 , 删除建立的临时文件 。

#dd;if=/tmp/loop_tmp;|;gzip;-9;>;rootfs.gz

#rm;-f;/tmp/loop_tmp

7)检查压缩后的root文件系统的大小 , 如果大了 , 还得去掉一些东西 。

#ls;-s;./zImage|cut;-f2;-d

整合

有了root文件系统和内核之后 , 最后的工作就是把它们整合在一起 。

先检查总文件的大小 , 包括已经制作的内核和打包的root文件系统 。如果超出1.44M , 就得考虑重新创建 。root文
件系统所需的所有文件都准备就绪 , 你就可以运行它了 , 运行结果应该没有错误 , 否则就应该仔细检查一下 。

推荐阅读