linux-2.6.22.1在s3c2410移植全過程
這兩天一直致力于linux 2.6.22.1 的移植工作,雖然遇到過很多困難浪費過很多時間,但是昨晚終于出來了?,F(xiàn)將其移植的詳細過程貼出來供大家參考,如果按我說的做沒有成功,可能與你的開發(fā)板以及電腦配置有關(guān)系。我還列出了我在移植過程只能中遇到的種種問題及解決方案,希望對有相同愛好興趣的你有所幫助。
一.各種開發(fā)環(huán)境介紹
bootloader編譯環(huán)境:
vivi版本:0.1.4
交叉編譯器(CROSS-COMPILE)版本:2.95.3
操作系統(tǒng):Fedora 6(在VMware 6.0.0 安裝的,其實和直接安裝沒什么區(qū)別)
linux內(nèi)核編譯環(huán)境:
內(nèi)核版本:linux2.6.22.1
(下載地址:
交叉編譯器(CROSS-COMPILE)版本: 4.2.0
(下載地址:
http://www.codesourcery.com/gnu_toolchains/arm/download.html)
注意:下載選項,要選 ARM EABI 的選項,和 IA32 GNU/linux
操作系統(tǒng): 同上
文件系統(tǒng):用自帶的root_china.tar.gz
可以到我的網(wǎng)絡(luò)硬盤中下載http://www.disk1000.cn/?zjksn88
注意:關(guān)于所用到的各種交叉編譯器我已經(jīng)都打包放到我的網(wǎng)絡(luò)硬盤里了,如果需要的話可以下載,希望給你帶來一定的方便。
二:搭建交叉編譯環(huán)境
說明:由于編譯交叉編譯環(huán)境比較繁瑣,建議大家用已經(jīng)編譯好的交叉編譯環(huán)境。
下面以3.3.2的交叉編譯環(huán)境的搭建為例,其他的兩個的編譯器環(huán)境搭建一樣。
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 編譯
我用的開發(fā)板已經(jīng)把vivi 燒寫好了,所以本人沒有編譯燒寫bootloader 。如果你的開發(fā)板沒有做好的bootloader ,請參考http://bbs.ss.pku.edu.cn/ss/index.php/5836/action_viewspace_itemid_11861.html
四: 內(nèi)核 編譯
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,
}
*/
};
注意:上邊所寫的分區(qū)信息必須和 vivi 的分區(qū)信息相同,否則燒寫上的內(nèi)核不能運行。至于查看vivi 的分區(qū)信息就是 在 vivi 目錄下輸入vim ./arch/s3c2410/smdk.c 命令就可以在
mtd_partition_t default_mtd_partitions[] = { 。。。}
看到vivi的分區(qū)信息了。
修改 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、搜索關(guān)鍵字NAND_ECC_SOFT,在s3c2410_nand_init_chip函數(shù)里
3、修改NAND_ECC_SOFT為NAND_ECC_NONE
-----------------------------------------------------------------
4. 支持啟動時掛載devfs
為了我們的內(nèi)核支持devfs以及在啟動時并在/sbin/init運行之前能自動掛載/dev為devfs文件系統(tǒng)。
[root@localhost linux-2.6.22]# vi fs/Kconfig