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

嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成 。由于Linux是开放源代
码的操作系统 , 因此 , 其在嵌入式领域有其不可替代的成本和高度灵活性等优势 。

将Linux系统裁减到就像DOS一样只要一张软盘就能启动 , 是制作嵌入式Linux的基础 。网络上有许多实现方法
的介绍 , 但是在实践过程中都或多或少存在着一些问题或不方便之处 。我们结合自己在这方面的实践经验 , 详细介
绍基于软盘Linux的制作过程 。

三个基本元素

一个嵌入式Linux系统只需要下面三个基本元素:引导程序、Linux微内核(由内存管理、进程管理和事务处理
构成)和初始化进程 。如果要让它有更多的功能且保持小型化 , 还可以加上文件系统、TCP/IP网络支持、GUI(图形
用户界面)和设计精简的应用程序 , 并将其放在ROM、RAM、FLASH或Disk;On;Chip中启动 。由于嵌入式Linux操作系
统的高度灵活性 , 开发者可以很容易地对它进行定制或作适当开发 , 来满足实际应用需要 。

将Linux的系统裁减到只要一张软盘就能启动 , 不但是制作嵌入式Linux的基础 , 而且自己也有广泛的应用前景 。
这些应用包括简单路由器管理、三层交换机管理、floppy-boot防火墙管理等 。国外有专门的组织致力于这方面的工
作 , 如LOAF(Linux;on;a;floopy)等组织 。

选择内核

创建一个启动盘首先必须创建系统内核 。由于软盘容量有限 , 因此常采用对内核进行手工配置 , 去掉不必要的
模块的方法来裁减内核 。

要想裁减内核体积 , 创建它时就得把不必要的功能去掉 , 如去掉对网络的支持和对不必要设备的支持 。但是一
定要记住保留内核对RAMDISK和ext2的支持 , 否则启动盘将不能工作 。其过程如下:

1)以root超级用户登录 , 进入目录/usr/src/linux 。

2)执行#make;menuconfig来对内核模块进行配置(也可以在X;Window中运行make;xconfig) 。

3)依次执行#make;dep和#make;bzImage;(如果内核不大则执行#make;zImage),执行该命令后 , 将在
/usr/src/linux/arch/i386/boot目录下生成内核文件bzImage(或zImage) 。若配置中加入了模块的支持(选项为M) ,
还需要执行#make;modules和#make;modules_install 。

4)用命令#cp;usr/src/linux/arch/i386/;boot/bzImage;/boot拷贝新内核到/boot目录,修改文件
/etc/lilo.conf , 加入:

image;=;/boot/bzImage

label;=;new

root;=/dev/hdxx(你自己的启动硬盘分区)

read-only

执行命令#lilo载入新内核 , #reboot重启系统 , 在出现“lilo:”时键入new 。若系统正常引导 , 则执行下一步 ,
若不行则用老内核引导后 , 到步骤1)重新配置编译内核 。

5)插入软盘执行

#dd;bs=1k;if=/usr/src/linux/arch/i386/;boot/bzImage;of=/dev/fd0;

这样将内核拷贝到软盘上 。

6)用命令#ls;-s将在/usr/src/linux/;arch/i386/boot/bzImage得到内核的大小(假定为476) , 将这个大小记
录下来以备后用 。

这样就制作了包含裁减内核的可供启动的Linux启动软盘 。但是由于没有root文件系统 , 使用这张软盘启动系
统后 , 系统会显示“VFS:;cannot;open;root;device;x:x”和
“kernel;panic:;VFS:;unalbe;to;boot;root;fs;on;x:x”的错误 。

root文件系统

一个root文件系统必须包括支持完整Linux系统的全部东西 , 因此 , 它至少应包括:基本文件系统结构;至少
含有目录/dev、/proc、/bin、/etc、/lib、/usr、/tmp;最基本的应用程序 , 如sh、ls、cp、mv等;最低限度的
配置文件 , 如rc、inittab、fstab等;设备:/dev/hd*、/dev/;tty*、/dev/fd0;基本程序运行所需的函数库 。

由于以上所需文件远超过1.44M , 因此我们通常的做法是在准备好内容后将其压缩到软盘中 。当用软盘启动时 ,

推荐阅读