All of lore.kernel.org
 help / color / mirror / Atom feed
* ARM bootloaders (Zaurus) and CMDLINE
@ 2009-01-15 17:28 Andrea Adami
  2009-01-16 10:44 ` Andrea Adami
  2009-01-16 12:34 ` Stanislav Brabec
  0 siblings, 2 replies; 9+ messages in thread
From: Andrea Adami @ 2009-01-15 17:28 UTC (permalink / raw)
  To: openembedded-devel

I'm trying to understand in details the boot-process and the changes
between 2.4 and 2.6 kernels.

The idea is to read the mtdparts passed by the Zaurus bootloader
(angel) with a 2.6 kernel.

I found two threads which shed some light:

http://lists.gnu.org/archive/html/qemu-devel/2007-07/msg00344.html
https://kerneltrap.org/mailarchive/linux-kernel/2007/10/25/355025/thread

The question is simple: is it possible to apply the
CONFIG_SHARPSL_BOOTLDR_PARAMS patch to the 2.6 kernels?

We'd need this in the kexecboot-kernel, to be able to recognize the
mtdparts passed in /proc/cmdline. This is actually working only with
u-boot.

Other solution would be a raw read of the nand addresses and a
subsequent edit of the CMDLINE params passed by the kexecboot kernel
to the launched kernel.

Any advice?

TIA

Andrea



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-15 17:28 ARM bootloaders (Zaurus) and CMDLINE Andrea Adami
@ 2009-01-16 10:44 ` Andrea Adami
  2009-01-16 12:34 ` Stanislav Brabec
  1 sibling, 0 replies; 9+ messages in thread
From: Andrea Adami @ 2009-01-16 10:44 UTC (permalink / raw)
  To: openembedded-devel

An old bootlog illustrating our purposes is there:
http://de.pastebin.ca/1309948

As you see, u-boot passes the customized mtdparts via cmdline (not
sure about ATAGs) and the 2.6.26-kexecboot-kernel finds these and does
NOT default to the standard partitioning hardcoded in the sources.

The code in the initramfs parses then /proc/cmdline and passes the
right arguments to the kexecbooted kernel.

We want to achieve this without u-boot...

TIA

