VB 源码VC 源码ASP源码JSP源码PHP源码CGI源码FLASH源码素材模板C 源程序常用软件文档中心其他程序

Linux

注册表
经验技巧
Linux
Win9x/ME
Win2000/NT
WinXP/Server

本类阅读TOP10

·创建iptables NAT规则
·在局域网中设置Linux时间服务器
·Linux 指令大全(1)
·Linux日志管理详解
·Linux初学者-初入门时的五个问题
·做个ADSL+Linux软路由器
·Linux 文件命令精通指南(初级)
·构建Linux局域网
·漂亮的国产Linux操作系统Open Desktop赏析
·LINUX系统中动态链接库的创建与使用

精品推荐
制作基于软盘的Linux系统

作者:佚名 来源:月光软件站 加入时间:2005-5-12 月光软件站

嵌入式Linux由一个几百KBkernel(内核)和一些根据需要进行定制的系统模块组成。由于Linux是开放源代码的操作系统,因此,其在嵌入式领域有其不可替代的成本和高度灵活性等优势。 Linux系统裁减到就像DOS一样只要一张软盘就能启动,是制作嵌入式Linux的基础。网络上有许多实现方法的介绍,但是在实践过程中都或多或少存在着一些问题或不方便之处。我们结合自己在这方面的实践经验,详细介绍基于软盘的Linux系统制作过程。

三个基本元素

一个嵌入式Linux系统只需要下面三个基本元素:引导程序、Linux微内核(由内存管理、进程管理和事务处理构成)和初始化进程。如果要让它有更多的功能且保持小型化,还可以加上文件系统、TCP/IP网络支持、GUI(图形用户界面)和设计精简的应用程序,并将其放在ROMRAMFLASHDisk On Chip中启动。由于嵌入式Linux操作系统的高度灵活性,开发者可以很容易地对它进行定制或作适当开发,来满足实际应用需要。 Linux 的系统裁减到只要一张软盘就能启动,不但是制作嵌入式Linux的基础,而且自己也有广泛的应用前景。这些应用包括简单路由器管理、三层交换机管理、floppy-boot防火墙管理等。国外有专门的组织致力于这方面的工作,如LOAF(Linux on a floopy)等组织。

选择内核

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

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

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 ;最基本的应用程序,如shlscpmv等;最低限度的配置文件,如rcinittabfstab等;设备:/dev/hd*/dev/ tty*/dev/fd0;基本程序运行所需的函数库。

由于以上所需文件远超过1.44M,因此我们通常的做法是在准备好内容后将其压缩到软盘中。当用软盘启动时,再把文件解压到内存中,形成一个虚拟盘(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的文件拷贝过来,然后删除不必要的文件。不过一定要保留consolekmemmemnullramtty*等文件。其余的都可以根据需要删除。

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

/bin/sbin:该目录中包含有必不可少的应用程序,如lsmvcatcpgetty(mingettty)。也可以根据自己的需要选择,不过一定要记住包括以下程序:initgettyloginmountbash

/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

 

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

 

#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文件系统所需的所有文件都准备就绪,你就可以运行它了,运行结果应该没有错误,否则就应该仔细检查一下。

 

真正的嵌入式Linux系统

到这里基于软盘的Linux盘已经做好了,剩下的工作就是测试这张盘的正确性,如果有问题还得从头再来。现在许多Linux的发行套件中都有厂家做好的启动盘,它们的制做原理和以上介绍的大同小异,但是它们常常使用许多不同的技巧,因为它们要面对更多的硬件和各种可能发生的情况。

 

真正的基于IA应用的嵌入式Linux还必须加入GUI(图形用户界面)和设计精简的应用程序,如网络浏览器等。GUI方面开放源代码的,国外有Microwindows(可访问www.microwindows.org),国内有miniGUI(可访问www.minigui.org)。它们的源代码都可以在网上找到。浏览器方面用得较广的是ViewML(www.viewml.org),它也是开放源代码的。结合以上一些工具,再加上对硬件驱动程序的开发,就可以形成一套嵌入式的Linux操作系统。 





相关文章
  • 使用FreeBSD配置基于ADSL的VPN网关+防火墙
  • Active Directory修理和恢复
  • 活动目录概念和灾难恢复
  • 安装额外的域控制器循序渐进
  • 解决 Windows 2000 中的常见 Active Directory 安装问题
  • Windows 2003 激活和优化大全
  • Win2000 Advanced Server的用户管理
  • Windows 2000活动目录详解
  • Win2000请求拨号路由服务详解
  • Windows 2000 域的备份与恢复
  • WINDOWS 2000技术的54个问与答
  • 一个IP建多个Web站点--主机头名法
  • NT/2000服务器终极安全设置与效率优化指南
  • Windows 2000活动目录--基础篇
  • 谈谈NETBIOS与网上邻居的浏览
  • 解开拒绝本地登录的“死结”
  • Windows 2000活动目录--结构篇
  • Windows 2000活动目录--配置篇
  • Windows 2000日志的描述及删除
  • 终端服务Terminal Service的几个使用技巧
  • 相关软件

  • 检测机器操作系统的版本  
  • 获取操作系统版本信息源代码  
  • 列举操作系统中所有的进程  
  • 多任务操作系统控制的DOS环境下的实现  
  • 各种操作系统磁盘文件的读取  
  • 32位操作系统OS/2的MPEG播放机  
  • 32位操作系统OS/2的 PPM 工具箱  
  • DOS操作系统支持软件的C语言源代码  
  • 获取操作系统版本信息  
  • 得到操作系统的信息  



  • 月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
    电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
    音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

    月光软件站·版权所有