移植 linux-2.6.27.9 内核至 QQ2440V3
时间:2009-03-10 来源:xu_xuesheng
一、修改内核源文件
1、修改 Makefile 文件
将 Makefile 文件中的
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改为:
ARCH ?= arm
CROSS_COMPILE ?= /your/toolchain/path/arm-linux-
其中的“/your/toolchain/path/”为交叉编译工具链的地址,“arm-linux-”为交叉编译命令的前缀。
2、设置 MTD 分区的 NAND 分区信息
修改位于“arch/arm/plat-s3c24xx/”目录下的“common-smdk.c”文件,修改其中的“smdkdefaultnand_part”段来指明 NANO Flash 中的分区信息。分区信息可从 bootloader 中得到,例如此处的分区信息如下:
Supervivi> part show
Number of partitions: 5
name : offset size flag
------------------------------------------------------------
vivi : 0x00000000 0x00028000 0
eboot : 0x00028000 0x00018000 0
param : 0x00040000 0x00010000 0
kernel : 0x00050000 0x00200000 0
root : 0x00250000 0x03dac000 0
因为 QQ2004V3 原版的内核映像中只设置了“bootloader”、“kernel”和“root”三个分区,为了和它的引导参数一至,所以我们也设置为三个分区,设置参数如下:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.offset = 0x00000000,
.size = 0x00028000,
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00250000,
.size = 0x03dac000,
}
};
另外还要修改“smdknandinfo”段来设置NAND Flash芯片信息:
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
3、设置时钟频率
因为此开发板中使用的 12M 的晶振与内核中的默认设置不同,所以要修改位于“arch/arm/mach-s3c2440”目录下的“mach-smdk2440.c”文件,查找“s3c24xxinitclocks”,将原来的:
s3c24xx_init_clocks(16934400);
修改为:
s3c24xx_init_clocks(12000000);
4、去掉 ECC 校验
修改位于“drivers/mtd/nand/”目录下的”s3c2410.c“文件,将其中的:
chip->ecc.mode = NAND_ECC_SOFT;
改为:
chip->ecc.mode = NAND_ECC_NONE;
二、设置内核
因为内核中自带的配置对 s3c2440 的支持已经相当完善,所以在默认配置的基础上进行裁剪、修改是最省时省力的做法。
1、加载默认的 s3c2410 配置
$ make s3c2410_defconfig
2、进入设置菜单设置内核
$ make menuconfig
注:设置时的注意事项请查看第三节。
3、编译内核,生成映像文件
$ make clean
$ make zImage
生成的映像文件的位置在“arch/arm/boot/zImage”,直接将此文件烧入芯片即可运行。
三、内核设置选项注意事项
1、系统类型
|---System Type
| |---ARM system type
| | |---Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443
2、启动选项
如果此处的命令字符串设置的有误,可以在“vivi”中设置参数“linuxcommandline”
|---Boot options
| |---Default kernel command string
| | |---root=noinitrd root=/dev/mtdblock2 rw init=/linuxrc console=ttySAC0
注:“/dev/mtdblock2”就是“arch/arm/plat-s3c24xx/common-smdk.c”文件中“smdkdefaultnand_part”中设置的root分区,请根据实际情况进行修改。
3、NAND 芯片支持
|---Device Drivers
| |---Memory Technology Device (MTD) support
| | |---NAND Device Support
| | | |---NAND Flash support for S3C2410/S3C2440 SoC
4、文件系统支持
设置了 NAND 芯片支持后才可以在文件系统选项中选择“JFFS2”、“cramfs”等文件系统。
|---File systems
| |---Miscellaneous filesystems
| | |---YAFFS2 file system support
| | |---Journalling Flash File System v2 (JFFS2) support
| | |---Compressed ROM file system support (cramfs)
5、其它
其它硬件驱动,请根据各自的情况在“Device Drivers”选项中选择。
备注:
因为没有对驱动程序进行移植,所以现在的内核还不支持 QQ2440V3 中的网卡、音频、LCD等设备。这些设备的移植会放在以后再进行!