分类:
2011-08-19 20:26:05
原文地址:linux-2.6内核移植 作者:luozhiyong131
一> 准备移植
也可到官方网站获得最新版本的内核源码解压源码,进入目录:Linux-2.6.31
修改 Makefile: 183行:
ARCH ?= arm 指定系统硬件架构
CROSS_COMPILE ?= arm-linux- 指定交叉编译器
修改时钟:
修改arch/arm/mach-s3c2440/mach-smdk2440.c 163行
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000); 输入时钟为 12MHz
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
修改机器码(根据实际情况,这个要和bootloader的匹配):
修改:arch/arm/tools/mach-types 379行:
s3c2440 ……………………… XXX 后面那个数就是机器码
配置:
#make menuconfig 进入图形化配置界面
在配置菜单中选择这一项:“Load an Alternate Configuration File” 输入2440的默认配置文件:arch/arm/configs/s3c2410_defconfig 说明:这个文件就是 S3C24XX 系列开发板的板级支持包(BSP) 然后选择 OK,按回车 进入“System Type”选项单,里面的选项保持默认 在“S3C24XX Machine”选项中只配置这几项(其他的选项取消)
S3C2410 Machine --->
[*] SMDK2410/A9M2410
S3C2440 Machine --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 cpu moudle
配置完后,回到主菜单,选择这一项“Save an Alternate Configuration File”输入要保存的配置文件名称:.config (默认) 退出,编译内核: #make zImage
把zImage镜像烧进NandFlash跑一下,看是否正常打印出信息
注意,系统启动最后可能会出现这个错误:
Kernel panic - not syncing: Attempted to kill init!
然后出打印出一些很乱的东西。 因为用4.X.X版本的交叉编译器使用EABI,但内核默认是不支持EABI编译的,所以编译出的系统会报错,但用3.X.X版本的编译器就不会出现这个问题。 解决办法是,配置内核支持EABI编译
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel
(EXPERIMENTA)
二> 支持 NandFlash:
修改同时支持64M,256M:arch/arm/plat-s3c24xx/common-smdk.c文件在第110行
static struct mtd_partition smdk_default_nand_part[] = {
#if defined(CONFIG_64M_NAND)
[0] = {
.name = "boot",
.offset = 0,
.size = SZ_1M,
},
[1] = {
.name = "kernel",
.offset = SZ_1M + SZ_128K,
.size = SZ_4M,
},
[2] = {
.name = "yaffs2",
.offset = SZ_1M + SZ_128K + SZ_4M,
.size = SZ_64M - SZ_4M - SZ_1M - SZ_128K,
}
#elif defined(CONFIG_256M_NAND)
[0] = {
.name = "boot",
.offset = 0,
.size = SZ_1M,
},
[1] = {
.name = "kernel",
.offset = SZ_1M + SZ_128K,
.size = SZ_4M,
},
[2] = {
.name = "yaffs2",
.offset = SZ_1M + SZ_128K + SZ_4M,
.size = SZ_256M - SZ_4M - SZ_1M - SZ_128K,
}
#endif
};
这个分区名字可以随便起。
修改 Kconfig 文件,在配置时选择 NAND 类型,修改 driver/mtd/nand/Kconfig,在172行,添加:
choice
prompt "Nand Flash Capacity Select"
depends on MTD
config 64M_NAND
boolean "64M NAND For TX-2440A"
depends on MTD
config 256M_NAND
boolean "256M NAND For TX-2440A"
depends on MTD
endchoice
配置内核,支持NandFlash
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[*] S3C2410 NAND Hardware ECC //这个一定要选上
Nand Flash Capacity Select(256M Nand For TX-2440A)--->
三> 支持 yaffs2 文件系统
解压,进入yaffs2目录:
#tar xzvf yaffs2.tar.gz
#cd cvs/yaffs2/
给内核打上yaffs2文件系统的补丁,执行:
#./patch-ker.sh c /………/linux-2.6.31/ 这个是你的内核源码的目录
这时内核源码 fs 目录下多了一个 yaffs2 目录,同时 Makefile 文件和 Kconfig
文件也增加了yaffs2的配置和编译条件。
配置对 yaffs2 支持:
这部分配置的比较多,可根据自己的需要进行配置,把不用的文件系统都去掉,
下面是几个主要的配置:
File systems --->
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows95) fs support
Miscellaneous filesystems --->
<*> YAFFS2 file system support
[*] Autoselect yaffs2 format
说明:现在内核已经支持 NandFlash 和 yaffs2 文件系统,将内核烧入 NandFlash后,再烧入 yaffs2文件系统
文件:
linux-2.6.31.rar
大小:
161KB
下载:
下载