日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Linux 2.6.27 for ARM9/S3C2410 內(nèi)核移植筆記

 WUCANADA 2013-01-05

[原創(chuàng)]Linux 2.6.27 for ARM9/S3C2410 內(nèi)核移植筆記

分類(lèi): Linux 嵌入式系統(tǒng) / ARM 5530人閱讀 評(píng)論(6) 收藏 舉報(bào)

2.6.27是Linux內(nèi)核的最新版本。昨天中午下載的,用了半天的時(shí)間完成了針對(duì)ARM CPU的基本配置,第一次做Linux移植就出乎意料的順利,其實(shí)這主要得益于Linux內(nèi)核優(yōu)良的設(shè)計(jì)和該版本對(duì)ARM處理器近乎完美的支持!

http://blog.csdn.net/rssn_net/article/details/3073302

關(guān)鍵詞: Linux 2.6.27 內(nèi)核 移植 ARM S3C2410

再寫(xiě)一遍:
  下面把我的整個(gè)配置過(guò)程與大家分享一下:

第一部分 準(zhǔn)備工作
1. 下載Linux內(nèi)核:
    從 http://www./pub/linux/kernel/v2.6/ 下載最新版的,tar.gz和tar.bz2 均可,我下載的是linux-2.6.27.tar.bz2這個(gè),使用 tar -jxvf linux-2.6.27.tar.bz2 解壓縮,cd linux-2.6.27 轉(zhuǎn)到內(nèi)核代碼根目錄;

2. 下載安裝并配置 arm-linux-gcc 工具鏈:
    以前配置過(guò)的話,該步可以忽略。我用的是3.4.1版本,建議安裝到/usr/local/arm/3.4.1目錄下,記得要設(shè)置一下工具鏈程序的搜索目錄, export PATH=$PATH:/usr/local/arm/3.4.1/bin 即可;

第二部分 代碼配置
3. 修改Makefile:
    # gedit Makefile
ARCH    ?=  arm
CROSS_COMPILE  ?= /usr/local/arm/3.4.1/bin/arm-linux-

4. 修改C程序文件,指明Flash分區(qū)信息,添加NAND Flash驅(qū)動(dòng)支持:
  總共只有兩個(gè)文件需要修改:
    /arch/arm/plat-s3c24xx/common-smdk.c
    /arch/arm/plat-s3c24xx/devs.c
  (1) 指明分區(qū)信息:
    common-smdk.c 中找到 static struct mtd_partition smdk_default_nand_part[],根據(jù)自己板子的分區(qū)結(jié)構(gòu)修改,例如我的vivi下的分區(qū)信息為:
name              offset        size        flag
------------------------------------------------
vivi            : 0x00000000    0x00020000     0  128k
param           : 0x00020000    0x00010000     0   64k
kernel          : 0x00040000    0x002c0000     0    2M+768k
root            : 0x00300000    0x01d00000    16   29M
rootfs          : 0x02000000    0x01f00000     0   31M

我的Flash分了4個(gè)區(qū),這個(gè)變量就應(yīng)設(shè)置為:
static struct mtd_partition smdk_default_nand_part[] = {
    [0] = {
        .name    = "vivi",
        .offset    = 0x00000000,
        .size    = 0x00020000,
    },
    [1] = {
        .name    = "param",
        .offset = 0x00020000,
        .size    = 0x00010000,
    },
    [2] = {
        .name    = "kernel",
        .offset = 0x00040000,
        .size    = 0x002c0000,
    },
    [3] = {
        .name    = "root",
        .offset    = 0x00300000,
        .size    = 0x01d00000,
    },
    [4] = {
        .name    = "rootfs",
        .offset    = 0x02000000,
        .size    = 0x01f00000,
    },
};
與上面的信息一一對(duì)應(yīng),很容易理解;

  (2) 建立NAND Flash芯片支持:
    common-smdk.c 中找到 static struct s3c2410_platform_nand smdk_nand_info,修改為:
/*static*/
struct s3c2410_platform_nand smdk_nand_info = {
    .tacls        = 0,
    .twrph0        = 30,
    .twrph1        = 0,
    .nr_sets    = ARRAY_SIZE(smdk_nand_sets),
    .sets        = smdk_nand_sets,
};
這 個(gè)變量是與NAND Flash時(shí)序有關(guān)的設(shè)置,talcs, twrph0, twrph1 的含義見(jiàn)S3C2410手冊(cè)的6-3,隨著板子的Flash芯片不同這里的值可能會(huì)有些差別,我的是K9S1208型號(hào)的;另外注意,一定要將變量前面的 static修飾詞刪除或者注釋掉,原因在后面;

  (3) 加入NAND Flash芯片支持到NAND Flash驅(qū)動(dòng):
    devs.c 中找到 struct platform_device s3c_device_nand,在前面加上前面 smdk_nand_info 變量的 extern,后面加上smdk_nand_info的指針引用,具體代碼如下:
