Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Jul 1999 18:03:30 -0400 (EDT)
From:      Jay Kuri <jay@oneway.com>
To:        freebsd-small@FreeBSD.ORG
Subject:   HowTo:  Making bootable FlashRom Images.
Message-ID:  <Pine.BSF.4.05.9907301455590.20337-100000@daedal.oneway.com>
In-Reply-To: <Pine.BSF.4.05.9907282309010.2937-100000@daedal.oneway.com>

next in thread | previous in thread | raw e-mail | index | archive | help

Late but not forgotten... Skip to the very bottom for the ultra-short
version.

These are the instructions for making bootable FlashRom images using
PicoBSD 0.44.  The devices I use are have an IDE-controller chip which
makes them look to the system like IDE drives.  But there is no reason
that these instructions can't be applied to another type of flash rom
with only minor modifications.

The process is suprisingly easy.

First you need to know the layout of your device.  IE: it's disklabel.
The roms I use masquerade as IDE drives, so I just created a standard
disklabel using the geometry of the drive as taken from the bios.  
The easiest way to do this if you have the device hooked up to a running
FreeBSD system, is to go into sysinstall and set it up in the
partition/label section.  

Basically what you have to do is create an entry in the /etc/disktab file.
For our 8M flash, this is the disktab entry we used:

flash8:\
        :dt=ESDI:ty=winchester:se#512:nt#4:ns#16:nc#250:\
        :pa#16000:oa#0:ta=4.2BSD:ba#8192:fa#1024:\
        :pc#16000:oc#0: 

The first line is the key (name) of the disktab entry, the second line
sets the geometry of the drive, 4 heads, 16 sectors/track and 250
cylinders (nt#4, ns#16, and nc#250).  The third line sets the 'a' slice,
occupying the whole disk (pa#16000 or 16000 sectors, oa#0 (offset 0)), and
containing a ffs (4.2BSD) filesystem. Then the 'c' slice is defined, again
with the pc#16000 and oc#0 values.   (see the top of the disktab file for
a better explanation of disktab entries)

Now comes the modifications.  Remember that this is based on the 0.44
PicoBSD distribution, not the new Makefile-based one.  I don't know how
different it is...

In the stage3 file, find the line that contains the dd to picobsd.bin
command (about line 20).  The count parameter will be set to 1440.  This
is the size in K.  For my rom, I use 8000 (since that is the actual size
of our rom).  This value will be half the pc# value we entered above.

Then we go down to the disklabel line (~ line 36).  Find the fd1440 and
replace it with the key you entered in the disktab file.  For this
example, 'flash8' is the correct value.

Depending on the size of your MFS filesystem, you may want to increase the
INODES in stage1.

That covers the changes you need to make in the scripts.

There are some other changes that need to be made in order for your new
PicoBSD-Flash to work.  Your best bet is to create a custom picobsd type
(just copy the one that most closely matches the features you want).  I
used net. 

The first thing you have to do is make sure that your PicoBSD kernel
supports whatever type of device your flash drive is detected as.  Since
ours is an IDE device, we need to enable the ide devices (wdc0, wd0, wd1,
etc).  You do this by editing the PICOBSD config file in the conf/
directory.  

You also have to add the devices to your MFS filesystem. You do this by
editing the Makefile in the mfs.tree directory.  On approximately line
37, add the devices for your IDE drive (wd0h is a good way to get all of
the slices you need), along with any other devices you want (I added ttyd0
for my console port).

Now that you have support for your IDE device configured into your PicoBSD
kernel, and the devices set up, you have to change the way the system
boots.  

Normally after PicoBSD boots, it mounts the floppy drive and copys files
off of it onto the MFS filesystem it created.  Obviously, we need to make
it mount the flash instead.  There are two files you need to change to do
this.  These files are in the lang directory.  Edit the mfs.rc.(language)
file (in my case mfs.rc.en) and find the line that mounts the floppy ( ~
line 24)  and change the fd0 device to your flash device.  I used wd0c.
Now edit the update.(language) script and do the same thing, make sure you
get the umount command as well).

	WARNING:  If you enter the wrong device or do not create the
device nodes, your flash will NOT work, it will enter a horrible infinite
loop running /etc/rc again and again until you reboot.

Thats it.  

When you run the build script, and select your custom configuration, it
will create a picobsd.bin file that is the correct size for your flash
device.  You should be able to dd the file directly onto your flash and
then boot from it.  


Oh.. and one last thing.  Be VERY careful when dumping the image to your
flash (esp. if it is an IDE-type) because it is very easy to mistype and
overwrite your REAL drive with your picobsd distribution.  Let me tell
you, until I did that, I'd never seen a FreeBSD machine die so hideously.
=)

Good luck, and please send me feedback and/or better ways to do these
things.

Take it easy,
Jay

PS: Short version:

1: create a disktab entry for your flash device

2: edit stage3 so that it creates the right size picobsd.bin image and 
   uses the disktab entry you created (instead of fd1440) to disklabel the
   file.

2a: If you are going to have a larger MFS filesystem, edit INODES in
    stage1.

3: Add your flashrom device to the PICOBSD kernel config file (wd0 in our
	case)

4: Add your flashrom device to the Makefile in mfs.tree

5: Edit lang/mfs.rc.(lang) so that it mounts the flash device instead of
	the floppy device.  
5a: Edit lang/update.(lang) to do the same.

6: build it, dd it and watch it work. =)



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-small" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9907301455590.20337-100000>