工作需要,把内核移植到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,当有新设备插入的时候自动创建对应的节点。