1.当把内核烧入nand后画面卡在Booting Linux ...Copy linux kernel from 0x00240000 to 0x30008000, size =0x00200000 ... Copy Kernel to SDRAM done,NOW, BootingLinux......UncompressingLinux......................done, booting the kernel.
卡在这里不动了。
分析:由于刚启动就卡住,初步推断推断是机器码不匹配造成的,跟踪源码
MACHINE_START(FZ2440, "FZ2440 development board")
#define MACHINE_START(_type,_name)\
static const struct machine_desc __mach_desc_##_type\
__used \
__attribute__((__section__(".arch.info.init"))) = {\
.nr = MACH_TYPE_##_type, \
.name = _name,
#define MACHINE_END \
};
在arch\arm\tools目录下mach-types文件中有
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxxnumber
fz2440 MACH_FZ2440 FZ2440 168
在uboot中找到开发板机器码为168,以此将此处修改为168
在arch\arm\mach-s3c2440目录下Kconfig文件中有
config MACH_FZ2440
bool "FZ2440 development board"
select CPU_S3C2440
select EEPROM_AT24
select LEDS_TRIGGER_BACKLIGHT
select SND_S3C24XX_SOC_S3C24XX_UDA134X
select S3C_DEV_NAND
select S3C_DEV_USB_HOST
help
Say Y here to select support for the MINI2440. Is a 10cm x 10cm board
available via various sources. It can come with a 3.5" or 7" touch LCD.
由以上代码知MACHINE_START宏将参数FZ2440转换为MACH_FZ2440找到其对应的机器码。
2.按照网上教程编译内核后,将生成zImage烧入开发板中,出现Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
此问题使我纠结了好几天,网上查资料说出现的原因一般是根文件系统有点问题,笔者的根文件系统是开发板自带的,由于笔者是菜鸟,是不匹配还是
内核移植的问题让人迷茫,玩了两晚上游戏,今晚突然心血来潮,仔细对内核分区信息严格按照开发板中代码复制,make后
mount: mounting tmpfs on /dev/shm failed: Invalid argument
hwclock: settimeofday() failed: Invalid argument
[01/Jan/1970:00:00:13 +0000] boa: server version Boa/0.94.13
[01/Jan/1970:00:00:13 +0000] boa: server built Mar 26 2009 at 15:28:42.
[01/Jan/1970:00:00:13 +0000] boa: starting server pid=712, port 80
open device leds: No such file or directory
Try to bring eth0 interface up......ifconfig: SIOCGIFFLAGS: No such device
ifconfig: SIOCSIFHWADDR: No such device
ifconfig: SIOCSIFADDR: No such device
route: SIOCADDRT: No such process
Done
Please press Enter to activate this console.
尽然启动起来了,内核移植工作暂时告一段落。