linux刻录引导:从 EPROM 引导 Linux


本文简要介绍从486单板机EPROM引导Linux提供了种在无硬盘嵌入式系统上运行Linux方法我们要介绍应用个显示器上Operator Interface,它显示系统是由Boeing Flight Test开发飞行环境需要种可以防止突然性电源中断机制为了满足这样要求我们决定在无硬盘系统上实现Operator Interface
mvXfbaiducuk5vr
概况
mvXfbaiducuk5vr

mvXfbaiducuk5vr
基本问题包括从EPROMSSD(solid state disk)引导将root文件系统从EPROM拷贝至个RAM disk从客户机加载Operator Interface软件并且执行它本文主要讨论系统工作机制细节以及它所使用开发技巧
mvXfbaiducuk5vr

mvXfbaiducuk5vr
我们所选用硬件为台拥有16M RAM、个能够容纳4M
mvXfbaiducuk5vr

mvXfbaiducuk5vr
EPROMPC104 SSD和其他些PC104板基于VME单板机BIOS支持SSD使用系统使用个可编程键盘和块标准VGA显示卡
mvXfbaiducuk5vr

mvXfbaiducuk5vr
系统操作
mvXfbaiducuk5vr

mvXfbaiducuk5vr
引导时我们需要考虑两个选项:
mvXfbaiducuk5vr

mvXfbaiducuk5vr
* 在DOS下使用loadlin(可以加在Autoexec.bat文件中)引导Linux
mvXfbaiducuk5vr

mvXfbaiducuk5vr
* 安装LILO直接引导Linux
mvXfbaiducuk5vr

mvXfbaiducuk5vr
第二种选项好处是引导所用时间较小我们采用第种方案我们使用个可编程键盘——在DOS运行为键盘编程软件
mvXfbaiducuk5vr

mvXfbaiducuk5vr
为了使系统工作我们需要kernel-hackingRamdisk.c代码被改成可以从任意块设备加载而不仅仅是从软盘另外我们写个从EPROM设备块设备驱动
mvXfbaiducuk5vr

mvXfbaiducuk5vr
实现EPROM设备驱动种思想是在EPROM中生成个磁盘映像这会为我们提供个同EPROM相同大小RAM disk在这种情况下大小为3.5M(SSDDOS分区占1/2M)为了得到个大RAM disk我们使用个压缩磁盘映像压缩思想很简单相同扇区之存贮这样好处是磁盘映像空白区域不占用EPROM空间
mvXfbaiducuk5vr

mvXfbaiducuk5vr
为了自动运行Operator erface我们需要来替代getty
mvXfbaiducuk5vr

mvXfbaiducuk5vr
这个(dboot.c)应该运行登录可以为指定虚拟终端设置stdin,stdou和stderr
mvXfbaiducuk5vr

mvXfbaiducuk5vr
引导过程是这样
mvXfbaiducuk5vr

mvXfbaiducuk5vr
l 加电后进行内存检测
mvXfbaiducuk5vr
l 加载运行AUTOEXEC.BATDOS
mvXfbaiducuk5vr
l 运行键盘应用
mvXfbaiducuk5vr
l 运行LOADLIN——从DOS分区中读取Linux内核执行
mvXfbaiducuk5vr
l 由linux内核接管系统
mvXfbaiducuk5vr
l 从EPROM中加载RAM disk
mvXfbaiducuk5vr
l 转换root文件系统到RAM disk
mvXfbaiducuk5vr
l init读取inittab注意inittab执行dboot 而不是getty
mvXfbaiducuk5vr
l 启动Operator erface
mvXfbaiducuk5vr

mvXfbaiducuk5vr
开发
mvXfbaiducuk5vr

mvXfbaiducuk5vr
阶段任务是将EPROM磁盘内容组织在我们使
mvXfbaiducuk5vr

mvXfbaiducuk5vr
用如下分区辅助盘来完成这项任务:
mvXfbaiducuk5vr