Andrea



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-15 17:28 ARM bootloaders (Zaurus) and CMDLINE Andrea Adami
  2009-01-16 10:44 ` Andrea Adami
@ 2009-01-16 12:34 ` Stanislav Brabec
  2009-01-16 13:34   ` Andrea Adami
  1 sibling, 1 reply; 9+ messages in thread
From: Stanislav Brabec @ 2009-01-16 12:34 UTC (permalink / raw)
  To: openembedded-devel

Andrea Adami wrote:

> Other solution would be a raw read of the nand addresses and a
> subsequent edit of the CMDLINE params passed by the kexecboot kernel
> to the launched kernel.

This is not as raw as it sounds. It is stored in the configuration area
of the NAND. There is a command nandlogical (package survive), which is
able to read these values. Some time ago I tried to decode these areas.
It would solve not only this problem, but also differentiating between
SL-C3100 and SL-C3200, which have different NAND partitioning, but no
other significant differences, and finally create flashing utility,
which would create correct checksums (now NAND diag checks fail).

Flexible part of the command line is stored in Model array, offset
0x1000 (starting by "EQUIPMENT"). Fixed part is probably generated by
the bootloader, using partition info in PartitionInfo* records.


console=ttyS0 root=/dev/mtdblock2 mtdparts=sharpsl-nand:7168k@0k(smf),44032k@7168k(root),-(home) jffs2_orphaned_inodes=delete EQUIPMENT=5 LOGOLANG=1 DEFYEAR=2007 LOGO=1 LAUNCH=q


#!/bin/sh

nandcfg()
{
    ./nandlogical /dev/mtd0 READ $1 0x4000 nanddecode.$2
}

nandcfg 0x00040000 AdjValue
nandcfg 0x00044000 BootFlag
nandcfg 0x00048000 Version
nandcfg 0x0004c000 Clock
nandcfg 0x00050000 ROMount
nandcfg 0x00054000 RWMount
nandcfg 0x00058000 RSV_58
nandcfg 0x0005c000 RSV_5C
nandcfg 0x00060000 PartitionInfo1
nandcfg 0x00064000 PartitionInfo2
nandcfg 0x00068000 Model
nandcfg 0x0006c000 RSV_6C
nandcfg 0x00070000 MVersion
nandcfg 0x00074000 RSV_74
nandcfg 0x00078000 RSV_78


--- nandlogical.c	2006-06-09 17:06:48.000000000 +0200
+++ nandlogical.c	2008-04-30 00:26:26.000000000 +0200
@@ -135,7 +135,7 @@
 	oob.start = offset;
 	ret = ioctl(fd, MEMREADOOB, &oob);
 
-	//ret = nand_read_raw(nand, oobuf, offset, nand->oobblock, nand->oobsize);
+	//ret = nand_read_raw(nand, oobuf, offset, nand->writesize, nand->oobsize);
 	if (!ret) {
     	    int log_no = nand_get_logical_no(oobbuf);
 	    if (((int)log_no >= 0) && (log_no < blocks)) {
@@ -276,20 +276,20 @@
 	}
 
 	/* Make sure device page sizes are valid */
-	if (!(meminfo.oobsize == 64 && meminfo.oobblock == 2048) &&
-	    !(meminfo.oobsize == 16 && meminfo.oobblock == 512) &&
-	    !(meminfo.oobsize == 8 && meminfo.oobblock == 256)) {
+	if (!(meminfo.oobsize == 64 && meminfo.writesize == 2048) &&
+	    !(meminfo.oobsize == 16 && meminfo.writesize == 512) &&
+	    !(meminfo.oobsize == 8 && meminfo.writesize == 256)) {
 	    fprintf(stderr, "Unknown flash (not normal NAND)\n");
 	    close(fd);
 	    exit(1);
 	}
 
-	//printf("erasesize %x\noobblock %x\noobsize %x\nsize %x\n", meminfo.erasesize, meminfo.oobblock, meminfo.oobsize, meminfo.size);
+	//printf("erasesize %x\nwritesize %x\noobsize %x\nsize %x\n", meminfo.erasesize, meminfo.writesize, meminfo.oobsize, meminfo.size);
 	
 	blocks = NAND_LOGICAL_SIZE / meminfo.erasesize;
 	log2phy = (unsigned long *) malloc(blocks * sizeof(unsigned long));
 	readbuf = (char *)malloc(meminfo.erasesize);
-	oobbuf = (char *)malloc(meminfo.oobblock);	
+	oobbuf = (char *)malloc(meminfo.writesize);	
 	oob.ptr = oobbuf;
 
 	scan_logical(blocks, meminfo.erasesize);
@@ -297,7 +297,7 @@
 	//printf("Start: %x\nEnd: %x\n", start_addr, length);
 	
 	end_addr = start_addr + length;
-	bs = meminfo.oobblock;
+	bs = meminfo.writesize;
 
 	for (ofs = start_addr; ofs < end_addr ; ofs+=bs) {
 	    int new_logical_added = 0;


Stanislav Brabec
http://www.penguin.cz/~utx/zaurus




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-16 12:34 ` Stanislav Brabec
@ 2009-01-16 13:34   ` Andrea Adami
  2009-01-16 16:00     ` Stanislav Brabec
  0 siblings, 1 reply; 9+ messages in thread
From: Andrea Adami @ 2009-01-16 13:34 UTC (permalink / raw)
  To: openembedded-devel

> other significant differences, and finally create flashing utility,
> which would create correct checksums (now NAND diag checks fail).
I insisted for nandlogical committed in OE when I read your post in OESF ;-)

For reference I'll post the disassembled bootloader as found in this post:

http://www.oesf.org/forum/index.php?showtopic=3361&hl=only+root

This was back in 2004...preparatory work for the extended updater
capable to resize nand (sources in survive / fsro_resize.c).

So, writing a new partition schema is possible...the problem is read
it with 2.6.2x kernels!

Regards