extern struct s3c2410_platform_nand smdk_nand_info;
struct platform_device s3c_device_nand = {
    .name          = "s3c2410-nand",
    .id          = -1,
    .num_resources      = ARRAY_SIZE(s3c_nand_resource),
    .resource      = s3c_nand_resource,
    /* Add the NAND Flash device */
    .dev=
    {
        .platform_data = &smdk_nand_info,
    }
};
  (4)  指定啟動(dòng)時(shí)初始化:
    找到這一段代碼:
static struct platform_device __initdata *smdk_devs[] = {
    &s3c_device_nand,
    &smdk_led4,
    &smdk_led5,
    &smdk_led6,
    &smdk_led7,
};
這段代碼指定了內(nèi)核啟動(dòng)時(shí)初始化的設(shè)備,其中s3c_device_nand是必須有的,因?yàn)槲覀冃枰狽AND Flash驅(qū)動(dòng)來(lái)掛載根文件系統(tǒng),其余的根據(jù)需可自行添加,這里我們使用默認(rèn)設(shè)置,不做修改。

5. 禁止Flash ECC校驗(yàn):據(jù)說(shuō)vivi或uboot通過(guò)軟件算法產(chǎn)生的ecc校驗(yàn)碼于S3C2410 NAND Flash 控制器產(chǎn)生的ecc校驗(yàn)碼不一致,所以我們?cè)谶@里選擇禁止內(nèi)核ECC校驗(yàn),具體做法如下:
  在drivers/mtd/nand/s3c2410.c文件中找到s3c2410_nand_init_chip()函數(shù),在函數(shù)體最后加上 chip->ecc.mode  = NAND_ECC_NONE; 保存,退出。

以下為內(nèi)核配置部分

6. 支持啟動(dòng)時(shí)掛載devfs:
  由于2.6內(nèi)核去掉了對(duì)devfs的支持,這里我們需要手動(dòng)將其加上,并在/sbin/init運(yùn)行之前能自動(dòng)掛上/dev為devfs文件系統(tǒng),修改fs/Kconfig文件:
找到menu "Pseudo filesystem",在其后添加如下語(yǔ)句:
config DEVFS_FS
    bool "/dev file system support (OBSOLETE)"
    default y
config DEVFS_MOUNT
    bool "Automatically mount at boot"
    default y
    depend on DEVFS_FS

7. 配置內(nèi)核產(chǎn)生.config文件
  # cp arch/arm/configs/s3c2410_defconfig ./.config
  # make menuconfig
  絕大部分選項(xiàng)都先采用默認(rèn)設(shè)置,待移植成功后我們?cè)龠M(jìn)一步裁減,這里只設(shè)置一項(xiàng):
Boot Options ---> Default kernel command string:  noinitrd root=/dev/mtdblock4 console=ttySAC0,115200
注:因?yàn)槲业腇lash分了5個(gè)區(qū),標(biāo)識(shí)符分別為mtdblock0、mtdblock1... mtdblock4,第五個(gè)分區(qū)(也就是mtdblock4)是我們存放cramfs根文件系統(tǒng)的分區(qū),故設(shè)置 root=/dev/mtdblock4。

到此,內(nèi)核配置完成

第三部分 編譯測(cè)試
8. 編譯內(nèi)核
  # make zImage

9. 載入內(nèi)核映像,試運(yùn)行: 可以先用tftp將zImage映像下載到RAM某個(gè)地址(通常是0x30008000),然后用vivi命令 go 0x30008000 0 193 跳到這個(gè)地址執(zhí)行(0和193是傳遞給內(nèi)核的參數(shù),用寄存器r0, r1存放),之后如果在終端中打印出設(shè)備初始化信息,那恭喜你,你已經(jīng)成功一大半了!否則,回過(guò)頭去檢查是否有遺漏或錯(cuò)誤的地方。

第四部分 應(yīng)用程序的移植
  包括busybox的移植、啟動(dòng)腳本的編寫(xiě)、cramfs映像的創(chuàng)建等,請(qǐng)參見(jiàn)《Linux系統(tǒng)移植》文檔的《應(yīng)用程序移植》章節(jié)

再寫(xiě)一遍關(guān)鍵詞: S3C2410 ARM 內(nèi)核移植 Linux 2.6.27


參考資料:
  劉勇等. Linux系統(tǒng)移植. ---, ---  http://www./bbs/data/uploads/linux_mig_release_G4oyxcsIVyIZ.pdf
所用設(shè)備:
  陽(yáng)初S3C2410開(kāi)發(fā)板V2.3版  http://www./

  (原創(chuàng)文章,轉(zhuǎn)載時(shí)請(qǐng)注明本文網(wǎng)址)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多