* [Buildroot] need smaller filesystem for NOR
@ 2013-02-08 17:25 John Stile
2013-02-08 17:38 ` Thomas Petazzoni
2013-02-08 17:38 ` Yann E. MORIN
0 siblings, 2 replies; 9+ messages in thread
From: John Stile @ 2013-02-08 17:25 UTC (permalink / raw)
To: buildroot
I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR
failsafe if NAND is bad. I have about 5.5Mb available for the
Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel.
...(using buildroot-2011.11)...
The rootfs.jffs2 for NAND is 41Mb.
I need one for NOR that is less than 5.5Mb.
Is there a good method or script to copy buildroot's rootfs.jffs2 to
make a smaller copy for NOR?
My first attempt leads to
VFS: Mounted root (jffs2 filesystem) on device 31:1.
Freeing init memory: 104K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
[<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110)
[<c0243990>] (panic+0x34/0x110) from [<c002254c>] (init_post+0x138/0x170)
[<c002254c>] (init_post+0x138/0x170) from [<c0008408>] (kernel_init+0xbc/0xe8)
[<c0008408>] (kernel_init+0xbc/0xe8) from [<c003b634>] (do_exit+0x0/0x5a4)
[<c003b634>] (do_exit+0x0/0x5a4) from [<00000003>] (0x3)
I think this means the file system is found and mounted, and for some
reason, init isn't found, although I have played with init= to no avail,
and if I mount my little jffs2, I do see busybox and all the links
(/bin/init).
I tried to trying to hack it (unsuccessfully) with a post-build script
that tries to do what buildroot does:
#!/bin/bash
TARGET_DIR="${PWD}/output/target"
BUILD_DIR="${PWD}/output/build"
HOST_DIR="${PWD}/output/host"
STAGE_DIR="${PWD}/output/NORtarget"
TARGET_IMG="${PWD}/output/images/NORrootfs.jffs2"
FILTER_LIST=${PWD}/boarts/atmel/at91sam9g20ek/nor_flash_list.txt
ROOTFS_DEVICE_TABLES="${PWD}/target/generic/device_table.txt"
FULL_DEVICE_TABLE="$BUILD_DIR/_device_table.txt"
echo "[--] Remove old image: ${TARGET_DIR}"
rm -rf "${TARGET_DIR}"
echo "[--] Coypy into new image"
rsync -a \
--exclude-from=${FILTER_LIST} \
${TARGET_DIR}/ ${STAGE_DIR}
echo "[--] Size of new image:"
du -sh ${STAGE_DIR}
echo "[--] Make device table:"
cat $ROOTFS_DEVICE_TABLES > $FULL_DEVICE_TABLE
FAKEROOT_SCRIPT="#!/bin/bash
chown -R 0:0 ${TARGET_DIR}
${HOST_DIR}/usr/bin/makedevs \
-d ${BUILD_DIR}/_device_table.txt \
${TARGET_DIR}
${HOST_DIR}/usr/sbin/mkfs.jffs2 \
-e 0x20000 -l -s 0x1000 -n \
-d ${TARGET_DIR} \
-o ${TARGET_IMG}
${HOST_DIR}/usr/bin/makedevs \
-d ${BUILD_DIR}/_device_table.txt \
${TARGET_DIR}
"
echo "[--] Call FAKEROOT_SCRIPT"
echo "${FAKEROOT_SCRIPT}"
$HOST_DIR/usr/bin/fakeroot -- /bin/bash -c "${FAKEROOT_SCRIPT}"
echo $?
^ permalink raw reply [flat|nested] 9+ messages in thread* [Buildroot] need smaller filesystem for NOR 2013-02-08 17:25 [Buildroot] need smaller filesystem for NOR John Stile @ 2013-02-08 17:38 ` Thomas Petazzoni 2013-02-08 21:34 ` John Stile 2013-02-08 17:38 ` Yann E. MORIN 1 sibling, 1 reply; 9+ messages in thread From: Thomas Petazzoni @ 2013-02-08 17:38 UTC (permalink / raw) To: buildroot Dear John Stile, On Fri, 08 Feb 2013 09:25:17 -0800, John Stile wrote: > I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR > failsafe if NAND is bad. I have about 5.5Mb available for the > Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel. > ...(using buildroot-2011.11)... > > The rootfs.jffs2 for NAND is 41Mb. > I need one for NOR that is less than 5.5Mb. > > Is there a good method or script to copy buildroot's rootfs.jffs2 to > make a smaller copy for NOR? > > My first attempt leads to > VFS: Mounted root (jffs2 filesystem) on device 31:1. > Freeing init memory: 104K > Warning: unable to open an initial console. > Kernel panic - not syncing: No init found. Try passing init= option to kernel. > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > [<c0243990>] (panic+0x34/0x110) from [<c002254c>] (init_post+0x138/0x170) > [<c002254c>] (init_post+0x138/0x170) from [<c0008408>] (kernel_init+0xbc/0xe8) > [<c0008408>] (kernel_init+0xbc/0xe8) from [<c003b634>] (do_exit+0x0/0x5a4) > [<c003b634>] (do_exit+0x0/0x5a4) from [<00000003>] (0x3) > > I think this means the file system is found and mounted, and for some > reason, init isn't found, although I have played with init= to no avail, > and if I mount my little jffs2, I do see busybox and all the links > (/bin/init). Beware that if a NAND or NOR partition is empty and properly erase, jffs2 will happily mount it and show a filesystem that contains no file. So the behavior you're seeing here could perfectly happen if your NAND or NOR partition is simply empty. > I tried to trying to hack it (unsuccessfully) with a post-build script > that tries to do what buildroot does: Rather than doing this, what about having a separate Buildroot project that is used to build your small NOR failsafe filesystem? If it's only a 5.5 MB filesystem, most likely there isn't too much in it. Both Buildroot projects can share the same Buildroot source tree, but be built in different directories. Let's say ~/buildroot/ contains the Buildroot sources, ~/buildroot/configs/project_defconfig and ~/buildroot/configs/project_failsafe_defconfig are respectively the Buildroot configuration for your full filesystem and for the small failsafe filesystem. Then you can do: mkdir -p ~/project/full/ cd ~/project/full/ make -C ~/buildroot O=$(pwd) project_defconfig make mkdir -p ~/project/failsafe/ cd ~/project/failsafe make -C ~/buildroot O=$(pwd) project_failsafe_defconfig make And that's it. Best regards, Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-08 17:38 ` Thomas Petazzoni @ 2013-02-08 21:34 ` John Stile 2013-02-12 0:19 ` John Stile 0 siblings, 1 reply; 9+ messages in thread From: John Stile @ 2013-02-08 21:34 UTC (permalink / raw) To: buildroot Dear Thomas Petazzoni, On Fri, 2013-02-08 at 18:38 +0100, Thomas Petazzoni wrote: > Dear John Stile, > > On Fri, 08 Feb 2013 09:25:17 -0800, John Stile wrote: > > I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR > > failsafe if NAND is bad. I have about 5.5Mb available for the > > Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel. > > ...(using buildroot-2011.11)... > > > > The rootfs.jffs2 for NAND is 41Mb. > > I need one for NOR that is less than 5.5Mb. > > > > Is there a good method or script to copy buildroot's rootfs.jffs2 to > > make a smaller copy for NOR? > > > > My first attempt leads to > > VFS: Mounted root (jffs2 filesystem) on device 31:1. > > Freeing init memory: 104K > > Warning: unable to open an initial console. > > Kernel panic - not syncing: No init found. Try passing init= option to kernel. > > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > > [<c0243990>] (panic+0x34/0x110) from [<c002254c>] (init_post+0x138/0x170) > > [<c002254c>] (init_post+0x138/0x170) from [<c0008408>] (kernel_init+0xbc/0xe8) > > [<c0008408>] (kernel_init+0xbc/0xe8) from [<c003b634>] (do_exit+0x0/0x5a4) > > [<c003b634>] (do_exit+0x0/0x5a4) from [<00000003>] (0x3) > > > > I think this means the file system is found and mounted, and for some > > reason, init isn't found, although I have played with init= to no avail, > > and if I mount my little jffs2, I do see busybox and all the links > > (/bin/init). > > Beware that if a NAND or NOR partition is empty and properly erase, > jffs2 will happily mount it and show a filesystem that contains no > file. So the behavior you're seeing here could perfectly happen if your > NAND or NOR partition is simply empty. To check for an empty file system I compared the hex dump of my jffs2 image to the contents of NOR, and they are the same. From the uboot prompt I ran: md.b 0xD0294000 0x19 From the shell I ran: od -t x1z NORrootfs.jffs2 Both are identical, and I can mount my .jffs2 and see it contains stuff. Could it be my bootargs mtdparts pointing to the wrong place? bootargs=mem=64M console=ttyS0,115200 mtdparts=dataflash0:2640k(bootstrap/uboot/env/kernel)ro,-(rootfs) root=/dev/mtdblock1 rw rootfstype=jffs2 I also tried exchanging 'dataflash0' for 'dataflash1', with no change in behavior. This is the first time I have tried to put a file system on NOR. > > I tried to trying to hack it (unsuccessfully) with a post-build script > > that tries to do what buildroot does: > > Rather than doing this, what about having a separate Buildroot project > that is used to build your small NOR failsafe filesystem? If it's only > a 5.5 MB filesystem, most likely there isn't too much in it. Both > Buildroot projects can share the same Buildroot source tree, but be > built in different directories. I would like to try this. > > Let's say ~/buildroot/ contains the Buildroot sources, > ~/buildroot/configs/project_defconfig and > ~/buildroot/configs/project_failsafe_defconfig are respectively the > Buildroot configuration for your full filesystem and for the small > failsafe filesystem. Then you can do: > > mkdir -p ~/project/full/ > cd ~/project/full/ > make -C ~/buildroot O=$(pwd) project_defconfig > make > > mkdir -p ~/project/failsafe/ > cd ~/project/failsafe > make -C ~/buildroot O=$(pwd) project_failsafe_defconfig > make From this I wonder if I have been organizing my buildroot incorrectly. My buidroot works out of a directory named buildroot-2011.11. My config is just called buildroot-2011.11/.config, so I just run 'make' without an options. Should .config be stored under configs instead? I also hold all my special stuff under: buildroot-2011.11/board/atmel/at91sam9g20ek/ |-at91bootstrap-patches |-kernel-configs |-kernel-patches |-post-build |-uboot-2013-patches |-uboot-patches |-uClibc-config Following your gracious directions, ... cp buildroot-2011.11/.config \ buildroot-2011.11/configs/project_failsafe_defconfig I had to edited the new config manually to remove almost everything. How do I run 'make menuconfig' on buildroot-2011.11/configs/project_failsafe_defconfig? mkdir -p failsafe cd failsafe make -C ../buildroot-2011.11 O=$(pwd) project_failsafe_defconfig make This rebuilt everything, but fails on my post-build scripts, but I kinda need some of those. The post-build script calls make on the programs that implement my firmware rescue web server interface. **** POST-BUILD SCRIPTS: **** ERROR: Cant read buildroot .config: /home/jstile/svn_rmserver/failsafe/target/../../.config If I comment out BR2_ROOTFS_POST_BUILD_SCRIPT the image is created (failsafe/images/rootfs.jffs2) but over the size I need. I was able to create a jffs2 of 4.9Mb, but this new image is 6.8Mb. Still too big. I've got 5.5.Mb of NOR available. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-08 21:34 ` John Stile @ 2013-02-12 0:19 ` John Stile 2013-02-12 17:31 ` Arnout Vandecappelle 2013-02-12 18:24 ` John Stile 0 siblings, 2 replies; 9+ messages in thread From: John Stile @ 2013-02-12 0:19 UTC (permalink / raw) To: buildroot On Fri, 2013-02-08 at 13:34 -0800, John Stile wrote: > Dear Thomas Petazzoni, > > On Fri, 2013-02-08 at 18:38 +0100, Thomas Petazzoni wrote: > > Dear John Stile, > > > > On Fri, 08 Feb 2013 09:25:17 -0800, John Stile wrote: > > > I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR > > > failsafe if NAND is bad. I have about 5.5Mb available for the > > > Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel. > > > ...(using buildroot-2011.11)... > > > > > > The rootfs.jffs2 for NAND is 41Mb. > > > I need one for NOR that is less than 5.5Mb. > > > > > > Is there a good method or script to copy buildroot's rootfs.jffs2 to > > > make a smaller copy for NOR? > > > > > > My first attempt leads to > > > VFS: Mounted root (jffs2 filesystem) on device 31:1. > > > Freeing init memory: 104K > > > Warning: unable to open an initial console. > > > Kernel panic - not syncing: No init found. Try passing init= option to kernel. > > > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > > > [<c0243990>] (panic+0x34/0x110) from [<c002254c>] (init_post+0x138/0x170) > > > [<c002254c>] (init_post+0x138/0x170) from [<c0008408>] (kernel_init+0xbc/0xe8) > > > [<c0008408>] (kernel_init+0xbc/0xe8) from [<c003b634>] (do_exit+0x0/0x5a4) > > > [<c003b634>] (do_exit+0x0/0x5a4) from [<00000003>] (0x3) > > > > > > I think this means the file system is found and mounted, and for some > > > reason, init isn't found, although I have played with init= to no avail, > > > and if I mount my little jffs2, I do see busybox and all the links > > > (/bin/init). > > > > Beware that if a NAND or NOR partition is empty and properly erase, > > jffs2 will happily mount it and show a filesystem that contains no > > file. So the behavior you're seeing here could perfectly happen if your > > NAND or NOR partition is simply empty. > > To check for an empty file system I compared the hex dump of my jffs2 > image to the contents of NOR, and they are the same. > From the uboot prompt I ran: md.b 0xD0294000 0x19 > From the shell I ran: od -t x1z NORrootfs.jffs2 > Both are identical, and I can mount my .jffs2 and see it contains stuff. > > Could it be my bootargs mtdparts pointing to the wrong place? > bootargs=mem=64M console=ttyS0,115200 mtdparts=dataflash0:2640k(bootstrap/uboot/env/kernel)ro,-(rootfs) root=/dev/mtdblock1 rw rootfstype=jffs2 > > I also tried exchanging 'dataflash0' for 'dataflash1', with no change in > behavior. > > This is the first time I have tried to put a file system on NOR. > I discovered the kernel mtdparts statement to control the mtd partition layout, which I guess is a good staring point for mounting the root file system, but I still can't mount. I gleaned the information from the kernel boot messages and the kernel drivers/mtd/devices/at91_dataflash.c. Default kernel boot messages for NAND and NOR: NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit) AT91 NAND: 8-bit, Software ECC Scanning device for bad blocks mtd: no mtd-id Creating 3 MTD partitions on "atmel_nand": 0x000000000000-0x000000400000 : "Bootstrap" 0x000000400000-0x000004000000 : "Partition 1" 0x000004000000-0x000010000000 : "Partition 2" atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12) mtd_dataflash spi0.1: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP) I changed my boot args to: bootargs=mem=64M console=ttyS0,115200 mtdparts=spi0.1-AT45DB642x:2640k(bootstrap/env/uboot/kernel)ro,-(rootfs);atmel_nand:128k(bootstrap1)ro,256k(uboot1)ro,128k(env1)ro,1536K(unused),2M(linux1),124M(rootfs1),128k(bootstrap2)ro,256k(uboot2)ro,128k(env2)ro,1536k(unused2),2M(linux2),124M(rootfs2) root=/dev/mtdblock2 rw rootfstype=jffs2 Now kernel boot messages for NAND and NOR show my partitions, but fail to find the root filesystem: NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit) AT91 NAND: 8-bit, Software ECC Scanning device for bad blocks 12 cmdlinepart partitions found on MTD device atmel_nand Creating 12 MTD partitions on "atmel_nand": 0x000000000000-0x000000020000 : "bootstrap1" 0x000000020000-0x000000060000 : "uboot1" 0x000000060000-0x000000080000 : "env1" 0x000000080000-0x000000200000 : "unused" 0x000000200000-0x000000400000 : "linux1" 0x000000400000-0x000008000000 : "rootfs1" 0x000008000000-0x000008020000 : "bootstrap2" 0x000008020000-0x000008060000 : "uboot2" 0x000008060000-0x000008080000 : "env2" 0x000008080000-0x000008200000 : "unused2" 0x000008200000-0x000008400000 : "linux2" 0x000008400000-0x000010000000 : "rootfs2" atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12) mtd_dataflash spi0.1: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP) 2 cmdlinepart partitions found on MTD device spi0.1-AT45DB642x Creating 2 MTD partitions on "spi0.1-AT45DB642x": 0x000000000000-0x000000294000 : "bootstrap/env/uboot/kernel" 0x000000294000-0x000000840000 : "rootfs" ... rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock jffs2: Too few erase blocks (1) List of all partitions: 1f00 128 mtdblock0 (driver?) 1f01 256 mtdblock1 (driver?) 1f02 128 mtdblock2 (driver?) 1f03 1536 mtdblock3 (driver?) 1f04 2048 mtdblock4 (driver?) 1f05 126976 mtdblock5 (driver?) 1f06 128 mtdblock6 (driver?) 1f07 256 mtdblock7 (driver?) 1f08 128 mtdblock8 (driver?) 1f09 1536 mtdblock9 (driver?) 1f0a 2048 mtdblock10 (driver?) 1f0b 126976 mtdblock11 (driver?) 1f0c 2640 mtdblock12 driver: mtd_dataflash 1f0d 5808 mtdblock13 driver: mtd_dataflash No filesystem could mount root, tried: jffs2 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2) ORDER in mtdparts does not matter (NAND always before NOR)? Next I changed from: root=/dev/mtdblock2 to: root=/dev/mtdblock 13 The kernel messages now show my desire layout at boot time, however, the the file system still does not mount, but the root file system is not found. Kernel boot messages for NAND and NOR: ... rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock JFFS2 write-buffering enabled buffer (1056) erasesize (8448) Node at 0x00001cd8 with length 0x00000489 would run over the end of the erase block Perhaps the file system was created with the wrong erase size? jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001cdc: 0x0489 instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce0: 0x651a instead jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce4: 0x0006 instead ... Further such events for this erase block will not be printed VFS: Mounted root (jffs2 filesystem) on device 31:13. Freeing init memory: 104K Kernel panic - not syncing: Attempted to kill init! [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) I think this means I am close. Next I tried to edit my jffs options in the .config for my recovery 'failsafe' buildroot: Filesystem images ---> [*] jffs2 root filesystem Flash Type (Select custom page and erase size) ---> (0x1065) Page Size (0xC60) Erase block size I gleaned these numbers from the output o the sam-ba utility used to load the NOR flash, but they still don't work. This had no effect. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-12 0:19 ` John Stile @ 2013-02-12 17:31 ` Arnout Vandecappelle 2013-02-12 21:50 ` Thomas Petazzoni 2013-02-12 18:24 ` John Stile 1 sibling, 1 reply; 9+ messages in thread From: Arnout Vandecappelle @ 2013-02-12 17:31 UTC (permalink / raw) To: buildroot On 12/02/13 01:19, John Stile wrote: > On Fri, 2013-02-08 at 13:34 -0800, John Stile wrote: [snip] > Next I changed from: > root=/dev/mtdblock2 > to: > root=/dev/mtdblock 13 A jffs2 filesystem should be mounted through /dev/mtdN, not through /dev/mtdblockN. So root=/dev/mtd13 is a better idea. > > The kernel messages now show my desire layout at boot time, however, the > the file system still does not mount, but the root file system is not > found. > > Kernel boot messages for NAND and NOR: > ... > rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock > JFFS2 write-buffering enabled buffer (1056) erasesize (8448) > Node at 0x00001cd8 with length 0x00000489 would run over the end of the erase block > Perhaps the file system was created with the wrong erase size? > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001cdc: 0x0489 instead > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce0: 0x651a instead > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce4: 0x0006 instead > ... > Further such events for this erase block will not be printed > VFS: Mounted root (jffs2 filesystem) on device 31:13. > Freeing init memory: 104K > Kernel panic - not syncing: Attempted to kill init! > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > > I think this means I am close. > > Next I tried to edit my jffs options in the .config for my recovery > 'failsafe' buildroot: > Filesystem images ---> > [*] jffs2 root filesystem > Flash Type (Select custom page and erase size) ---> > (0x1065) Page Size > (0xC60) Erase block size Those numbers are unlikely. 0x1065 is a very odd number (literally). Also, the erase block size is always larger than the page size, and for NOR I think it's normally equal to it. These questions are however more appropriate for linux-mtd at lists.infradead.org because they are not buildroot related. However, if you want a quick fix: you can also choose the BR2_TARGET_ROOTFS_INITRAMFS ("initial RAM filesystem linked into linux kernel") option. With your huge 5.5MB rootfs that will kill build and boot time, but it means you don't have to bother with writing the JFFS2 to NOR or even partitioning your NOR. It's all in a single uImage. You could even create a FIT image that includes both kernel and rootfs (as a cpio archive, "cpio the root filesystem (for use as an initial RAM filesystem)") but buildroot doesn't have support for that. Regards, Arnout > > I gleaned these numbers from the output o the sam-ba utility used to > load the NOR flash, but they still don't work. > > This had no effect. > > _______________________________________________ > buildroot mailing list > buildroot at busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot > -- Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-12 17:31 ` Arnout Vandecappelle @ 2013-02-12 21:50 ` Thomas Petazzoni 2013-02-16 18:05 ` Peter Korsgaard 0 siblings, 1 reply; 9+ messages in thread From: Thomas Petazzoni @ 2013-02-12 21:50 UTC (permalink / raw) To: buildroot Dear Arnout Vandecappelle, On Tue, 12 Feb 2013 18:31:58 +0100, Arnout Vandecappelle wrote: > A jffs2 filesystem should be mounted through /dev/mtdN, not through > /dev/mtdblockN. So root=/dev/mtd13 is a better idea. Really? I've always used root=/dev/mtdblockX without any problems. Your statement even seems to contradict http://www.linux-mtd.infradead.org/faq/jffs2.html#L_mtdblock : """ There are two cases where this does not work. The first is when JFFS2 is used as a root filesystem. For now, this requires the mtdblock device to be specified for root= on the kernel command line. The second case is when the mount binary that is being used does not play nicely with the above format. The BusyBox version of mount is known to not work without the mtdblock device. """ > > Next I tried to edit my jffs options in the .config for my recovery > > 'failsafe' buildroot: > > Filesystem images ---> > > [*] jffs2 root filesystem > > Flash Type (Select custom page and erase size) ---> > > (0x1065) Page Size > > (0xC60) Erase block size > > Those numbers are unlikely. 0x1065 is a very odd number (literally). > Also, the erase block size is always larger than the page size, and for > NOR I think it's normally equal to it. I remember dataflash having bizarre erase block sizes, but I don't think it was an odd number. Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-12 21:50 ` Thomas Petazzoni @ 2013-02-16 18:05 ` Peter Korsgaard 0 siblings, 0 replies; 9+ messages in thread From: Peter Korsgaard @ 2013-02-16 18:05 UTC (permalink / raw) To: buildroot >>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes: Hi, >> > Next I tried to edit my jffs options in the .config for my recovery >> > 'failsafe' buildroot: >> > Filesystem images ---> >> > [*] jffs2 root filesystem >> > Flash Type (Select custom page and erase size) ---> >> > (0x1065) Page Size >> > (0xC60) Erase block size >> >> Those numbers are unlikely. 0x1065 is a very odd number (literally). >> Also, the erase block size is always larger than the page size, and for >> NOR I think it's normally equal to it. Thomas> I remember dataflash having bizarre erase block sizes, but I don't Thomas> think it was an odd number. No, it's afaik 256bytes + 8 extra, or multiples of this. Judging from the above, I guess John wanted 1056 (0x420) page size. -- Bye, Peter Korsgaard ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-12 0:19 ` John Stile 2013-02-12 17:31 ` Arnout Vandecappelle @ 2013-02-12 18:24 ` John Stile 1 sibling, 0 replies; 9+ messages in thread From: John Stile @ 2013-02-12 18:24 UTC (permalink / raw) To: buildroot On Mon, 2013-02-11 at 16:19 -0800, John Stile wrote: > On Fri, 2013-02-08 at 13:34 -0800, John Stile wrote: > > Dear Thomas Petazzoni, > > > > On Fri, 2013-02-08 at 18:38 +0100, Thomas Petazzoni wrote: > > > Dear John Stile, > > > > > > On Fri, 08 Feb 2013 09:25:17 -0800, John Stile wrote: > > > > I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR > > > > failsafe if NAND is bad. I have about 5.5Mb available for the > > > > Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel. > > > > ...(using buildroot-2011.11)... > > > > > > > > The rootfs.jffs2 for NAND is 41Mb. > > > > I need one for NOR that is less than 5.5Mb. > > > > > > > > Is there a good method or script to copy buildroot's rootfs.jffs2 to > > > > make a smaller copy for NOR? > > > > > > > > My first attempt leads to > > > > VFS: Mounted root (jffs2 filesystem) on device 31:1. > > > > Freeing init memory: 104K > > > > Warning: unable to open an initial console. > > > > Kernel panic - not syncing: No init found. Try passing init= option to kernel. > > > > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > > > > [<c0243990>] (panic+0x34/0x110) from [<c002254c>] (init_post+0x138/0x170) > > > > [<c002254c>] (init_post+0x138/0x170) from [<c0008408>] (kernel_init+0xbc/0xe8) > > > > [<c0008408>] (kernel_init+0xbc/0xe8) from [<c003b634>] (do_exit+0x0/0x5a4) > > > > [<c003b634>] (do_exit+0x0/0x5a4) from [<00000003>] (0x3) > > > > > > > > I think this means the file system is found and mounted, and for some > > > > reason, init isn't found, although I have played with init= to no avail, > > > > and if I mount my little jffs2, I do see busybox and all the links > > > > (/bin/init). > > > > > > Beware that if a NAND or NOR partition is empty and properly erase, > > > jffs2 will happily mount it and show a filesystem that contains no > > > file. So the behavior you're seeing here could perfectly happen if your > > > NAND or NOR partition is simply empty. > > > > To check for an empty file system I compared the hex dump of my jffs2 > > image to the contents of NOR, and they are the same. > > From the uboot prompt I ran: md.b 0xD0294000 0x19 > > From the shell I ran: od -t x1z NORrootfs.jffs2 > > Both are identical, and I can mount my .jffs2 and see it contains stuff. > > > > Could it be my bootargs mtdparts pointing to the wrong place? > > bootargs=mem=64M console=ttyS0,115200 mtdparts=dataflash0:2640k(bootstrap/uboot/env/kernel)ro,-(rootfs) root=/dev/mtdblock1 rw rootfstype=jffs2 > > > > I also tried exchanging 'dataflash0' for 'dataflash1', with no change in > > behavior. > > > > This is the first time I have tried to put a file system on NOR. > > > > I discovered the kernel mtdparts statement to control the mtd partition > layout, which I guess is a good staring point for mounting the root file > system, but I still can't mount. > > I gleaned the information from the kernel boot messages and the kernel > drivers/mtd/devices/at91_dataflash.c. > > Default kernel boot messages for NAND and NOR: > NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit) > AT91 NAND: 8-bit, Software ECC > Scanning device for bad blocks > mtd: no mtd-id > Creating 3 MTD partitions on "atmel_nand": > 0x000000000000-0x000000400000 : "Bootstrap" > 0x000000400000-0x000004000000 : "Partition 1" > 0x000004000000-0x000010000000 : "Partition 2" > atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12) > mtd_dataflash spi0.1: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP) > > I changed my boot args to: > bootargs=mem=64M console=ttyS0,115200 mtdparts=spi0.1-AT45DB642x:2640k(bootstrap/env/uboot/kernel)ro,-(rootfs);atmel_nand:128k(bootstrap1)ro,256k(uboot1)ro,128k(env1)ro,1536K(unused),2M(linux1),124M(rootfs1),128k(bootstrap2)ro,256k(uboot2)ro,128k(env2)ro,1536k(unused2),2M(linux2),124M(rootfs2) root=/dev/mtdblock2 rw rootfstype=jffs2 > > Now kernel boot messages for NAND and NOR show my partitions, but fail > to find the root filesystem: > NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit) > AT91 NAND: 8-bit, Software ECC > Scanning device for bad blocks > 12 cmdlinepart partitions found on MTD device atmel_nand > Creating 12 MTD partitions on "atmel_nand": > 0x000000000000-0x000000020000 : "bootstrap1" > 0x000000020000-0x000000060000 : "uboot1" > 0x000000060000-0x000000080000 : "env1" > 0x000000080000-0x000000200000 : "unused" > 0x000000200000-0x000000400000 : "linux1" > 0x000000400000-0x000008000000 : "rootfs1" > 0x000008000000-0x000008020000 : "bootstrap2" > 0x000008020000-0x000008060000 : "uboot2" > 0x000008060000-0x000008080000 : "env2" > 0x000008080000-0x000008200000 : "unused2" > 0x000008200000-0x000008400000 : "linux2" > 0x000008400000-0x000010000000 : "rootfs2" > atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12) > mtd_dataflash spi0.1: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP) > 2 cmdlinepart partitions found on MTD device spi0.1-AT45DB642x > Creating 2 MTD partitions on "spi0.1-AT45DB642x": > 0x000000000000-0x000000294000 : "bootstrap/env/uboot/kernel" > 0x000000294000-0x000000840000 : "rootfs" > ... > rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock > jffs2: Too few erase blocks (1) > List of all partitions: > 1f00 128 mtdblock0 (driver?) > 1f01 256 mtdblock1 (driver?) > 1f02 128 mtdblock2 (driver?) > 1f03 1536 mtdblock3 (driver?) > 1f04 2048 mtdblock4 (driver?) > 1f05 126976 mtdblock5 (driver?) > 1f06 128 mtdblock6 (driver?) > 1f07 256 mtdblock7 (driver?) > 1f08 128 mtdblock8 (driver?) > 1f09 1536 mtdblock9 (driver?) > 1f0a 2048 mtdblock10 (driver?) > 1f0b 126976 mtdblock11 (driver?) > 1f0c 2640 mtdblock12 driver: mtd_dataflash > 1f0d 5808 mtdblock13 driver: mtd_dataflash > No filesystem could mount root, tried: jffs2 > Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2) > > ORDER in mtdparts does not matter (NAND always before NOR)? > > Next I changed from: > root=/dev/mtdblock2 > to: > root=/dev/mtdblock 13 > > The kernel messages now show my desire layout at boot time, however, the > the file system still does not mount, but the root file system is not > found. > > Kernel boot messages for NAND and NOR: > ... > rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock > JFFS2 write-buffering enabled buffer (1056) erasesize (8448) > Node at 0x00001cd8 with length 0x00000489 would run over the end of the erase block > Perhaps the file system was created with the wrong erase size? > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001cdc: 0x0489 instead > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce0: 0x651a instead > jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001ce4: 0x0006 instead > ... > Further such events for this erase block will not be printed > VFS: Mounted root (jffs2 filesystem) on device 31:13. > Freeing init memory: 104K > Kernel panic - not syncing: Attempted to kill init! > [<c0028678>] (unwind_backtrace+0x0/0xdc) from [<c0243990>] (panic+0x34/0x110) > > I think this means I am close. > > Next I tried to edit my jffs options in the .config for my recovery > 'failsafe' buildroot: > Filesystem images ---> > [*] jffs2 root filesystem > Flash Type (Select custom page and erase size) ---> > (0x1065) Page Size > (0xC60) Erase block size > > I gleaned these numbers from the output o the sam-ba utility used to > load the NOR flash, but they still don't work. > > This had no effect. > I solved my problem. I had to find the correct flash setting for jffs2. This sent me in the right direction: http://www.at91.com/forum/viewtopic.php/f,9/t,4983/ Filesystem images ---> [*] jffs2 root filesystem Flash Type (AT45 dataflash with 1056 byte pagesize) I am using a separate buildroot config (per Thomas Petazzoni's advice). Thank you. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Buildroot] need smaller filesystem for NOR 2013-02-08 17:25 [Buildroot] need smaller filesystem for NOR John Stile 2013-02-08 17:38 ` Thomas Petazzoni @ 2013-02-08 17:38 ` Yann E. MORIN 1 sibling, 0 replies; 9+ messages in thread From: Yann E. MORIN @ 2013-02-08 17:38 UTC (permalink / raw) To: buildroot John, All, On Friday 08 February 2013 John Stile wrote: > I primarily boot from one of two 128Mb NAND areas, but I have an 8Mb NOR > failsafe if NAND is bad. I have about 5.5Mb available for the > Filesystem after loading at91bootstrap, uboot, uboot-env, and kernel. > ...(using buildroot-2011.11)... > > The rootfs.jffs2 for NAND is 41Mb. > I need one for NOR that is less than 5.5Mb. > > Is there a good method or script to copy buildroot's rootfs.jffs2 to > make a smaller copy for NOR? I would simply create a completely separated system from scratch, with only the packages that you need. For example: $ make O="$(pwd)/complete_system" complete_defconfig $ make O="$(pwd)/complete_system" $ make O="$(pwd)/failsafe_system" failsafe_defconfig $ make O="$(pwd)/failsafe_system" And then grab the corresponding images from: complete_system/images/ <- the full-featured system failsafe_system/images/ <- the failsafe system Regards, Yann E. MORIN. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-02-16 18:05 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-02-08 17:25 [Buildroot] need smaller filesystem for NOR John Stile 2013-02-08 17:38 ` Thomas Petazzoni 2013-02-08 21:34 ` John Stile 2013-02-12 0:19 ` John Stile 2013-02-12 17:31 ` Arnout Vandecappelle 2013-02-12 21:50 ` Thomas Petazzoni 2013-02-16 18:05 ` Peter Korsgaard 2013-02-12 18:24 ` John Stile 2013-02-08 17:38 ` Yann E. MORIN
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox