linux-2.6.22.1在s3c2410移植全过程
扫描二维码
随时随地手机看文章
这两天一直致力于linux 2.6.22.1 的移植工作,虽然遇到过很多困难浪费过很多时间,但是昨晚终于出来了。现将其移植的详细过程贴出来供大家参考,如果按我说的做没有成功,可能与你的开发板以及电脑配置有关系。我还列出了我在移植过程只能中遇到的种种问题及解决方案,希望对有相同爱好兴趣的你有所帮助。
一.各种开发环境介绍
bootloader编译环境:
vivi版本:0.1.4
交叉编译器(CROSS-COMPILE)版本:2.95.3
操作系统:Fedora 6(在VMware 6.0.0 安装的,其实和直接安装没什么区别)
linux内核编译环境:
内核版本:linux2.6.22.1
(下载地址:
交叉编译器(CROSS-COMPILE)版本: 4.2.0
(下载地址:
http://www.codesourcery.com/gnu_toolchains/arm/download.html)
注意:下载选项,要选 ARM EABI 的选项,和 IA32 GNU/linux
操作系统: 同上
文件系统:用自带的root_china.tar.gz
可以到我的网络硬盘中下载http://www.disk1000.cn/?zjksn88
注意:关于所用到的各种交叉编译器我已经都打包放到我的网络硬盘里了,如果需要的话可以下载,希望给你带来一定的方便。
二:搭建交叉编译环境
说明:由于编译交叉编译环境比较繁琐,建议大家用已经编译好的交叉编译环境。
下面以3.3.2的交叉编译环境的搭建为例,其他的两个的编译器环境搭建一样。
1. 解压文件命令:
tar jxvf obsolete-gcc-3.3.2.tar.bz2
(obsolete-gcc-3.3.2.tar.bz2下载地址:http://linux.omap.com/pub/toolchain/)
2. 把解压的文件夹中的 “3.3.2”文件夹拷贝到 /usr/local/arm目录下
(如果没有arm目录就新建arm目录,但是一定要是拷贝到这个目录,不然不能运行)。
3. 在命令窗口输入
export PATH=/usr/local/arm/3.3.2/bin:$PATH
4. 如果输入 arm- 然后按下tab键能自动补全命令 arm-linux- 说明搭建成功。
三:bootloader 编译
我用的开发板已经把vivi 烧写好了,所以本人没有编译烧写bootloader 。如果你的开发板没有做好的bootloader ,请参考http://bbs.ss.pku.edu.cn/ss/index.php/5836/action_viewspace_itemid_11861.html
四: 内核 编译
1. 修改 Makefile
[root@localhost src]# cd linux-2.6.22
[root@localhost linux-2.6.22.1]# vi Makefile
修改 ARCH 和 CROSS_COMPILE
--------------------------------------------------------------
ARCH ?= arm
CROSS_COMPILE?=/usr/local/arm/arm-2007q1/bin/arm-none-eabi-
2. 修改common-smdk.c文件
[root@localhost linux-2.6.22.1]# vi arch/arm/plat-s3c24xx/common-smdk.c
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
name: "vivi",
size: 0x00020000,
offset: 0,
},
[1] = {
name: "param",
size: 0x00010000,
offset: 0x00020000,
},
[2] = {
name: "kernel",
size: 0x001c0000,
offset: 0x00030000,
},
[3] = {
name: "root",
size: 0x00400000,
offset: 0x00200000,
mask_flags: MTD_WRITEABLE,
},
[4] = {
name: "usr",
size: 0x03a00000,
offset: 0x00600000,
}
/*
[5] = {
.name = "S3C2410 flash partition 5",
.offset = SZ_1M * 14,
.size = SZ_1M * 10,
},
[6] = {
.name = "S3C2410 flash partition 6",
.offset = SZ_1M * 24,
.size = SZ_1M * 24,
},
[7] = {
.name = "S3C2410 flash partition 7",
.offset = SZ_1M * 48,
.size = SZ_16M,
}
*/
};
注意:上边所写的分区信息必须和 vivi 的分区信息相同,否则烧写上的内核不能运行。至于查看vivi 的分区信息就是 在 vivi 目录下输入vim ./arch/s3c2410/smdk.c 命令就可以在
mtd_partition_t default_mtd_partitions[] = { 。。。}
看到vivi的分区信息了。
修改 archarmmach-s3c2410mach-smdk2410.c 文件
Startic struct platform_device *smdk2410_devices[] __initdata={
&s3c_device_usb,
&s3c_device_lcd;
&s3c_device_wdt,
&s3c_device_i2c;
&s3c_device_iis,
&s3c_device_nand, /*add here*/
3. 去掉nand flash 的ECC
[root@localhost linux-2.6.22]# vim drivers/mtd/nand/s3c2410.c
--------------------------------------------------------------
1、打开drivers/mtd/nand/s3c2410.c
2、搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里
3、修改NAND_ECC_SOFT为NAND_ECC_NONE
-----------------------------------------------------------------
4. 支持启动时挂载devfs
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统。
[root@localhost linux-2.6.22]# vi fs/Kconfig