Andrea



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-16 13:34   ` Andrea Adami
@ 2009-01-16 16:00     ` Stanislav Brabec
  2009-01-16 17:08       ` Yuri Bushmelev
  0 siblings, 1 reply; 9+ messages in thread
From: Stanislav Brabec @ 2009-01-16 16:00 UTC (permalink / raw)
  To: openembedded-devel

Andrea Adami wrote:

> For reference I'll post the disassembled bootloader as found in this post:
> 
> http://www.oesf.org/forum/index.php?showtopic=3361&hl=only+root
> 
> This was back in 2004...preparatory work for the extended updater
> capable to resize nand (sources in survive / fsro_resize.c).

Thanks for the reference.

> So, writing a new partition schema is possible...the problem is read
> it with 2.6.2x kernels!

My previous mail contains a patch porting nandlogical to kernel 2.6
userspace. Porting to kernel space may require some work.

Kernel 2.4 used a trick - user space utility called writerominfo read
some of these values and sent them to kernel.


Stanislav Brabec
http://www.penguin.cz/~utx/zaurus




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-16 16:00     ` Stanislav Brabec
@ 2009-01-16 17:08       ` Yuri Bushmelev
  2009-01-17 22:33         ` Stanislav Brabec
  0 siblings, 1 reply; 9+ messages in thread
From: Yuri Bushmelev @ 2009-01-16 17:08 UTC (permalink / raw)
  To: openembedded-devel

> Kernel 2.4 used a trick - user space utility called writerominfo read
> some of these values and sent them to kernel.

Stanislav, can you please explain this a bit more?

-- 
Yuri Bushmelev



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-16 17:08       ` Yuri Bushmelev
@ 2009-01-17 22:33         ` Stanislav Brabec
  2009-01-19 10:36           ` Andrea Adami
  0 siblings, 1 reply; 9+ messages in thread
From: Stanislav Brabec @ 2009-01-17 22:33 UTC (permalink / raw)
  To: openembedded-devel

Fri, 16 Jan 2009 20:08:03 +0300 Yuri Bushmelev wrote:

> > Kernel 2.4 used a trick - user space utility called writerominfo
> > read some of these values and sent them to kernel.
> 
> Stanislav, can you please explain this a bit more?
> 
If you look at Sharp system, you will find /sbin/writerominfo. I didn't
find source code for it, but I guess that it reads NAND config data and
initializes /proc/deviceinfo entries (and it performs some magic
with /.sys).

This utility is called early in the boot process. updater.sh
flashing utility uses it as well.

Other utilities used by update.sh:
nandlogical: source available
verchg: probably changes NAND section version info in NAND
nandcp: probably copies data to NAND
bcut: probably trivial file cutter
eraseall: probably MTD partition eraser

Note: current OE update.sh does not flash correct checksum after
flashing the kernel

Here is a rough and incomplete attempt to map PROM and NAND based on a
SL-6000 map somewhere on OESF (attached as PNG), my experimenting
with SL-C3200 and trying to understand, what one can see in the NAND
diagnostic.

One importand note: Linux kernel does not yet support all settings done
by the bootloader. For example LCD phase settings is done by bootloader
and not touched by Linux. Possible alternative bootloader may need to
set it as well.


PROM and NAND memory map on Sharp Zaurus SL-C3200

(it is known to be different from all other models including SL-C3100)

PROM

8 MiB PROM Read only memory for production models, NOR flash for
pre-production models.

 PROM BOOTLOADER "ROM"
 address 0x00000000, size 0x00140000
 contents: Bootloader.

 PROM MTD0 "Filesystem" "ROM DATA"
 address 0x00140000, size 0x006b0000
 contents: EN-JP dictionary database.

NAND
128MiB NAND flash, erase size 0x00020000

 NAND MTD1 "smf" "BOOT"
 address 0x00000000, size 0x00700000

  address 0x00000000, size 0x00040000 MAINTE

0x48000 0x4000 VERBLOCK
0x70000 0x4000 MVRBLOCK

  address 0x00040000, size 0x00040000 NAND bootloader

Values from SL-6000:
0x00040000 AdjValue
0020020     ffff    ffff    ffff    ffff    ffff    ffff    5554    4843
0020040     80ec    3d87    70dc    3dbc    ffee    ffff    fff0    ffff
0020060     ffff    ffff    ffff    ffff    4850    4441    0000    0000
0x00044000 BootFlag ff
0x00048000 Version *
names of MTD sections
positions of sections
checksums
0x0004c000 Clock 0000000     0425    1971    82b1    4660
0x00050000 ROMount ff
0x00054000 RWMount ff
0x00058000 RSV_58
0x0005c000 RSV_5C
0x00060000 PartitionInfo1 *
0x00064000 PartitionInfo2 *
0x00068000 Model *
0x0006c000 RSV_6C
0x00070000 MVersion *
 master version
 checksums of mtd sections
0x00074000 RSV_74
0x00078000 RSV_78
* verified
0x000e0000 DATA   standard kernel

Values from param_version:
0x00000000 Mainte "MAINTE" "MAINTE.BIN"
1. 00000000-00040000
0x00040000 Parameter Area
0x0007c000 NAND Diag "DIAG" "NANDDIAG.BIN"
2. 00080000-000e0000
0x000e0000 Zimage 2 "KERNEL2" "ZIMAGE.BIN+INITRD.BIN"
3. 00220000-0035c000
4. 00360000-00680000
0x00220000 Zimage 1 "KERNEL1" "ZIMAGE.BIN+INITRD.GZ"
5. 000e0000-0021c000
6. 07000000-03100000 (i. e. FSRO)
0x00360000 Initrd 2 "FLSYS2" "INITFS.BIN"
7. 03200000-08000000 (i. e. FSRW)
0x00700000 "ROFLSYS?" "PARAMINF.BI"
8. 00060000-0006c000
NAND MTD2 RO JFFS2 file system "root" "FSRO"
address 0x00700000, size 0x02b00000

NAND MTD3 RW JFFS2 file system "home" "FSRW"
address 0x03200000, size 0x04e00000

--
Stanislav Brabec
http://www.penguin.cz/~utx/zaurus



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-17 22:33         ` Stanislav Brabec
@ 2009-01-19 10:36           ` Andrea Adami
  2009-01-19 12:27             ` Andrea Adami
  0 siblings, 1 reply; 9+ messages in thread
