參考:http://bbs.witech.com.cn/thread-468-1-1.html
宿主機(jī):Redhat 9.0
目標(biāo)機(jī):s3c2440_fl2440
交叉編譯器:arm-linux-gcc-3.4.1
交叉編譯器路徑:/home/thk8246/fl/file
要移植的內(nèi)核版本:linux-2.6.33
文件系統(tǒng)類(lèi)型: yaffs2 (目前使用光盤(pán)中l(wèi)inux-2.6.28的文件系統(tǒng)touch.yaffs)
個(gè)人體會(huì):第一次移植linux內(nèi)核沒(méi)有加驅(qū)動(dòng),但是成功了,有點(diǎn)小高興!雖然參考了飛凌的官方資料,里面有詳細(xì)的步驟,但是某些方面還是不懂,比如nandflash驅(qū)動(dòng),原始值為2,為什么要改成1等等,但是我相信,久而久之,我就知其然,又知其所以然的。因?yàn)檫@linux學(xué)習(xí)不是一朝一夕之功呀!貴在堅(jiān)持嗎!
1、 下載內(nèi)核linux-2.6.33.tar.gz(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.tar.gz 中可以找到),然后還需要下載yaffs2文件系統(tǒng),目的是為了給內(nèi)核打補(bǔ)丁。下載地址為:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz?view=tar
2、 將下載的文件存放在/home/thk8246/fl/source中。
3、 分別解壓縮:
[root@localhost source]# tar xzf linux-2.6.33.tar.gz -C ../file
[root@localhost source]# tar xzf yaffs2.tar.gz -C ../fil
4、 為內(nèi)核增加yaffs2補(bǔ)丁
[root@localhost source]# cd ../file
[root@localhost file]# cd yaffs2
[root@localhost yaffs2]# ./patch-ker.sh c ../linux-2.6.33/
打印出信息如下,表示內(nèi)核打補(bǔ)丁成功。
Updating ../linux-2.6.33//fs/Kconfig
Updating ../linux-2.6.33//fs/Makefile
5、 修改機(jī)器碼。進(jìn)入內(nèi)核目錄,修改機(jī)器碼跟bootloader的機(jī)器碼一致(FL2440為193)
[root@localhost yaffs2]# cd ../linux-2.6.33
[root@localhost linux-2.6.33]#vi arch/arm/tools/mach-types
首先注銷(xiāo)以下行:
#s3c2410 ARCH_S3C2410 S3C2410 182
然后將以下行:
s3c2440 ARCH_S3C2440 S3C2440 362
修改為:
s3c2440 ARCH_S3C2440 S3C2440 193
6、 指定目標(biāo)板machine、編譯器和編譯器路徑。修改Makefile文件,注意將CROSS_COMPILE對(duì)應(yīng)到你系統(tǒng)中交叉編譯器地址
[root@localhost linux-2.6.33]# vi Makefile
將兩行:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改為以下兩行:
ARCH ?= arm
CROSS_COMPILE ?=/home/thk8246/fl/file/3.4.1/bin/arm-linux-
7、 增加devfs文件管理器的支持。修改fs/Kconfig。
找到以下行:
menu "Pseudo filesystems"
在此行后面增加以下內(nèi)容:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
8、 修改晶振頻率( 可解決打印信息亂碼問(wèn)題 )。修改文件arch/arm/mach-s3c2440/mach-smdk2440.c
將如下行:
s3c24xx_init_clocks(16934400);
修改為:
s3c24xx_init_clocks(12000000);
9、 修改MTD分區(qū)。打開(kāi)文件arch/arm/plat-s3c24xx/common-smdk.c,此處注意兩個(gè)地方:一、必須跟bootloader分區(qū)一樣,二、文件系統(tǒng)fs_yaffs必須在第4個(gè)分區(qū),即索引號(hào)為3。其他一些分區(qū)信息可以不要,如下:找到static struct mtd_partition smdk_default_nand_part[]的結(jié)構(gòu)體,將內(nèi)容修改為:
1 static struct mtd_partition smdk_default_nand_part[] =
2 {
3 [0] = {
4 .name = "Boot",
5 .size = 0x00100000,
6 .offset = 0
7 },
8 [1] = {
9 .name = "MyApp",
10 .size = 0x003c0000,
11 .offset = 0x00140000,
12 },
13 [2] = {
14 .name = "Kernel",
15 .size = 0x00300000,
16 .offset = 0x00500000,
17 },
18 [3] = { //與bootleader一致,否則掛載不上文件系統(tǒng)
19 .name = "fs_yaffs",
20 .size = 0x03c00000,
21 .offset = 0x00800000,
22 },
23 [4] = {
24 .name = "WINCE",
25 .size = 0x03c00000,
26 .offset = 0x04400000,
27 }
28 };
10、 關(guān)閉ECC校驗(yàn)。修改文件drivers/mtd/nand/s3c2410.c
將以下行:
chip->ecc.mode = NAND_ECC_SOFT;
修改為:
chip->ecc.mode = NAND_ECC_NONE;
11、 修改nandflash驅(qū)動(dòng),支持K9F1G08的nandflash。文件為:drivers/mtd/nand/nand_bbt.c
將以下兩個(gè)部分進(jìn)行修改
static struct nand_bbt_descr largepage_memorybased = {
.options = 0,
.offs = 0,
.len = 1, //原始值為2,改成1
.pattern = scan_ff_pattern
};
static struct nand_bbt_descr largepage_flashbased = {
.options = NAND_BBT_SCAN2NDPAGE,
.offs = 0,
.len = 1, //原始值為2,改成1
.pattern = scan_ff_pattern
};
12、 把s3c2410的默認(rèn)配置寫(xiě)入config文件。
[root@localhost linux-2.6.33]# make s3c2410_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/basic/hash
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
下面,開(kāi)始配置內(nèi)核。
配置內(nèi)核,注意System Type中,S3C2440中只選擇以下內(nèi)容即可。
[root@ localhost linux-2.6.33]# make menuconfig
配置CPU選項(xiàng)(記得與S3C2440 Machines平級(jí)的以及它的子項(xiàng)都不選,否則編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤的)
System Type --->
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
配置yaffs2選項(xiàng)
File systems --->
[*] Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
-*- 2048 byte (or larger) / page devices
[*] Autoselect yaffs2 format
[*] Cache short names in RAM
13、 最后等著基本內(nèi)核大功告成把。
[root@localhost linux-2.6.33]# make zImage
聯(lián)系客服