* 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.