宿主機:ubuntu9.10 目標機:s3c2440 交叉編譯器:arm-linux-gcc-4.3.2 交叉編譯器路徑:/usr/local/arm/4.3.2 要移植的內核版本:linux-2.6.30.4 文件系統類型: yaffs2 步驟包括: 1)給linux內核打上yaffs2補丁 2)修改機器碼 3)修改目標板的arch和編譯器路徑, 4)增加devfs文件管理器支持 5)修改晶振頻率 6)修改MTD分區 7)關閉ECC校驗 8)修改nandflash驅動 9)配置內核 首先,從官網上下載linux-2.6.30.4的內核。 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/可以找到。 新建目錄mkdir /home/haker,將內核源碼包解壓到hacker/目錄下 tar –zxvf linux-2.6.30.4.tar.gz 1)給內核打jaffs2補丁 下載最新的驅動http://www.aleph1.co.uk/cgi-bin/ ... fs2.tar.gz?view=tar 解壓到/home/hacker/下 tar –zxvf yaffs2.tar.gz 進入目錄 cd yaffs2 給內核打補丁 ./patch-ker.sh c /home/hacker/linux-2.6.30.4 加上c 他會自動解壓到后面的目錄中 成功后會打印信息: Updating /home/hacker/linux-2.6.30.4/fs/Kconfig Updating /home/hacker/linux-2.6.30.4/fs/Makefile 2)修改機器碼 暫時我使用的是飛凌的boot,自己的boot還沒有完全做好,飛凌boot的默認機器碼是193,修改arch/arm/tools/mach-types,將 s3c2410 ARCH_S3C2410 S3C2410 193 刪掉 然后將 s3c2440 ARCH_S3C2440 S3C2440 362 修改為 s3c2440 ARCH_S3C2440 S3C2440 193 3)修改目標板的arch和編譯器路徑 修改linux/2.6.30.4下的Makefile將 ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 修改成 ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux- 4)增加devfs文件管理器支持 修改fs/Kconfig,找到 menu “Pseudo filesystems” 添加 config DEVFS_FS bool “/dev file system support (OBSOLETE)” default y config DEVFS_MOUNT bool “Automatially mount at bool” default depends on DEVFS_FS 5)修改晶振頻率 arch/arm/mach-s3c2440/mach-smdk2440.c /*s3c24xx_init_clocks(16934400);*/ s3c24xx_init_clocks(12000000); 6)修改MTD分區,由于自己的uboot還沒有完全做好,暫時用飛凌的boot的分區, 修改文件arch/arm/plat-s3c24xx/common-smdk.c static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "Boot", .size = 0x00100000, .offset = 0 }, [1] = { .name = "MyApp", .size = 0x003c0000, .offset = 0x00140000, }, [2] = { .name = "Kernel", .size = 0x00300000, .offset = 0x00500000, }, [3] = { .name = "fs_yaffs", .size = 0x03c00000, //60M .offset = 0x00800000, }, [4] = { .name = "WINCE", .size = 0x03c00000, .offset = 0x04400000, } }; 7)關閉ECC校驗 文件drivers/mtd/nand/s3c2410.c 函數:s3c2410_nand_init_chip /*chip->ecc.mode = NAND_ECC_SOFT; */ chip->ecc.mode = NAND_ECC_NONE; 這個有兩個 軟件校驗和硬件校驗都要關掉 8)修改nandflash驅動,修改drivers/mtd/nand下面的nand_bbt.c文件: static struct nand_bbt_descr largepage_memorybased = { .options = 0, .offs = 0, .len = 1, // 原數值為2,支持2K每頁的flash修改為1。K9F1G08,K9F2G08是2k每頁的flash .pattern = scan_ff_pattern }; static struct nand_bbt_descr largepage_flashbased = { .options = NAND_BBT_SCAN2NDPAGE, .offs = 0, .len = 1, //原數值為2,支持2K每頁的flash修改為1。K9F1G08,K9F2G08是2k每頁的flash .pattern = scan_ff_pattern }; 9)配置內核 make menuconfig 首先加載s3c24xx系列的通用配置,然后在此基礎上修改 配置完后將配置文件保存為.config,這樣方便下次make menuconfig時默認加載上次配置過的文件 交叉編譯內核 make zImage 如果沒有任何錯誤,編譯出來的內核在arch/arm/boot/目錄下,文件zImage即是。 李萬鵬 |