工作需要,把内核移植到phy3250(基于LPC3250的一款ARM9开发板,内核是ARM926ejs)。移植过程相对比较顺利,出现的几个小问题都解决掉了,在此作一记录。相关环境如下:
<li>工具链:Sourcery G++ 2009q3-67 for ARM GNU/Linux,核心组件版本如下:
-
bin-utils 2.19.51
-
GCC 4.4.1
-
G libc 2.10
-
内核 2.6.27.8
-
u-boot 2009-03-rc1
其中,内核在kernel的基础上,打上了来自LTIB的补丁。该补丁的作用主要是添加phy3250的板级支持。包括mach架构、板载设备(如EEPROM、NAND等)的驱动、内核配置范例文件。因此,我们对于内核的配置可以直接使用位于范例配置。由于LTIB默认采用的是不支持EABI的早期Sourcery工具链(大致是2005年的),所以在此基础上启用内核配置中的“Kernel Features->Use the ARM EABI to compile the kernel”。这样一来,内核才能正常加载通过我们这个支持gnueabi的工具链编译的busybox init等程序(相见问题四)。
具体移植中遇到的问题分析及其解决方法如下:
一、内核启动后,LED灯按1Hz的频率在闪,但是串口在解压缩内核后就没有输出了:
二、启动后无法挂在NFS文件系统:
<li>
-
根文件系统类型:root=/dev/nfs
-
根文件系统位置:nfsroot=宿主机IP:/path/to/nfsroot
-
网络接口参数:ip=开发板IP:宿主机IP:网关:子网掩码:域名,如有多网卡,在后面添加:ethn:on/off来启(禁)用之。
三、NFS挂载成功,但是未能进入终端。提示init失败,找不到init之类的错误:
四、NFS挂载成功,也没有提示init失败,但仍然没有进入终端。且提示kernel panic - not syncing: Attempted to kill init!
五、网卡初始化失败,内核提示MAC地址无效。
六、启动正常,网卡也正常。但是仍然无法打开终端交互。内核提示Warning:unable to open an initial console。
<li>
-
mknod -m 600 /path/to/rootfs/dev/console c 5 1
七、启动后,进入终端,想要挂在NAND Flash的时候,发现/dev/下面没有对应的mtdblock设备节点。但是/sys/block下面是有的。
<li>
-
一种就是devfs即静态方式,就是甭管有没有这个设备存在,都创建一堆堆的节点并映射到到对应的设备号。
-
另一种是udev即用户态动态方式。就是运行一个用户态的程序,不断的去扫描内核设备驱动系统/sys,当有新设备插入的时候自动创建对应的节点。