移植Linux3.4.2版本内核到mini2440(转)

一. 内核启动流程,据此配置内核(机器ID)
1. 获取内核源码 www.kernel.org
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.2.tar.bz2
2. 解压内核
# tar xjvf linux-3.4.2.tar.bz2
3. 修改顶层Makefile,指定交叉编译器
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
4. 使用默认配置编译内核,可使用如下命令查看内核有哪些默认配置
# find -name “*defconfig”
使用缺省内核配置文件,s3c2410_defconfig 是SMDK2410 的缺省配置文件
# make s3c2410_defconfig
编译、测试
# make uImage
拷贝uImage到tftpboot目录
# cp arch/arm/boot/uImage /work/tftpboot/uImage_3.4.2
下载、启动内核
# tftp 32000000 uImage_3.4.2
# bootm 32000000
结果,启动后会产生乱码,原因是bootargs参数并未指定串口波特率,修改bootargs如下即可正常启动看到输出
# set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
5. 修改晶振频率
# vim arch/arm/mach-s3c24xx/mach-smdk2440.c
–s3c24xx_init_clocks(16934400);
++s3c24xx_init_clocks(12000000);
编译、测试
# make s3c2410_defconfig //支持内核较多
# make uImage

二. 修改分区, 制作新的文件系统
2.1 修改分区,和我修改后的u-boot-2012.04.01一致,参考友善之臂文档《Mini2440 Linux移植开发实战指南.pdf》
0x00000000-0x00060000 : “bootloader”
0x00060000-0x00080000 : “params”
0x00050000-0x00580000 : “kernel”
0x00580000- : “root”
# vim arch/arm/mach-s3c24xx/common-smdk.c
点击(此处)折叠或打开
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = “bootloader”,
.size = SZ_256K + SZ_128K,
.offset = 0,
},
[1] = {
.name = “params”,
.offset = SZ_256K + SZ_128K,
.size = SZ_128K,
},
[2] = {
.name = “kernel”,
.offset = SZ_512K,
.size = 0x00500000,
},
[3] = {
.name = “root”,
.offset = SZ_512K + 0x00500000,
.size = MTDPART_SIZ_FULL,
},
};
编译、测试
# make uImage
# cp arch/arm/boot/uImage /work/tftpboot/uImage_3.4.2

点击(此处)折叠或打开
List of all partitions:
1f00 384 mtdblock0 (driver?)
1f01 128 mtdblock1 (driver?)
1f02 5120 mtdblock2 (driver?)
1f03 1042944 mtdblock3 (driver?)

三. 移植YAFFS文件系统
获取yaffs2源码
# git clone git://www.aleph1.co.uk/yaffs2
给内核打yaffs2补丁,参考readme
# cd yaffs2
# ./patch-ker.sh c m /work/kernel/linux-3.4.2
配置内核使其支持yaffs2文件系统
# make menuconfig
File systems —>
[*]Miscellaneous filesystems —>
<*> yaffs2 file system support
# make uImage

可修改bootcmd参数便捷启动
# setenv bootcmd ‘tftp 32000000 uImage_3.4.2_yaffs2;bootm 32000000’

四. 裁剪内核
查看现在内核大小
# ls arch/arm/boot/uImage -l
-rw-r–r– 1 root root 2486104 Dec 30 22:41 arch/arm/boot/uImage
# make menuconfig //去掉不需要的项
a. 去掉不需要支持的单板
System Type —>
SAMSUNG S3C24XX SoCs Support —>
* S3C24XX SoCs *
[ ] SAMSUNG S3C2410
[ ] SAMSUNG S3C2412
[ ] SAMSUNG S3C2416/S3C2450
[*] SAMSUNG S3C2440
[ ] SAMSUNG S3C2442
[ ] SAMSUNG S3C2443
* S3C2440 Boards *
[ ] Simtec Electronics ANUBIS
[ ] Avantech AT2440EVB development board
[*] MINI2440 development board
[ ] NexVision NEXCODER 2440 Light Board
[ ] Simtec IM2440D20 (OSIRIS) module
[ ] HP iPAQ rx3715
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module

原文地址

superyin


蜀ICP备17021628号