linux移植过程的错误记录
时间:2010-08-06 来源:mjp_jpy
1、 Kernel panic - not syncing: Attempted to kill init!
【原因】:内核和文件系统编译时选用的配置不一致:一般是文件系统启用了ARM EABI,但内核编译时,未打开此编译选项;
【解决】:make menuconfig
Kernel Features ---> [*] Use the ARM EABI to compile the kernel [*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
2、 Bootloader启动结束后,串口信息变成乱码。
【原因】:内核配置的系统时钟频率跟实际硬件不匹配;
【解决】:修改系统时钟:
« 在arch/arm/mach-s3c2440/mach-smdk2440.c中做如下修改
static void __init smdk2440_map_io(void)
{
……
//s3c24xx_init_clocks(16934400);
s3c24xx_init_clocks(12000000); //12MHz,根据实际硬件修改时钟参数
......
}
3、cramfs文件系统加载错误
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; here are the available partitions:
1f00 128 mtdblock0 (driver?)
1f01 64 mtdblock1 (driver?)
1f02 2880 mtdblock2 (driver?)
1f03 13312 mtdblock3 (driver?)
1f04 32768 mtdblock4 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
Yaffs文件系统加载错误
yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lo
st+found.
yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lo
st+found.
yaffs_read_super: isCheckpointed 0
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 136K
tragedy: yaffs_FindObjectByName: non-directory
==>> yaffs bug: fs/yaffs2/yaffs_guts.c 7311
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1]
Modules linked in:
CPU: 0 Not tainted (2.6.27.5mjp #5)
PC is at yaffs_FindObjectByName+0x100/0x138
LR is at yaffs_FindObjectByName+0x68/0x138
pc : [<c015609c>] lr : [<c0156004>] psr: 60000013
sp : c3819c60 ip : 00000000 fp : c3819d8c
r10: c3819e10 r9 : 00000bcd r8 : c340856c
r7 : c39adf7c r6 : c39adfe4 r5 : 00000000 r4 : 00000000
r3 : 00000000 r2 : 00000008 r1 : 00000008 r0 : 00000bcd
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: c000717f Table: 30004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc3818268)
Stack: (0xc3819c60 to 0xc381a000)
9c60: 00766564 00000000 00000000 00000000 00000000 00000000 00000000 00000000
9c80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
9ca0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
9cc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
9ce0: 00000000 00000000 00000000 00000000 c3819d0c c3819d00 c0052e3c c0057620
9d00: c3819d34 c3819d10 c0098abc c0179620 c39adf7c 00000000 c3409a54 00000007
9d20: c3819d44 c3819d30 c00508a8 c005085c 00000000 c340992c c3819d54 c3819d48
9d40: c009834c c005797c c3819d64 c3409998 c3819d9c c3819d60 c02f28bc c005793c
9d60: 22222222 00000000 c340992c c3408514 c3a1d000 c3409998 c3819dfc c3819e10
9d80: c3819dac c3819d90 c0151630 c0155fac 00000000 c3408514 c340992c c3819ef0
9da0: c3819de4 c3819db0 c008d39c c01515f0 c3819eec c380c2a0 c017b464 c38ec005
9dc0: c3819ef0 c340992c 00000000 00000003 00000000 00000000 c3819e44 c3819de8
9de0: c008eddc c008d2e0 c38ec005 00000101 c3819ef4 c3818000 00000000 05b6719b
9e00: 00000007 c38ec005 c3401760 c3819ed8 c380c2a0 c3408498 c3819e44 c3819ef0
9e20: c3819ef0 c3819e48 c38ec000 00000003 00000000 00000000 c3819e6c c3819e48
9e40: c008f410 c008e578 c380c2a0 c34083a0 00000001 c3819ef0 c38ec000 c38ec000
9e60: c3819e94 c3819e70 c008f584 c008f3d0 c3819e94 c3819e80 c3819ef0 ffffff9c
9e80: c38ec000 00000001 c3819eb4 c3819e98 c008f628 c008f4b4 00000002 00000000
9ea0: ffffff9c 00000000 c3819ecc c3819eb8 c008f688 c008f5e4 00000003 00000000
9ec0: c3819f7c c3819ed0 c00901d4 c008f674 00000003 c3819ee0 00000000 00000002
9ee0: 00000026 00000000 00000000 00000000 c380c2a0 c3408498 c3819f74 c3819f08
9f00: c003dce0 00000101 00000001 00000000 00000001 00000000 c008fff0 c043a4e0
9f20: c0407cd0 40000013 00000000 c043a520 00000000 00000003 00000000 c38e1660
9f40: c3816bc4 00000000 c3819f7c c3819f58 c009a688 00000002 00000000 ffffff9c
9f60: 00000000 c38ec000 00000000 00000000 c3819fac c3819f80 c0083a78 c0090164
9f80: c3819fbc c3819fa0 c003041c c04084e0 00000000 00000000 00000000 00000000
9fa0: c3819fbc c3819fb0 c0083b40 c0083a2c c3819fd4 c3819fc0 c002a438 c0083b2c
9fc0: c04084e0 00000000 c3819ff4 c3819fd8 c0008604 c002a41c 00000000 00000001
9fe0: 00000000 00000000 00000000 c3819ff8 c003fe90 c000854c 09008204 20400240
Backtrace:
[<c0155f9c>] (yaffs_FindObjectByName+0x0/0x138) from [<c0151630>] (yaffs_lookup+
0x50/0xfc)
[<c01515e0>] (yaffs_lookup+0x0/0xfc) from [<c008d39c>] (do_lookup+0xcc/0x198)
r7:c3819ef0 r6:c340992c r5:c3408514 r4:00000000
[<c008d2d0>] (do_lookup+0x0/0x198) from [<c008eddc>] (__link_path_walk+0x874/0xd
24)
[<c008e568>] (__link_path_walk+0x0/0xd24) from [<c008f410>] (path_walk+0x50/0x9c
)
[<c008f3c0>] (path_walk+0x0/0x9c) from [<c008f584>] (do_path_lookup+0xe0/0x108)
r7:c38ec000 r6:c38ec000 r5:c3819ef0 r4:00000001
[<c008f4a4>] (do_path_lookup+0x0/0x108) from [<c008f628>] (__path_lookup_intent_
open+0x54/0x90)
r7:00000001 r6:c38ec000 r5:ffffff9c r4:c3819ef0
[<c008f5d4>] (__path_lookup_intent_open+0x0/0x90) from [<c008f688>] (path_lookup
_open+0x24/0x2c)
r7:00000000 r6:ffffff9c r5:00000000 r4:00000002
[<c008f664>] (path_lookup_open+0x0/0x2c) from [<c00901d4>] (do_filp_open+0x80/0x
6cc)
[<c0090154>] (do_filp_open+0x0/0x6cc) from [<c0083a78>] (do_sys_open+0x5c/0xec)
[<c0083a1c>] (do_sys_open+0x0/0xec) from [<c0083b40>] (sys_open+0x24/0x28)
r8:00000000 r7:00000000 r6:00000000 r5:00000000 r4:c04084e0
[<c0083b1c>] (sys_open+0x0/0x28) from [<c002a438>] (init_post+0x2c/0xf8)
[<c002a40c>] (init_post+0x0/0xf8) from [<c0008604>] (kernel_init+0xc8/0xf0)
r5:00000000 r4:c04084e0
[<c000853c>] (kernel_init+0x0/0xf0) from [<c003fe90>] (do_exit+0x0/0x6bc)
r4:00000000
Code: e3a020ff eb008efe e3500000 0a000003 (e5955000)
---[ end trace 58341908cdc6eff5 ]---
Kernel panic - not syncing: Attempted to kill init!
【原因】:一般是NAND ECC校验错误:内核编译启用了MTD的ECC,文件系统制作过程禁用了的ECC;
【解决】:禁用内核编译时的MTD的ECC:
drivers/mtd/nand/s3c2410.c
将chip->ecc.mode = NAND_ECC_SOFT;
改为 chip->ecc.mode = NAND_ECC_NONE;
4、can't open /dev/s3c2440_serial0: No such file or directory
【原因】:内核驱动中使用的驱动设备名跟inittab中的名字匹配不上;
【解决】:修改inittab中的s3c2440_serial0::askfirst:-/bin/sh 使之与驱动代码/driver/serial/ samsung.c中的一致:
static struct uart_driver s3c24xx_uart_drv = {
.owner = THIS_MODULE,
.dev_name = "s3c2410_serial",
.nr = 3,
.cons = S3C24XX_SERIAL_CONSOLE,
.driver_name = S3C24XX_SERIAL_NAME,
.major = S3C24XX_SERIAL_MAJOR,
.minor = S3C24XX_SERIAL_MINOR,
};