Embedded 版 (精华区)

发信人: vmlinuz (生活将因为你而美丽), 信区: Embedded_system
标  题: Embedding Linux in an EPROM
发信站: 哈工大紫丁香 (2001年06月01日08:47:19 星期五), 转信

Embedding Linux in an EPROM
by Dave Bennett
January, 1997
Introduction
This article describes one way to run Linux in an embedded system
with no hard disk. The application I describe is an Operator Inter
face in a monitor and display system developed by Boeing Flight Te
st. The airborne environment requires something fairly rugged, and
 must withstand common power interruptions. To meet these requirem
ents we decided to build the operator interface without a hard dis
k.
Overview
The basic concept used is to boot from a solid state disk (SSD) in
 EPROM, copy a root file system from EPROM to a ram disk, load the
 operator interface software from a host and run. This article foc
uses on the details of how the system works, and on development te
chniques used.
The hardware selected was a VME based Single Board Computer (SBC)
80486 with 16Meg, a PC104 SSD which could hold 4Meg EPROM, and som
e other PC104 boards. This SBC has built in bios support for using
 the SSD. The system uses a programmable keyboard and a standard V
GA display.
System Operation
For booting two options were considered: 1) To boot DOS then run t
he loadlin program (to load linux) from autoexec.bat, or 2) to ins
tall LILO and boot directly to linux. The advantage of the second
option would be slightly shorter boot time. The first option was u
sed because of the programmable keyboard -- the software for progr
amming the keyboard runs under DOS.
A bit of kernel hacking was needed to make the system work. The ra
mdisk.c code was changed to load from any block device, not just a
 floppy (code fragment 1). Also, a new block driver was written to
 read from the EPROM device (epromdsk.c).
When deciding how to implement the EPROM device driver the first i
dea was to create an image of a disk in the EPROM. This would prov
ide a ram-disk the same size as the EPROM - 3.5MB in this case (th
e DOS portion of the SSD takes 1/2 MB). Instead, to allow larger r
amdisk, a compressed disk image is used. The compression used is s
imple - any sectors which are identical are only stored once. The
primary advantage this gives is blank areas of the disk image don'
t need to take up EPROM space. Figure 1 shows the SSD disk compres
sion used.
In order to automatically run the operator interface application a
 program was written to replace getty. This program (dboot.c) will
 run login for a given user and set the stdin, stdout, and stderr
to the specified virtual console.
The boot sequence is:
Power up & run memory tests.
load DOS which executes AUTOEXEC.BAT
run the keyboard programming application
run loadlin - this reads a linux kernel from the DOS disk & execut
es it
the linux kernel takes over
load the ramdisk from the EPROM disk
switch the root file system to the ram disk
init will read inittab which executes dboot instead of getty
the operator interface application is started.
Development
After the fun stuff of figuring how to make an EPROM driver and ho
w to boot the system, the more mundane task of putting together th
e EPROM disk contents had to be done. This was done using a develo
pment disk which was partitioned as follows:
/dev/hda1 - 80MB "full" linux system
/dev/hda2 - 6MB EPROM development
/dev/hda3 - 20MB DOS partition
LILO was used to allow booting to either linux system, or to DOS.
Programming EPROM's is a time consuming task, and to be avoided as
 much as possible. To this end, most of the development is done us
ing the disk.
The first phase of disk image development was to identify required
 and desired items. The first step was to come up with a minimal s
ystem and then add the items required for the operator interface.
Not being a unix expert, coming up with the minimal system ended u
p being somewhat trial and error. I started with what I thought wa
s needed, then tried running it. When an error occured because of
a missing program or library, that file would be added. This went
on until the system would run happily.
The bulk of this effort was done by copying files from the "full"
linux partion to the 6MB partition, and boot DOS and use the loadl
in line:
loadlin zimage root=/dev/hda2 ro
Once the system was fairly stable the 6MB partition would be loade
d into ramdisk. This is very similar to how the ramdisk is loaded
from EPROM, but development is faster since EPROMS don't need to b
e programmed. To test the system without programming EPROM's, The
system was booted into DOS and loadlin run with the line:
loadlin zimage root=/dev/hda2 ramdisk=6144 ro
Because of the modification to ramdisk.c the /dev/hda2 disk image
is loaded into the ramdisk then the root file system is switched t
o the ramdisk. The process of refining the disk image continues un
til everything is "perfect".
Programming EPROMS
The process of programming (burning) the EPROMs starts out by tar-
ing the small disk drive, then un-tar-ing it onto a clean (zeroed
out) file system. By putting the file system onto a clean disk all
 unused sectors are zeroed out, and the disk compression works (se
e Figure 1).
To tar the disk image the "full" linux partition was booted, and t
he 6MB partition was mounted. By doing this the proc file system i
s not included in the tar. The following commands can be used:
mount -t ext2 /dev/hda2 /mnt
cd /mnt
tar -cpf /tmp/eprom.tar *
To create the (uncompressed) disk image, I used a different machin
e with a 6MB ramdisk and the following commands:
dd if=/dev/zero of=/dev/ram count=12288
mke2fs /dev/ram 6144
mount -t ext2 /dev/ram /mnt
cd /mnt
tar -xpf ~/eprom.tar .
dd if=/dev/ram of=~/eprom.dsk count=12288
This creates a file (eprom.dsk) which is a sector by sector image
of the disk. The data to be programmed into the EPROMs is the comp
ressed image. This is done with a program (med) which reads the di
sk image (eprom.img), runs the disk compression, and outputs a bin
ary file (eprom.img) which will be programmed into the EPROMs.
med ~/eprom.dsk ~/eprom.img
The EPROM image is then moved to an EPROM programmer and the image
s are burned. The details of this are left to the interested reade
r to figure out.
DOS boot SSD
Fortunately the SBC came with SSD utilities to help build the disk
 image. The DOS SSD disk has a bare minimum of files in it: the DO
S boot files, command.com, autoexec.bat, the keyboard loading prog
ram, loadlin, and the zImage.
Conclusion
This article gave details on one way to run linux from EPROM witho
ut using a hard disk. The development of what goes on the disk is
a large part of the job and methods need to be developed to minimi
ze this effort. Using the EPROM disk is working well in our applic
ation.
About the author
Dave Bennett "works with computers" at Boeing in the Commercial Ai
rplane Flight Test group. When not at work he enjoys the company o
f his lovely domestic associate, two cats, and a bunch of fish. Da
ve enjoys building things - a few of which are featured on the lam
e web page http://www.vogie.com/. Dave can be reached at bennett@v
ogie.com or dave.bennett@boeing.com.

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: mtlab4.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.330毫秒