mvXfbaiducuk5vr
* /dev/hda1 – 80M linux system
mvXfbaiducuk5vr
* /dev/hda2 - 6M EPROM
mvXfbaiducuk5vr
* /dev/hda3 - 20M DOS分区
mvXfbaiducuk5vr
* 使用Lilo引导
mvXfbaiducuk5vr
直接对EPROM进行编程时很费时间所以我们大部分开发使用辐助盘来进行
mvXfbaiducuk5vr

mvXfbaiducuk5vr
磁盘映像开发首先确定需求首先完成个最小系统然后再将operator erface所需项目加到系统中由于我不是Unix专家所以这个最小系统完成是个试验、纠错过程我不断试验直到系统正常运行
mvXfbaiducuk5vr

mvXfbaiducuk5vr
步将Linux分区内容拷贝到6M分区中然后在DOS下进行如下操作:
mvXfbaiducuk5vr
loadlin zimage root=/dev/hda2 ro
mvXfbaiducuk5vr

mvXfbaiducuk5vr
如果系统稳定则将6M分区载入到RAM disk这同从EPROM中加载是相似为了避免对EPROM编程而测试系统在DOS下进行如下操作:
mvXfbaiducuk5vr
loadlin zimage root=/dev/hda2 ramdisk=6144 ro
mvXfbaiducuk5vr

mvXfbaiducuk5vr
对ramdisk.c进行了修改/dev/hda2磁盘映像被加载到RAM中然后root分区转换为RAM disk我们需要不断地修改disk image直到它正常工作为止
mvXfbaiducuk5vr

mvXfbaiducuk5vr
对EPROMs编程
mvXfbaiducuk5vr

mvXfbaiducuk5vr
首先使用tar将小disk image打包然后解压缩到个干净文件系统
mvXfbaiducuk5vr

mvXfbaiducuk5vr
为了打包disk image我们从Linux引导然后加载6M分区不要对proc文件系统执行tar命令我们使用以下命令:
mvXfbaiducuk5vr
mount –t ext2 /dev/hda2 /mnt
mvXfbaiducuk5vr
cd /mnt
mvXfbaiducuk5vr
tar –cpf /tmp/eprom.tar *
mvXfbaiducuk5vr

mvXfbaiducuk5vr
为了生成disk image我使用另拥有6M RAM disk计算机和如下命令行:
mvXfbaiducuk5vr
dd =/dev/zero of=/dev/ram count=12288
mvXfbaiducuk5vr
mke2fs /dev/ram 6144
mvXfbaiducuk5vr
mount –t ext2 /dev/ram /mnt
mvXfbaiducuk5vr
cd /mnt
mvXfbaiducuk5vr
tar –xpf ~/eprom.tar
mvXfbaiducuk5vr
dd =/dev/ram of=~/eprom.dsk count=12288
mvXfbaiducuk5vr

mvXfbaiducuk5vr
这生成个eprom.dsk文件我们使用med.c将disk image(eprom.dsk)写入EPROMs(即对EPROMs编程)
mvXfbaiducuk5vr
Med ~/eprom.dsk ~/eprom.img
mvXfbaiducuk5vr

mvXfbaiducuk5vr
然后EPROM员将EPROM image刻入EPROM中
mvXfbaiducuk5vr
DOS boot SSD
mvXfbaiducuk5vr
SBCSSD功能帮助我们构建disk imageDOS SSD disk最少需要如下文件:DOS引导文件command.com,autoexec.bat键盘加载loadlin与zImage
mvXfbaiducuk5vr

mvXfbaiducuk5vr
结论
mvXfbaiducuk5vr
辅助盘上开发工作量很大我们需要采取措施来减少工作量EPROM disk在我们应用中工作很好
mvXfbaiducuk5vr

Tags:  linux引导文件 grub引导linux linux引导 linux刻录引导

延伸阅读

最新评论

发表评论