打印本文 打印本文 关闭窗口 关闭窗口
ARM IXP425上移植MVL内核
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1009  更新时间:2009/4/25 0:44:49  文章录入:mintao  责任编辑:mintao
首先使用原来可以成功运行的kernel配置进行配置,我使用的是MVL3.0,其内核版本是2.4.18。
注:由于两款硬件的SDRAM大小不同,以前的SDRAM是256M,新硬件的SDRAM是128M,因此修改配置文件中的kernel cmdline,内容如下:

CODE: [Copy to clipboard] console=ttyS0,115200 root=/dev/ram rw ip=off mem=128M@0x00000000 initrd=0x00800000,8M 然后执行一下命令:

CODE: [Copy to clipboard] make ixdp425_config
make oldconfig
make dep
make zImage 成功,得到vmlinux和zImage,用file命令检查vmlinux文件,显示:

CODE: [Copy to clipboard] file vmlinux
vmlinux: ELF 32-bit MSB executable, ARM, Version 1 (ARM), statically linked, not stripped 确认为可以在ARM上执行的文件。然后连接硬件,启动到RedBoot系统,执行以下命令:

CODE: [Copy to clipboard] RedBoot> load -r -v -b 0x11600000 zImage
Using default protocol (TFTP)
|
Raw file loaded 0x11600000-0x116ada3f, assumed entry at 0x11600000
RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0x50000000  0x50000000  0x00060000  0x00000000
RedBoot config    0x50FC0000  0x50FC0000  0x00001000  0x00000000
FIS directory     0x50FE0000  0x50FE0000  0x00020000  0x00000000
mac               0x50060000  0x10000000  0x00020000  0x10000000
zimage            0x50080000  0x11600000  0x00100000  0x11600000
ramdisk           0x50180000  0x10800000  0x00600000  0x10800000
param             0x505E0000  0x00100000  0x00020000  0x10800000
RedBoot> go 0x11600000
Uncompressing Linux.................................................. done, boot
ing the kernel.

到此,系统就没有反映了。
网上搜索了一下,发现有三种情况遇到此问题:
1、一部分同仁们在cmdline中的console定义错误,将ttyS0写成了tty0,这样将输出定向到了标准终端,而不是串口;
2、一部分同仁在省级到2.6.10以上内核时还是错误的定义了console输出,2.6.10后的串口名据说变成ttySC0了,我也没试过2.6.10的内核;
3、还有一部分人在升级到2.6.10后,使用一个叫做skyeye的工具模拟,好像那样会牵扯到一个memory.h和lubbock.c中的关于内存基地址的定义问题,需要修改基地址中的0xa0000000为0xc00000000。

对比了硬件厂家提供的软件包,其中在arch/arm/boot目录下,Makefile中有以下定义点:

CODE: [Copy to clipboard] ifeq ($(CONFIG_ARCH_IXP425),y)
ZRELADDR        = 0x00008000
PARAMS_PHYS        = 0x00000100
endif

这与厂家提供的地址不同,这几个地址是kernel imgae解压缩后的地址,硬件相关,因此需要修改一致:
然后还有arch/arm/boot/compressed目录下的head-xscale.S文件,这个文件是初始化是调用的汇编,与芯片相关的,MVL提供的和厂商提供的不一样,因此用厂商提供的该文件替换。
然后就是注意kernel配置中的CMDLINE的设置,就OK了!

重新编译内核,加载,OK,系统启动成功。

但是现在碰到了新的问题,启动后系统报出如下错误:

CODE: [Copy to clipboard] [error] No ISR registered to service interrupt 这个报错是由于一个模块没有加载成功造成的,重新编译modules后,替换到ramdisk中,就OK了!

打印本文 打印本文 关闭窗口 关闭窗口