mini2440的linux内核移植
电脑主机系统:Ubuntu 9.04 mini2440开发板bootloader:supervivi
交叉编译器使用友善之臂提供的符合EABI标准的交叉编译器arm-linux-gcc-4.3.2
1.首先到http://www.doczj.com/doc/8c66c043b307e87101f6964b.html/去下载内核源码。我是下载的linux-
2.6.3x.x.tar.bz2
2.将内核源码解压,可以解压到任意你想放源码文件的地方
tar xvzf linux-2.6.3x.x.tar.gz
3.修改顶层makefile指定交叉编译变量
进入内核源码,修改顶层Makefile文件中的编译器选项。
gedit Makefile 打开Makefile
将makefile里的
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
4.将linux-2.6.3x.x/arch/arm/mach-s3c2440/目录下的mach-smdk2440.c 复制一份。命名为
mach-mini2440.c ,找到MACHINE_START(S3C2440, "SMDK2440") ,修改为
MACHINE_START(MINI2440, "Cody’s mini2440 DevBoard")。
***********最好整个板级目录复制**************
5.修改内核中平台的时钟频率(mini2440开发板使用12M晶振)。
修改内核源码“ar ch/arm/mach- s3c2440/mach-smdk2440.c” 文件的163 行,
把16.9344MHz 修改为12MHz
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000); //修改为12000000,默认为16934400
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6. 替换所有mach-mini2440.c中的smdk2440为mini2440,在mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉.
7.修改对nand的分区信息。要让内核知道nand flash的分区信息,设置成跟bootloader一致。
在arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[],注意这个一定要跟bootloader的一致。在我的板子中修改如下:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x000000030000,