GRUB on DoC Millennium/2000 - Instructions

Dzuy Nguyen dzuy at infinity-studios.com
Wed Jun 19 22:56:56 EDT 2002


Thanks, Mark.  Your procedures work for me so you can make it the 
official HOWTO.
I guess the difference is dformat.  eraseall seems to make the DoC Mil 
oblivious to the
BIOS.  Only annoying thing is you have to boot it in DOS and run 
dformat.  A linux
version of dformat would be nice.  How do we go about it?  Is there code 
to port it?

Mark Meade wrote:

>My apologies for screwing up the attachment.  Here it is in text:
>
>Booting GRUB on the DiskOnChip Millennium
>
>1.  Preliminaries
>
>The following procedure was done on a desktop PC, using an 8MB DoC Millennium 
>and the M-Sys ISA Evaluation card.  A DOS partition was used to run the M-Sys 
>utilities, prior to installing GRUB.   This procedure *might* work with a DoC 
>2000 -- but it has not been verified.
>
>The Linux kernel must have the following MTD options either built-in or 
>compiled as modules:
>
>        MTD Support: MTD, Debugging, Direct char device access, NFTL, NTFL 
>        write support:
>
>                CONFIG_MTD=y
>                CONFIG_MTD_DEBUG=y
>                CONFIG_MTD_CHAR=y
>                CONFIG_NFTL=y
>                CONFIG_NFTL_RW=y
>
>        Self-contained MTD Device Drivers: M-Systems DiskOnChip 2000 and 
>        Millennium:
>
>                CONFIG_MTD_DOC2000=y  
>                CONFIG_MTD_DOCPROBE=y
>
>In the following examples, a 2.4.18 kernel called "vmlinuz-doc" with the 
>above MTD options built-in was used.
>
>2.  Save DoC contents, and the Bad Block Table
>
>Get the latest version of the DOS based M-Systems DiskOnChip Software 
>Utilities from www.m-sys.com.  If desired, the GETIMAGE utility can be used 
>to save the current contents of the DoC:
>
>        getimage /win:xxxx <filename>
>
>(where xxxx is the DoC base memory address in hex (window), for example: 
>/win:d000)
>
>**IMPORTANT**: Save the Bad Block Table!  Before attempting to boot with 
>GRUB, make sure that the bad block table has been saved.  Doing this insures 
>you can always restore the BBT in the event of the DoC being corrupted or 
>completely erased:
>
>        dformat /win:xxxx /noformat /log:<filename.txt>
>
>This creates a text file containing a list of all the bad blocks on the DoC.  
> The dformat "uselog" option may be used to restore the BBT if needed.
>
>        dinfo /BBT
>
>will also display some detailed information about the DoC and the bad block 
>table.  
>
>3.  Verify TrueFFS Driver Version
>
>The newer versions (5.0 or later) of the M-Systems DOC firmware may not work 
>correctly with the latest version of the MTD drivers. This has something to 
>do with the "UnitSizeFactor != 1" problem documented elsewhere.  An earlier 
>version (4.2) seems to work fine.
>
>Using version 4.2 of the DOS TrueFFS utilities available from M-Systems 
>(www.m-sys.com), verify that the DOC is recognized, and that the firmware 
>version is 4.2:
>
>        dinfo
>
>If the firmware version is 5.0 or later, run the DFORMAT utility:
>
>        dformat /win:xxxx /s:doc42.exb
>
>4.  Patch and compile GRUB
>
>Get the latest grub sources:
>
>        mkdir grub-doc
>        cd grub-doc
>        ftp alpha.gnu.org
>        cd gnu/grub
>        get grub-0.92.tar.gz
>        tar xzvf grub-0.92.tar.gz
>
>Get the latest MTD sources:
>
>        cvs -d :pserver:anoncvs at cvs.infradead.org:/home/cvs login 
>        (password = anoncvs)
>        cvs -z3 -d :pserver:anoncvs at cvs.infradead.org:/home/cvs co mtd
>
>Patch GRUB with DiskOnChip updates:
>
>        cd grub-0.92
>        patch -p0 -i ../mtd/patches/grub-2002-02-19-doc.patch
>
>This patch may fail on the "ChangeLog" file, but all other files should patch 
>correctly.  The 2002-02-19-doc patch was originally a patch against grub 
>version 0.90.
>
>5.  Build GRUB:
>
>        aclocal && automake && autoconf
>
>If there are any error messages here, you'll probably need up update automake 
>and autoconf to the latest versions.
>
>        ./configure --enable-diskonchip-mil512 --enable-ext2fs 
>--enable-diskonchip-biosnetboot \
>                --disable-ffs --disable-xfs --disable-jfs --disable-vstafs 
>--disable-reiserfs --disable-minix --disable-fat
>        make
>
>See "README_DiskOnChip" for more information regarding the ./configure 
>options, specifically the difference between "-mil256" and "-mil512".
>
>6.  Copy GRUB to DOC
>
>        cd ../mtd/util
>        make doc_loadbios
>        ./doc_loadbios /dev/mtd0 ../../grub-0.92/stage1/grub_firmware
>
>If an error is reported regarding /dev/mtd0, you might need to run the 
>./MAKEDEV script to create the proper device MTD device entries in the /dev 
>directory.
>
>7.  TURN OFF PC!
>
>**IMPORTANT** - The PC should be turned off (not just rebooted) after running 
>doc_loadbios.  This may not be necessary on all types of hardware, but it was 
>required on my PC.  From M-Systems application note DOC-044:
>
>The boot block is implemented as a XIP block located between the flash media 
>and the system bus.  After the DiskOnChip Millennium powers-on, or when its 
>reset signal is negated, the contents of the first page of flash memory are 
>copied into the Boot Block.
>
>The "doc_loadbios" utility copies data to this first page of flash memory.  
>My PC must not be "negating the reset signal" to the DoC on a normal reboot 
>-- a full power cycle is required to copy the flash memory to the boot block.
>
>8.  Change Boot Sequence
>
>In the BIOS setup, select NETWORK (or NIC, or its equivalent) as the first 
>boot device.
>
>Selecting "--enable-diskonchip-biosnetboot" causes the GRUB/DoC code to hook 
>INT 18H, which is historically known as the "BASIC interrupt" or "Diskless 
>Boot Interrupt".  Using this option with the DoC on a PC is useful because 
>you change easily change the boot sequence back to the hard drive when needed.
>
>If the BIOS does not have a NETWORK boot option, it may be possible to 
>disable the "biosnetboot" option, rebuild GRUB, and copy grub_firmware to the 
>DoC again.  In this case, the GRUB/DoC code will hook the INT 19H (bootstrap) 
>handler.  This doesn't work at all on my PC, but theoretically it should 
>override any boot sequence options in the BIOS setup.  
>
>The downside of this option (in a PC environment, anyway) is that you may 
>need to physically remove the DoC (or eval-board) to get the PC to boot from 
>the hard drive again.  If that happens, it may be necessary to reinstall the 
>DoC *after* the PC has booted, into a powered up eval board.  Of course, this 
>is *not* recommended, but it has been done...
>
>9.  Verify GRUB boot
>
>The PC should now boot from the DiskOnChip.  The BIOS may say something like 
>"Searching for boot record from Network...".  The first DoC messages 
>displayed should be:
>
>        DoC Mil D000
>        Jumping to Grub
>        DiskOnChip Millennium found at d0000
>
>Where D000 is the "window" described earlier.
>
>When the boot process completes, there should be a "grub>" command line.  We 
>haven't installed a kernel or a "menu.lst" file on the DiskOnChip yet, so 
>this step is just to verify that the "grub_firmware" was installed correctly, 
>and that the DoC will boot.
>
>At this point, you can either reboot again, change the boot sequence back to 
>IDE (or whatever), and boot back into Linux.  Alternatively, if you know 
>where your kernel and root filesystem is on the hard drive, simply type 
>something like:
>
>        kernel (hd0,0)/vmlinuz-doc root=/dev/hda2
>        boot
>
>10.  Partition the DiskOnChip
>
>        fdisk /dev/nftla
>
>If /dev/nftla is recognized, there will probably be one FAT12 partition on 
>the DiskOnChip.  In this case, it won't be necessary to run the Linux 
>"nftl_format" or "eraseall" utilities.  Use fdisk to delete this partition, 
>and continue with step #11.
>
>NOTE:  The "eraseall" utility can be dangerous as it will complete erase the 
>DoC, including the bad block table -- saving the BBT as described in step #2 
>is highly recommended.
>
>If /dev/ntfla is NOT recognized, use the nftl_format program:
>
>        ./nftl_format /dev/mtd0 98304
>
>The "start offset" of 98304 insures that the grub_firmware is not 
>overwritten.  As nftl_format runs, there should be notices about "skipping 
>bad zone (factory marked)".  The bad zone values should be identical to the 
>values in the file created in step #2.
>
>After nftl_format is complete, reboot the PC.
>
>11.  Create ext2 partition
>
>To boot directly from the DoC, we'll need to create an ext2 partition, and 
>install the kernel and GRUB menu.lst file:
>
>        fdisk /dev/nftla                
>        n p 1 <enter> <enter>   (create new primary partition, using defaults)
>        w                       	     (save new partition info)
>
>        mke2fs /dev/nftla1      
>        mkdir /mnt/doc
>        mount -t ext2 /dev/nftla1 /mnt/doc
>        mkdir -p /mnt/doc/boot/grub
>        cp /boot/vmlinuz-doc /mnt/doc/boot
>
>Now create a "menu.lst" file in /mnt/doc/boot/grub.  This file should contain 
>the following:
>
>        timeout 10
>        default 0
>
>        title DoC Millennium Boot
>        kernel (dc0,0)/boot/vmlinuz-doc root=/dev/hdaX
>
>Where hdaX is the hard drive that contains your root Linux filesystem.  You 
>could also add another entry to the file to boot directly from the hard 
>drive, if desired.
>
>Umount the /mnt/doc directory, and reboot the PC.
>
>At this point, the PC should boot entirely from the DoC, and attempt to mount 
>the root filesystem on your hard drive.  If this works, the next step to a 
>fully self-contained boot is to create a full root filesystem or ramdisk on 
>the DoC.  Once that has been done, change the "root=/dev/hdaX" option to 
>"root=/dev/ntfla1".
>
>Credits:
>
>Thanks to Ilguiz Latypov <ilatypov at superbt.com> for reviewing these 
>instructions, and for answering many questions related to GRUB on the 
>DiskOnChip.
>
>______________________________________________________
>Linux MTD discussion mailing list
>http://lists.infradead.org/mailman/listinfo/linux-mtd/
>
>






More information about the linux-mtd mailing list