一种实现嵌入式Linux的新方法
更新时间:2023-06-06 03:54:01 阅读量: 实用文档 文档下载
- 嵌入式LINUX推荐度:
- 相关推荐
一种实现嵌入式Linux的新方法
一种实现嵌入式Linux的新方法
<DIVid=content><scriptsrc="/mx/baid.js"><DIVid=viewad><scriptsrc="/a/lw.js">
摘要在Linux中会遇到由于文件系统损坏,需要人工修复而导致系统无法正常启动的现象。本文采用Linux初始化内存盘(INITRD)技术,并把内存的一部分作为Linux的根目录,每次启动把完整的文件系统解压到这里,避免了系统从损坏的文件系统启动。这不仅使系统能正常启动,而且提高了系统性能。
关键词Linux嵌入式INITRDramdisk
【Abstract】IncourseofbuildingembeddedLinux,thesystemwillnotstartbecauseofthebadfilesystem.Thepaperdescribesanewmethod,whichadoptsINITialRamdiskDiskandassignspartofmemoriesasrootdirectoryofLinux.Itavoidsstartupfromabadfilesystembecauseituncompressesintegralfilesystemtoramdiskeverytime.Withthismethod,thesystemcannotonlystartnormally,butalsoit’sperformanceisverygood.
【Keyword】LinuxembeddedINITRDramdisk
引言在Linux操作系统中,有一项特殊的功能——初始化内存盘INITRD(INITialRamDisk)技术,而且内核支持压缩的文件系统映像。有了这两项功能,我们可以让Linux系统从小的初始化内存盘启动,并把系统内存的一部分作为根文件系统挂载,而且不使用交换分区(如果不运行XWindows这是完全可以的),即把Linux系统完全嵌入到内存中,而不依赖于任何其他硬盘。现在PC机内存至少128M,而根文件系统所用的只有30M,因此不仅不会使整机性能下降,反而有很大的提高。由于系统不工作在硬盘上,所以系统消除了由于机械驱动而导致的问题;因为系统运行于内存中,根文件系统和操作完全在CPU/RAM环境下,系统性能在速度和可靠性方面非常好;它不会由于非法关机而破坏文件系统,因为我们每一次启动是把压缩的文件系统解压至内存盘中作为根文件系统挂载。1硬件要求对于这样一个系统,硬件不需要特别的设计,只是通过普通的PC机上的组件实现。值得一提是系统的内存的大小,它至少应该有64M。因为30M作为Ramdisk使用,剩下30多兆作为系统运行,才能保证系统的正常工作,我们现在的计算机内存一般为128M,这个条件都能满足。唯一特别的是一个flash盘,它相当于一个IDE接口的硬盘,大小为20M,主要用它作为启动LILO和放置根文件系统压缩包。2Ramdisk的使用Ramdisk就是将内存的一部分分配为一
个分区并作为硬盘来使用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将加快计算机的操作,如大数据量的网络服务器、无盘工作站等。为了能够使用Ramdisk,我们在编译内核时须将blockdevice中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的
一种实现嵌入式Linux的新方法
大小,默认是4096k;另一个是initrd的支持。它既可以直接编译进内核,也可以编译成模块,在需要的时候加载。我们由于在启动时就用它,所以必须将它直接编译进内核。如果对Ramdisk的支持已经编译进内核,我们就可以使用它了。首先在/mnt目录下创建目录ram,运行mkdir/mnt/ram;然后对/dev/ram0创建文件系统,运行mke2fs/dev/ram;最后挂载上/dev/ram,运行mount/dev/ram/mnt/ram,就可以象对普通硬盘一样对它进行操作了。值得注意的是,在创建文件系统的时候,在屏幕上输出1024inodes,4096blocks,即ramdisk大小为4M=4096个块,但是我们挂载上之后,用命令df–k/dev/ram查看时,显示出来ramdisk大小只有3963K,这是由于文件系统本身占用了一些空间。我们能根据需要改变ramdisk地大小。如我们要把默认的4M增大到10M,当ramdisk是直接编译进内核的情况下,可在LILO配置文件lilo.conf中加入一行:append=“ramdis_size=10000”,运行LILO后,重启计算机后,ramdisk大小变为10M,或者在启动是作为启动行参数ramdis_size=10000;当ramdisk是作为可加载模块编译时,需要在模块加载配置文件/etc/modules.conf中加入一行:optionsrdrd_size=10000,或者在加载rd模块是在后面加上说明,即insmodrdrd_size=10000.3实现过程3.1创建压缩的文件系统 我们的实现过程是依赖于存在的Linux系统。首先启动一般的Linux系统,在这个系统中根据自己的需要,创建一个适合功能的文件系统。例如我们要实现Apache网络服务器,那么只要把完成系统启动和基本维护需要的一些命令、脚本、配置文件和库函数留下,再加上实现Apache服务器所需要的。具体过程为:在Linux下建立目录/minlinux,我们在此目录下创建的文件系统。系统的所有静态链接库,帮助手册(manpages),信息页(infopages),头文件,内核源码对于系统运行是完全无用的,所以不需要它们。在目录bin下放系统维护的一些基本工具,如ls、mv、grep、chown、chmod、chgrp、ln、rm等;在sbin下是系统启动过程通常需要的命令,如bash、e2fsck、mke2fs、fdisk、insmod、rmmod、depmod、modprobe、lsmod、shutdown、reboot、login、init、getty、mount、umount、等;usr/bin下放置Apache应用程序http和其他一些特殊工具。然后根据这些可执行文件需要的动态链接库来确定lib目录下的内容。当然目录et
c下的配置文件,dev下的设备文件需要的都必须要有,它们都是和可执行文件对应的,因为许多可执行文件执行时,一般是打开设备,根据配置文件来运行。有一个特殊的目录proc应该设置,在内核编译选项文件系统选择中,我们选择对文件系统proc的支持,那么在系统运行之后它下面有许多内容,这些内容是实
一种实现嵌入式Linux的新方法
时、不断跟踪系统内核和正在运行的进程的状态而产生的,但不占用任何磁盘空间,而是驻留在内存中。在某些情况下,可以通过它来系统设置,许多工具从这里获取信息,如dmesg、ps、top等。文件系统制作完成,大小应该在20M左右。接下来把文件系统拷贝至ramdisk为生成ramdisk映像文件做准备。我们把系统的ramdisk改变到30M,重启计算机后,执行下列操作:ddif=/dev/zeroof=/dev/rambs=1kcount=30000把ramdisk调整到零,以便后面有更高的压缩率;mke2fs–m0/dev/ram30000在ramdisk上建立30M的ext2文件系统;mount/dev/ram/mnt/ram将已格式化的ramdisk挂载至目录/mnt/ram;cp–av/minlinux/* /mnt/ram将文件结构拷贝至ramdisk。然后我们对/mnt/ram/etc目录下的文件进行修改。主要的文件是fstab,它负责在系统启动时把系统要挂载的文件系统信息传递给启动进程,我们使用ramdisk作为根文件系统,且不需要交换分区,所以此文件配置/dev/ram / ext2 defaults 1 1none /proc proc defaults 0 0即可。一般来说系统启动时都要激活交换分区,即在启动脚本中有swapon–a命令,但我们不需要交换分区,因此要把这一项移除,否则启动时会打印错误信息然后停止启动。最后我们要拷贝ramdisk的映像并将其压缩。主要步骤如下:运行df,注意1024-blocks一栏中/dev/ram的数值,在我的机上为25600;卸载/dev/ram,运行cd/root切换至root目录并运行umount/dev/ram;将ramdisk写成映象文件,运行ddif=/dev/ramof=ram30.imgbs=1kcount=25600压缩,并在/root目录下产生一个压缩的映象文件ram30.img.gz,运行gzip–9vram30.img3.2创建initrdramdisk映像首先我们在/dev/ram0中创建一个适合大小的ext2文件系统,方法同上,只是大小只有2048K,因为initrdramdisk是用来引导(bootstrap)30M的ramdisk,并将它挂载至/mnt/ram。然后在/dev/ram0中建立映像需要的目录和文件。创建目录bin、dev、etc、lib、mnt和可执行脚本文件linuxrc,linuxrc的内容为: #!/bin/bash mount–o–ro/dev/hda1//mnt #以只读方式将flash盘挂载在/mnt下 zcat/mnt/boot/ram30.img.gz>/dev/ram #将根文件系统映像解压至ram umount/dev/hda1 #卸载flash盘bin下面为linuxrc中用到的命令;lib为这些命令需要的动态链接库;etc下为配置文件ld.so.conf,定义命令运行时寻找所需动态链接库的路径,运行命令ldconfig–r/mnt/ram产生文件ld.so.cach,在命令
和动态链接库之间建立对应关系;dev下基本终端设备和linuxrc中用到的设备:console、ram、null、systty、tty1、tty2和hda1;mnt为hda1的挂载点。 最后创建压缩的initrdramdisk映像。运行df看看/dev/ram0的字节数,在
一种实现嵌入式Linux的新方法
我的计算机上1684K;转换当前目录至/root并卸载/dev/ram0umount/dev/ram0;拷贝/dev/ram0成映像文件ddif=/dev/ram0of=initrd.imgbs=1kcount=1684;产生压缩的映像文件initrd.img.gz,运行gzip-9vinitrd.img。3.3启动 系统的启动需要依靠flash盘,通过LILO把系统启动信息写入flash盘主引导区。将flash盘作为第一主盘hda,而将装有普通Linux的硬盘作为第一从盘hdb并从它启动。在flash硬盘上创建ext2文件系统,将它挂载至/mnt/flash目录。在flash盘上建立boot目录,将压缩的文件系统和initrd映像拷贝至boot目录下,同时将Linux内核、引导区记录boot.b、引导区映射map拷贝至其下。在普通Linux系统中建立LILO配置文件ramlilo.conf,配置文件如下:
boot=/dev/hda map=/mnt/flash/boot/map install=/mnt/flash/boot/boot.b prompt timeout=50
image=/mnt/flash/boot/vmlinuz append=“ramdisk_size=30000” label=embedded root=/dev/ram initrd=/mnt/flash/boot/initrd.img.gz运行命令lilo–Cramlilo.conf,将启动信息写入flash的主引导区MBR。重新启动计算机,登陆后运行mount,我们看到如下两项: /dev/ramon/ext2(rw) noneon/proctypeproc(rw)这显示只有ramdisk被挂载,制作成功。4结论在我们制作的嵌入式Linux中进行各种操作,速度非常快,而且系统很稳定。没有出现因为根文件系统损坏而导致系统进入手工维护界面的现象。用它作为HTTP网络服务器、网络监视器、宽带通信设备管理器或者其他需要长时间不停运行的机器,都有很高的应用价值。
一种实现嵌入式Linux的新方法(2)
<DIVid=content><scriptsrc="/mx/baid.js"><DIVid=viewad><scriptsrc="/a/lw.js">
参考文献
1.邹思铁嵌入式Linux设计与应用清华大学出版社2002北京2.黄敦如何构造嵌入式Linux系统dunn@20013.TomFawcettTheLinu
xBootdiskHOWTOBootdisk-HOWTO@2004.PaulMoodyminiHOWTOEmbeddedLinux1.1bpaulmoody@1998
正在阅读:
一种实现嵌入式Linux的新方法06-06
数码单反摄影若干基本知识扫盲 - 图文04-15
万科&183;棠樾项目推广思路简析08-15
英美文学选读练习题09-09
高一化学第一学期硫酸04-22
我学会了感恩作文400字07-04
房屋建筑学复习题03-20
2.3-最常见的随机过程或随机模型07-21
用友财务软件高级试题04-05
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 嵌入式
- 实现
- 方法
- Linux
- 东方重机核电技术标准体系的建立
- 公路水运继续教育-桥梁结构试验检测仪器设备(一)(二)试题及答案
- 好孩子集团生产现场管理制度
- 中国液体化工品仓储市场发展状况及营销战略研究报告2016-2021年
- 2013年《中级会计实务》各章学习策略及易错知识点总结
- 土木工程_毕业设计_开题报告
- 质量保证系统管理规程
- sllse45d低功耗双通道数字隔离器
- 八年级物理实验教学总结
- SFC重装机兵R高达版说明
- 硫化氢中毒事故应急预案
- 过共晶铝硅合金的研究及应用
- 表见代理的特别构成要件(杨代雄)
- 中西餐桌礼仪的差异
- 台式机硬盘硬盘盒diy组装移动硬盘
- 中小学安全知识竞赛试题及答案.doc
- 创建学习型企业申报材料
- 新完成句子方法====
- 教育学与普通心理学(考教师编制时候自己整理的,希望对准备考编的人有些帮助)
- 射频功率dbm在标准50ω阻抗下电压对照表Power vs. dBm and Volts 黑白