From: Andrea Adami @ 2009-01-19 10:36 UTC (permalink / raw)
  To: openembedded-devel

> If you look at Sharp system, you will find /sbin/writerominfo. I didn't
> I didn't find source code for it, but I guess that it reads NAND config data and

writerominfo.c and other sources:
http://ftp.surfnet.nl/pub/os/Linux/distr/pdaxrom/src/survive-1.1.0.tar.bz2

It seems it fixes /proc/deviceinfo/product

### Check model ###
/sbin/writerominfo
MODEL=`cat /proc/deviceinfo/product`

Regards

Andrea



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ARM bootloaders (Zaurus) and CMDLINE
  2009-01-19 10:36           ` Andrea Adami
@ 2009-01-19 12:27             ` Andrea Adami
  0 siblings, 0 replies; 9+ messages in thread
From: Andrea Adami @ 2009-01-19 12:27 UTC (permalink / raw)
  To: openembedded-devel

> Note: current OE update.sh does not flash correct checksum after
>flashing the kernel

We are going OT but I add here another couple of links...this thread
is summing up all Zaurus 'peculiarities':

http://www.h5.dion.ne.jp/~rimemoon/zaurus/memo_006.htm
-> Wal Wiki
- -> http://digit.que.ne.jp/visit/index.cgi?59414d41 (checksums?)

Regards

Andrea



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-01-19 12:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-15 17:28 ARM bootloaders (Zaurus) and CMDLINE Andrea Adami
2009-01-16 10:44 ` Andrea Adami
2009-01-16 12:34 ` Stanislav Brabec
2009-01-16 13:34   ` Andrea Adami
2009-01-16 16:00     ` Stanislav Brabec
2009-01-16 17:08       ` Yuri Bushmelev
2009-01-17 22:33         ` Stanislav Brabec
2009-01-19 10:36           ` Andrea Adami
2009-01-19 12:27             ` Andrea Adami

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.