手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载地址为:http://www.kernel.org/pub/linux/kernel/v2.6/
修改PATH环境变量或者Makefile文件的CROSS_COMPILE宏,将前面制作好的交叉编译工具链路径添加进来,同时需要下载针对AT91rm9200的patch包, 2.6.17-at91.patch.gz, 下载地址是http://maxim.org.za/AT91RM9200/2.6/
$ tar zxvf linux-2.6.17.tar.gz
$ cp 2.6.17-at91.patch.gz linux-2.6.17
$ cd linux-2.6.17
$ zcat ./2.6.17-at91.patch.gz | patch -p1
有点要注意的是,如果从windows下下载该patch,有三四百K大小,执行zcat时会报not gzip format的错误,而在linux环境里下载则为79.1K,且命令执行没有问题,不知道下同一个文件在两种环境下怎么会有区别,协议有区别?
然后一个很必要的修改是串口的驱动,打开文件: /linux-2.6.17/arch/arm/mach-at91rm9200/board-dk.c, 作如下改动:
/*
* Serial port configuration.
* 0 .. 3 = USART0 .. USART3
* 4 = DBGU
*/
static struct at91_uart_config __initdata dk_uart_config = {
.console_tty = 0, /* ttyS0 */
.nr_tty = 5,
.tty_map = { 4, 1, 0, 2, 3 } /* ttyS0, ..., ttyS4 */
};
否则,新内核没有ttyS4设备,而我们的serial console正是基于ttyS4的,所以ramdisk解压后由于找不着ttyS4而死掉。
然后运行
$ make mrproper
$ make distclean
$ make at91rm9200dk_defconfig
$ make menuconfig
修改其中的Boot Options:
Default Kernel Command String: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
我修改的为:mem=32M console=ttyS0,115200 initrd=0x21000000,0x181341 root=/dev/ram0 rw
0x21000000是ram文件系统的起始地址,0x181341是文件系统大小
at91rm9200dk_defconfig位于/linux-2.6.17/arch/arm/config/下,可以修改其默认配置
最后
$ make
# cp arch/arm/boot/zImage ...
在uboot的shell里
$ tftp 20008000 zImage
$ tftp 21000000 Ramdisk.gz
$ go 20008000
内核启动后会停在
wanted = 164392 limterd = 164384
无法启动文件系统,经过在网上多番搜索,可能的原因是kernel配置的ramdisk的大小不够
但是我的ramdisk只有1.5M,而内核配置默认的是8192,怎么会不够呢??改大到10240,果然可以加载ramdisk了
发表于 @ 2007年07月16日 20:11:00