jz2440开发板初始使用的是基于linux2.6.22的code。现在需要把linux3.10.20移植上去。
1.因为jz2440默认系统分区kernel分区只分了2M,而基于linux3.10.20的kernel编译之后会大于2M,所以需要先对uboot系统分区进行修改,使得kernel分区为4M。可参考上一篇博客。下面是我的开发板初始环境变量(kernel分区已经修改为4M):
OpenJTAG> print
bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
netmask=255.255.255.0
mtdids=nand0=nandflash0
ipaddr=192.168.1.117
serverip=192.168.1.102
filesize=306C8
mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),4m(kernel),-(root)
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
stdin=serial
stdout=serial
stderr=serial
partition=nand0,0
mtddevnum=0
mtddevname=bootloader
Environment size: 509/131068 bytes
2.编译linux3.10.20:
添加机器码--LINGD2440
在arch/arm/tools/mach-types 下,添加以下一行
lingd@ubuntu14:~/arm/linux-3.14.6$ vim arch/arm/tools/mach-types
lingd2440 MACH_LINGD2440 LINGD2440 1998
1>.在kernel中查找默认配置文件.可以用find指令查找。
root:linux-3.10.20#find -name "*defconfig*"
arch/arm/configs/s3c2410_defconfig
......
因为s3c2440不存在,所以我们使用和s3c2440最相似的s3c2410作为配置文件。
root:linux-3.10.20#make s3c2410_defconfig
会自动生成".config"文件
我们先做一个备份:
root:linux-3.10.20#cp .config config_ok
然后就以此配置为基础编译内核。
2>.修改Makefile文件。
到顶层目录vi Makefile
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改为:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
1.1将arch/arm/mach-s3c24xx/mach-smdk2440.c中的:s3c24xx_init_clocks(16934400);
修改为:
s3c24xx_init_clocks(12000000);
vi arch/arm/mach-s3c24xx/mach-smdk2440.c