红联Linux门户
Linux帮助

linux内核:No oob scheme defined for oobsize 512

发布时间:2015-10-09 10:35:06来源:linux网站作者:kangear

U-boot在引导内核的时候居然出现了错误,如下:
[    1.122956] S3C NAND Driver, (c) 2008 Samsung Electronics
[    1.226821] MLC nand init failed, -19, 2015 ported by FriendlyARM http://www.arm9.net
[    1.226900] S3C NAND Driver is using hardware ECC.
[    1.226983] NAND device: Manufacturer ID: 0xec, Chip ID: 0xd5 (Samsung NAND 2GiB 3,3V 8-bit)
[    1.227070] No oob scheme defined for oobsize 512
[    1.230258] kernel BUG at drivers/mtd/nand/nand_base.c:3315!
[    1.235884] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    1.243944] pgd = c0004000
[    1.246619] [00000000] *pgd=00000000


我在U-boot中并没有实现NandFlash驱动,怎么回有它的错误呢?在内核drivers/mtd/nand/nand_base.c中加了蓝色调试信息后:
3298         printk(KERN_WARNING "!chip->ecc.layout = %d "
3299                                 "(chip->ecc.mode != NAND_ECC_SOFT_BCH) = %d\n",!chip     ->ecc.layout, (chip->ecc.mode != NAND_ECC_SOFT_BCH));

3300         if (!chip->ecc.layout && (chip->ecc.mode != NAND_ECC_SOFT_BCH)) {
3301                 printk(KERN_WARNING "No oob scheme defined for "
3302                                "oobsize %d\n", mtd->oobsize);
3303                 switch (mtd->oobsize) {
3304                 case 8:
3305                         chip->ecc.layout = &nand_oob_8;
3306                         break;
3307                 case 16:
3308                         chip->ecc.layout = &nand_oob_16;
3309                         break;
3310                 case 64:
3311                         chip->ecc.layout = &nand_oob_64;
3312                         break;
3313                 case 128:
3314                         chip->ecc.layout = &nand_oob_128;
3315                         break;
3316                 default:
3317                         printk(KERN_WARNING "No oob scheme defined for "
3318                                "oobsize %d\n", mtd->oobsize);
3319                         BUG();
3320                 }


发现用SuperBoot引导的时候,是这样的:

linux内核:No oob scheme defined for oobsize 512

有tiny210v2-uboot 20130727-nfs这个版本引导的时候:

linux内核:No oob scheme defined for oobsize 512

神奇的事情。同一个内核,chip->ecc.layout值不一样。只能说明chip->ecc.layout的值极有可以是读NandFlash控制器的某个寄存器来决定的,这个在tiny210v2-uboot 20130727-nfs中,和SuperBoot的赋值不一样了。知道的问题的所在,要想彻底解决,最好的方法就是调查出chip->ecc.layout的意义和来历!


u-boot的获取:git clone https://github.com/kangear/tiny210v2-uboot -b 20130727-nfs

问题解决,前边用的go命令来引导的zImage,老老实实的用bootm就没有问题了!
实质问题是机器码传的不对,应该是友善的内核同时运行mini210和tiny210v2但是两者的初始化是不一样的!所以会出错!


使用脚本便捷地在Ubuntu中安装最新Linux内核:http://www.linuxdiyf.com/linux/14160.html

你知道Linux内核是如何构建的吗?:http://www.linuxdiyf.com/linux/14041.html

在Ubuntu中如何安装或升级Linux内核到4.2:http://www.linuxdiyf.com/linux/13724.html

linux内核和应用程序区别:http://www.linuxdiyf.com/linux/13755.html

如何更新Linux内核来提升系统性能:http://www.linuxdiyf.com/linux/13327.html