Hi all,
Currently, I am doing development on Assabet/Neponset platform
running Arm Linux. Getting a combination of angelboot + kernel +
ramdisk is not a problem now. When I moved on to bootldr, a lot of
problems arised. Actually, I cannot get the system up at all. I have
read through all the artcles in this maillist, still I cannot find a
clue. So I would like write down my understandings of bootldr
booting here and hope gurus of this maillist can give some
hints/corrections.
According to a FAQ in handhelds.org, there can be four ways of
booting:
1) bootldr + ramdisk. The ramdisk will be unpacked into DRAM at boot
time. Such method wastes a lot of DRAM and makes writing back to
flash diffcult.
2) bootldr + standard filesystem on flash block device (e.g. M-System
FTL). So far, nobody had discussed this method in this list. So I
guess it is not applicable or not feasible.
3) bootldr + MTD + cramfs. No DRAM wasted, but making changes to the
filesystem is not allowed. (cramfs is read-only). Am I correct that
cramfs must make use of the MTD driver?
4) bootldr + MTD + JFFS. This is the best combination. No DRAM is
wasted and the filesystem can be updated on-the-fly.
Now, let's come to the practical part. I think these four methods
are listed in increasing order of difficulty. However, I am stupid
enough to not even get the first method working :( The latest CVS
version of bootldr is used. $CONFIG_ARCH=neponset and
CONFIG_BIG_KERNEL=y. After I Jflash-linux in the bootldr, then I
load in a kernel (around 660k) and a ramdisk (3072k) via boot promot.
This pair works for me under angelboot. I just changed two kernel
options: disable the angelboot support and replace the kernel command
from "keepinitrd" to "noinitrd". The following messages are what I
got from the minicom when I boot this combination:
%*
@000002A0
F02000000
*MTST
00000001
00000002
00000004
00000008
00000010
00000020
00000040
00000080
00000100
00000200
00000400
00000800
00001000
00002000
00004000
00008000
00010000
00020000
00040000
00080000
00100000
00200000
00400000
00800000
01000000
02000000
04000000
08000000
10000000
20000000
40000000
80000000
ENDM
STKP
C19F3FFC
MMU table start=C19F4000
Boot data start=C19F8000
Boot data size=00008000
Stack data base=C19F0000
Stack data size=00004000
FLASH_BASE=00000000
Evacuating 1MB of Flash to DRAM at: C1E00000
done
Map Flash virtual section to DRAM at: C1E00000
btflash_init: mfrid=00890089
devid=00180018
walking flash descriptors
btflash_init: found flash 28F128J3A
flashDescriptor=0000CFF8
flashSectors=0000CDD8
nsectors=00000080
flash_size=02000000
flash_address_mask=01FFFFFF
get_param: could not find parameter system_rev
dram_size: 00000358
>> Compaq OHH BootLoader, Rev 02.0B.02
>> 01-03-05_16:37
>> ARM Processor Rev=6901B118
>> (c) 2000 Compaq Cambridge Research Laboratory
Press Return to start the OS now, any other key for monitor menu
eval param blk
booting flash...
boot_magic=5A5ABEEF
kernel_image_first_word=E1A00000
Linux ELF flash_imgstart=5008000C size=000A5400 dest=C0000000
offset=00008000
MMU Control=C19F4071
copying Linux kernel ... done
linuxEntryPoint: C0008000
kernel_image_dest: C0000000
kernel_image_offset: 00008000
C0008000: E1A00000
C0008004: E1A00000
C0008008: E1A00000
C000800C: E1A00000
C0008010: E1A00000
C0008014: E1A00000
C0008018: E1A00000
C000801C: E1A00000
C0008020: EA000002
C0008024: 016F2818
root_filesystem_name=ramdisk
argc=00000002
args= noinitrd root=/dev/mtdblock4 init=/linuxrc console=ttySA0
setting boot parameters
get_param: could not find parameter system_rev
first_word_of_ramdisk=00300100
Setting up Linux parameters at address=C0000100
using_ramdisk=00000001
initrd_start=D0100004
dram_size=02000000
nr_pages=00002000
command line is: noinitrd root=/dev/mtdblock4 init=/linuxrc
console=ttySA0
linuxEntryPoint=C0008000
Booting Linux image
The whole system just hangs there. One thing I suspect is the
"/dev/mtdblock4" in the command line. According to my understanding,
method (1) doesn't need MTD driver. So I didn't enable MTD driver in
kernel compilation. Am I correct here?
I am also wondering which version of bootldr I should use. John
Dorsey has a patch against Nov-26-2000 CVS bootldr. However, someone
in this list claimed that it only works with NetBSD. Then Robert
released a patch about two weeks to make bootldr working with Linux.
This patch has been merged into the CVS tree. Now, John Dorsey
released a newest patch for BIG_KERNEL support (isn't it supported
already?) and solving static memory configuration problem. So what
kind of combination should I use now? Really confused.
I have another question reguarding the initrd used in angelboot. I
am wondering why we need initrd in the first place. Initrd is used
for two phases boot up. Since we are not going to change our root
filesystem, why we need initrd. Also, if we do use initrd, where is
the script /linuxrc in all the ramdisks working with angelboot I
found so far? It must be a stupid question, but I just don't know
why. :(
Ok, stop here. Too many questions. anyone had completed method 3 or
4 on assabet/neponset so far?
Regards,
Leonard Ye
=====
When there is great love, there are always miracles.
-- Willa Cather
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
_______________________________________________
http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
Please visit the above address for information on this list.