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引导的时候,是这样的:
有tiny210v2-uboot 20130727-nfs这个版本引导的时候:
神奇的事情。同一个内核,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