Linux移植之移植步驟

在這裏總結一下我在移植Linux2.6.22.6內核過程時的步驟。移植成功後最終能掛接作好的根文件系統,而且啓動第一個init程序。移植的步驟以下:linux

一、將網上下載的內核源碼文件linux-2.6.22.6.tar.bz2放入/work/system路徑下。數組

二、切換到/work/system,使用tar xjf linux-2.6.22.6.tar.bz2解壓縮內核源碼文件獲得一個名爲linux-2.6.22.6的文件夾函數

三、cd linux-2.6.22.6切換到內核文件夾spa

四、修改頂層Makefile文件使得 ARCH ?= arm;CROSS_COMPILE  ?= arm-linux-code

五、執行make s3c2410_defconfig修改內核配置,最終會生成一個.confg文件blog

六、執行make menuconfig配置內核,會讀取.confg文件而後根據這個文件的基礎上更改配置,這裏配置先不用更改,直接退出源碼

七、make uImage以後,將產生的uImage文件經過UBOOT的usb下載功能下載到指定地址,內核分區flash

八、在uboot界面執行boot啓動內核,能夠看到內核啓動以後出現一片亂碼it

九、更改CPU的時鐘晶振,找到 (arch\arm\mach-s3c2440\Mach-smdk2440.c)文件,將327行的s3c24xx_init_clocks函數裏的16934400改成12000000,表明12M晶振io

324        static void __init smdk2440_map_io(void)
325        {
326            s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
327            s3c24xx_init_clocks(12000000);//將16934400改成12000000
328            s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
329        }

十、將更改過的代碼繼續編譯make uImage,重複第7步驟。

十一、發現亂碼消失了,可是仍是不能啓動位於nand flash上的第四分區的根文件系統

十二、更改MTD分區,找到 (arch\arm\plat-s3c24xx\Common-smdk.c)文件,將smdk_default_nand_part數組改成以下的形式,這表示將nandflash分爲四個區:bootloader區、params區、kernel區、root區。

118    static struct mtd_partition smdk_default_nand_part[] = {
119        [0] = {
120            .name    = "bootloader",
121            .size    = 0x00040000,
122            .offset    = 0,
123        },
124        [1] = {
125            .name    = "params",
126            .offset = 0x00040000,
127            .size    = 0x00020000,
128        },
129        [2] = {
130            .name    = "kernel",
131            .offset = 0x00060000,
132            .size    = 0x00200000,
133        },
134        [3] = {
135            .name    = "root",
136            .offset    = 0x00260000,
137            .size    = 0x0fda0000,
138        }
139    };

1三、將更改過的代碼繼續編譯make uImage,重複第7步驟。

1四、發現內核仍是不能掛接根文件系統,出現No filesystem could mount root, tried:  ext3 ext2 cramfs msdos vfat romfs字樣。

1五、增長yaffs2文件系統支持nandfalsh

  a、從網上下載的yaffs_source.tar.gz放到/work/system目錄下
  b、tar xzf yaffs_source.tar.gz解壓獲得Development目錄下分別有yaffs2和yaffs兩個文件夾,其中yaffs2是比較新的文件系統
  c、進入yaffs2文件夾後,./patch-ker.sh c /work/system/linux-2.6.22.6打補丁到內核所在目錄

    上述命令完成如下三件事情

      1)、修改內核fs/Kconfig文件,增長source "fs/yaffs2/Kconfig",表示讀入fs/yaffs2/Kconfig這個Kconfig文件。

      2)、修改內核fs/Makefile文件,增長obj-$(CONFIG_YAFFS_FS) += yaffs2/,表示增長yaffs2/目錄編譯

      3)、將yaffs2源碼目錄下的Makefile.kernel文件複製爲內核fs/yaffs2/Makefile

          將yaffs2源碼目錄下的Kconfig文件複製到內核fs/yaffs2/目錄下

          將yaffs2源碼目錄下的*.c、*.h文件(不包括子目錄下的文件)複製到內核fs/yaffs2/目錄下
  d、make menuconfig配置內核支持yaffs2文件系統
    File systems
    Miscellaneous filesystems
    <*>YAFFS file system support

1六、將更改過的代碼繼續編譯make uImage,重複第7步驟。

1七、發現內核能夠啓動位於root分區的根文件系統了,移植成功

相關文章
相關標籤/搜索