编译内核出现的问题:
1. cc1: error: invalid option `short-load-bytes'
原因与解决办法:
原因是高版本的编译器不支持-mshort-load-bytes选项,改为-malignment-traps即可。修改U-boot下:cpu/arm920t/config.mk文件(选择该目录下配置文件是因为我使用的是arm920t这个硬件平台,如果你是别的平台就需要选择别的目录下配置文件)中-mshort-load-bytes改为-malignment-traps即可。
2. 出现上述问题,修改后依然有问题。
blkpg.c: In function `blk_ioctl':
blkpg.c:250: error: asm-specifier for variable `__r1' conflicts with asm clobber list
blkpg.c:250: confused by earlier errors, bailing out
后发现问题可能是因为编译器的缘故。
2.4内核----2.95.3的工具链
2.6内核-----3.3./3.4.的工具链,其中binutils的版本要高于2.13
建议编译2.4内核使用3.3一下的arm-Linux,编译2.6内核使用3.4之上的编译器。
3.end_request: I/O error, dev mtdblock3, sector 16
Buffer I/O error on device mtdblock3, logical block 2
end_request: I/O error, dev mtdblock3, sector 24
Buffer I/O error on device mtdblock3, logical block 3
end_request: I/O error, dev mtdblock3, sector 24
Buffer I/O error on device mtdblock3, logical block 3
end_request: I/O error, dev mtdblock3, sector 0
FAT: unable to read boot sector
VFS: Cannot open root device "mtdblock3" or unknown-block(31,3)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
移植内核时出现了这种错误,这种错误通常是由校验造成的.这种情况的解决办法为:
禁止Flash ECC校验。我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.修改drivers/mtd/nand/s3c2410.c 文件,找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:chip->eccmode = NAND_ECC_NONE;
并且把
Device Drivers --->
Memory Technology Devices (MTD) --->
NAND Flash Device Drivers --->
[*] S3C2410 NAND Hardware ECC
去掉。(默认是不加的,可查看一下若选上了进行去掉)