[U-Boot] Help about a simplified bootloader.

Hi all,
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
Thanks!

On 14:44 Fri 03 Apr , os user wrote:
Hi all,
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
use U-Boot or Atmel Bootstrap
Best Regards, J.

Hi, Actually the code is based on Atmel's bootstrap.
On Fri, Apr 3, 2009 at 7:57 PM, Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com wrote:
On 14:44 Fri 03 Apr , os user wrote:
Hi all,
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
use U-Boot or Atmel Bootstrap
Best Regards, J.

On Fri, Apr 03, 2009 at 02:44:03PM +0800, os user wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
Are you using the same software to program the NAND in each case? If not, perhaps they have a different OOB layout?
-Scott

Hi,
The data in NAND chip(linux kernel and RootFS) is the same when booting linux from U-Boot and from the simple loader. :-(
On Sat, Apr 4, 2009 at 12:53 AM, Scott Wood scottwood@freescale.com wrote:
On Fri, Apr 03, 2009 at 02:44:03PM +0800, os user wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
Are you using the same software to program the NAND in each case? If not, perhaps they have a different OOB layout?
-Scott

On Tue, Apr 7, 2009 at 11:02 AM, os user gnusercn@gmail.com wrote:
Hi,
The data in NAND chip(linux kernel and RootFS) is the same when booting linux from U-Boot and from the simple loader. :-(
On Sat, Apr 4, 2009 at 12:53 AM, Scott Wood scottwood@freescale.com wrote:
On Fri, Apr 03, 2009 at 02:44:03PM +0800, os user wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
How about ECC calculation ? is it h/w (GPMC) or s/w ECC ?
Regards, Shankar
Are you using the same software to program the NAND in each case? If not, perhaps they have a different OOB layout?
-Scott
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On Wed, Apr 8, 2009 at 2:42 PM, Shankar Ganesh shankarganeshk@gmail.com wrote:
On Tue, Apr 7, 2009 at 11:02 AM, os user gnusercn@gmail.com wrote:
Hi,
The data in NAND chip(linux kernel and RootFS) is the same when booting linux from U-Boot and from the simple loader. :-(
On Sat, Apr 4, 2009 at 12:53 AM, Scott Wood scottwood@freescale.com wrote:
On Fri, Apr 03, 2009 at 02:44:03PM +0800, os user wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage" and copy the kernel bianry from NAND flash to SDRAM, construct the tag list, disable I/D cache, disable interrupt and then jump to kernel entry point. The system can startup, but when accessing rootfile system(the rootfile system was also in the NAND chip), a lot of CRC errors were found. See below, mtd->read(0x1fb2c bytes from 0x1804d4) returned ECC error mtd->read(0x1fa38 bytes from 0x3e05c8) returned ECC error mtd->read(0x1f7dc bytes from 0x7c0824) returned ECC error jffs2_scan_inode_node(): CRC failed on node at 0x007c37a4: Read 0xd9b2bc33, calculated 0xda4805c1
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
How about ECC calculation ? is it h/w (GPMC) or s/w ECC ?
I used software ECC.
I don't think this problem is related to ECC calculation. As metioned before, I used the same OS kernel image and root filesystem image(JFFS2). Both are stored in NAND flash. For the good case, Atmel's bootstrap code will launch U-Boot, and U-Boot will copy kernel image from NAND chip to SDRAM, build tag list, do some clean job(diable interrupt, flush/disable cache), and then jump to kernel entry point. If I follow this path, everything is OK. This means my linux kernel(2.6.27) and root filesystem are OK.
But In my small loader(based on Atmel's bootstrap), I also copy kernel image from NAND chip to SDRAM, build tag list, do some clean job(diable interrupt, flush/disable cache), and then jump to kernel entry point. The kernel image can be decompressed without any error and can startup sometimes. But I can see a lot of errors complained by MTD layer. And sometimes, the system even crashed.
Hope to receive your suggestions, Thanks!

Dear os user,
In message 34f262ce0904022344u6e27ad07g8263785dd36acb58@mail.gmail.com you wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage"
...
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
Well, you already mentioned the solution: either use U-Boot, which seems to be working fine, or fix your own program such that it performs the same intializations like U-Boot.
Be careful when copying code from U-Boot - U-Boot is under GPL, and you may quickly find that you have to release your program under GPL, too.
Best regards,
Wolfgang Denk

Sure, the Code will be GPL based.
On Sat, Apr 4, 2009 at 1:51 AM, Wolfgang Denk wd@denx.de wrote:
Dear os user,
In message 34f262ce0904022344u6e27ad07g8263785dd36acb58@mail.gmail.com you wrote:
I want to boot linux by a simplified bootloader. I use Atmel's ARM chip (AT91SAM9RL64EK board). Now, I can boot linux with my small program. The small program will parse the image generaed by "mkimage"
...
and sometimes the sytem even crashed when R/W filesystem.
But with the same linux kernel and rootfile system, if I use U-Boot to boot linux, everything seems OK.
Can anyone tell is there any trick that's related with linux NAND driver in U-Boot? Or any suggestion to help me moving on?
Well, you already mentioned the solution: either use U-Boot, which seems to be working fine, or fix your own program such that it performs the same intializations like U-Boot.
Be careful when copying code from U-Boot - U-Boot is under GPL, and you may quickly find that you have to release your program under GPL, too.
Best regards,
Wolfgang Denk
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de "Maintain an awareness for contribution -- to your schedule, your project, our company." - A Group of Employees
participants (5)
-
Jean-Christophe PLAGNIOL-VILLARD
-
os user
-
Scott Wood
-
Shankar Ganesh
-
Wolfgang Denk