Linux-2.6内核移植过程中常见问题及解决方法
1、内核启动后,出现如下提示后停住
Uncompressing Linux........................................................... done, booting the kernel
一般情况下,这个时候内核已经启动了,只不过在控制台console中没有打印信息而已。所以问题主要锁定在串口这一块。
首先确定你的板子包括硬件都是没有问题的。可以分以下几种情况,最常见的原因是在内核启动命令行这块cmdline,一般情况下linux-2.4内核中,console=ttyS0,而linux-2.6内核则用console=ttySAC0。还有一个原因,不多见,我当时用的是S3C2410的板子,bootloader用的是u-boot-1.0.0,内核移植的是linux-2.6.16,结果出现这个问题,在网上查了很多资料,最后找出来问题。u-boot把S3C2410的时钟设置为202Mhz,而内核启动时使用的是200Mhz,修改U-Boot中的MPLLCON:
clk_power->MPLLCON MPLLCON = 0x0005c040;//MPLL=200Mhz
2、内核编译成功后,启动后出现如下提示后就停住了。。。。。。 Freeing init memory: 72K
Warning: unable to open an initial console.
这个也是控制台console的问题,linux-2.6.13以后的内核都支持devfs,而之后版本的内核就把devfs这块去掉了,虽然还能在内核源码中找到对应的源码,你也可以把它加进内核,但是也不是太好用。2.6.13 后的版本改为支持udev了,udev这块我也没太弄懂,正在研究。因此如果你是linux-2.6.13版本一下的内核,编译的时候在Pseudo filesystems添加dev filesystem surpport选项,也就是添加devfs的支持,如果linux-2.6.13之后的版本,你就看看你的rootfs下有没有/dev/console这个文件,没有的话,自己做一个就可以
Unable to handle kernel xxxx pointer dereference at virtual address xxxxxx
r10: 00000000 r9 : 00000000 r8 : 00500001
r7 : 00000001 r6 : c011ab50 r5 : c3726c00 r4 : c013e024
r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 : c3726c00
Kernel panic - not syncing: Attempted to kill init!
这个提示是内核启动加载驱动时出错,那就只有找到出错的驱动,不加载它,如果必须要用这个驱动,只有自己修改源代码,一般问题都在对硬件的地址操作有问题。一般情况下,芯片出来的时候厂家都会给一个参考设计方案,主要是硬件电路,如果你是用的是开发板的话,大都是参考厂家的那个设计做的。而内核也按参考方案设计的,但是每家的开发板并不能保证硬件电路一样,问题可能就出现了。
|