转:http://hi.baidu.com/ns_linux/blog/item/ff240bfed15736849e5146aa.htmlTQ2440+2.6.29.3移植(whizer)
前提准备:开发板TQ2440开发板
linux内核为linux-2.6.29.3
一、将Linux2.6.29.3内核源码放到工作目录的kernel文件夹下,并解压
下载地址:
二、修改机器码
在 TQ2440 使用的 uboot 的机器码是 168 ,这里需要修改机器码,否则会出现不能启动的情况。机器码保存在内核源码的
“arch/arm/tools/mach-types”文件中,在大概 379 行,把原来的 362 改为
168。也可以修改uboot中的机器码,在“\include\asm-arm\mach-types.h”中,找到“#define
MACH_TYPE_S3C2440
168”,将168改成与linux内核一致的机器码,注意,这个机器码要没有使用的,否则会编译中提示冲突。然后保存即可。
三、修改内核源码根目录下的Makefile文件
#ARCH ?= arm
#CROSS_COMPILE ?=arm-linux-
四、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。
(1) 找到smdk_default_nand_part,改成:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "TQ2440_uboot",
.size = 0x00040000,
.offset = 0x00000000,
},
[1] = {
.name = "TQ2440_kernel",
.offset = 0x0004C000,
.size = 0x00200000,
},
[2] = {
.name = "TQ2440_yaffs2",
.offset = 0x0024C000,
.size = 0x03DB0000,
}
};
此处的分区一定也要与u-boot的分区一致
(2) 然后修改 Nand Flash 的读写匹配时间,修改 common-smdk.c 文件的刚刚修改后的大概 140 行左右的smdk_nand_info 结构体,修改内容如下:
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 10,
.twrph0 = 25, //这 三个数字要改的 默认是20 60 20
.twrph1 = 10,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
四、修改时钟频率
修改平台的时钟频率,以满足 TQ2440的工作频率。修改内核源码,否则在超级终端中会出现乱码。修改arch/arm/mach-s3c2440/mach-smdk2440.c
......
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
五、增加Yaffs2文件系统的支持
解压Yaffs2并将其加入Linux内核(打补丁的方式)。最新的yaffs2源代码包可以从获得
#cd yaffs2
#./patch-ker.sh c /(linux内核路径)(注意:c与路径之间有一个空格)
六、从配置内核
先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1.General setup --->
Configure standard kernel features (for small systems) --->
选上这项,否则文件系统中的一些选项不会出现
2. System Type ---->
S3C2410 DMA support
Support ARM920T processor
S3C2410 Machines --->
SMDK2410/A9M2410
S3C2440 Machines --->
SMDK2440
SMDK2440 with S3C2440 CPU module
3.Boot options --->
将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
可能根据个人板子的设置会不一样,TQ2440是从Nand Flash中加载文件系统,其中mtdblock2是存放Linux文件系统的分区。
4.
Enable loadable module support --->
Module unloading
Automatic kernel module loading
选择这两个,剩下的可以去掉
5.Device Drivers --->
<*> Memory Technology Device (MTD) support --->
MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉
Network device support --->
Ethernet (10 or 100Mbit) --->
<*> DM9000 support
< > Real Time Clock ---> //这个去掉
6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
文件系统为YAFFS2 ,如果不选此,则出现Kernel panic: VFS: Unable to mount root fs on unknown-block(31,2)
七、编译 make zImage
阅读(609) | 评论(0) | 转发(0) |