2010-04-24 23:19:12| 分類(lèi): 嵌入式Linux學(xué)習(xí) | 標(biāo)簽: |字號(hào)大中小 訂閱
在linux操作系統(tǒng)的順利移植之后,linux的內(nèi)核雖然在板子上跑了起來(lái),但是此時(shí)linux還不支持板子的的各個(gè)硬件,比如說(shuō)lcd,攝像頭,聲卡,usb等模塊,我們必須要在板子上裝入驅(qū)動(dòng)程序后,才能上這些硬件在linux操作系統(tǒng)下工作。
這些驅(qū)動(dòng)在內(nèi)核中都有驅(qū)動(dòng)的源碼,我們要做的就是將這些驅(qū)動(dòng)源碼編譯到內(nèi)核中,當(dāng)然在編譯之前是需要對(duì)驅(qū)動(dòng)源碼做相關(guān)的修改的,因?yàn)槲覀兊挠布蛢?nèi)核中的驅(qū)動(dòng)很有可能是不匹配的。在對(duì)驅(qū)動(dòng)進(jìn)行編譯的時(shí)候,我們還要有選擇的去挑選一些我們需要的驅(qū)動(dòng),把我們不需要的驅(qū)動(dòng)舍棄,稱(chēng)之為裁剪內(nèi)核。
首先必須要開(kāi)發(fā)板的linux操作系統(tǒng)支持nandflash和掛載上yaffs2文件系統(tǒng),只有掛載了yaffs2文件系統(tǒng)的操作系統(tǒng)才能算是完整的操作系統(tǒng)。
為什么驅(qū)動(dòng)是在內(nèi)核中修改的呢?那是因?yàn)閮?nèi)核就操作系統(tǒng),就是用來(lái)管理各硬件設(shè)施的。
(一) 支持nandflash的驅(qū)動(dòng):
Linux新版本的內(nèi)核中提供了支持大頁(yè)nand的驅(qū)動(dòng)。這對(duì)我們nand驅(qū)動(dòng)的移植就很方便了,我們只要在內(nèi)核中找到相應(yīng)的驅(qū)動(dòng)并進(jìn)行一些修改即可。
(1) 修改內(nèi)核中nand的分區(qū)(MTD分區(qū))表
修改:arch/arm/plat-s3c24xx/common-smdk.c文件,在第110行:
這里我們要使nandflash同時(shí)支持64M,256M或更高容量。
[0] = {
.name = "boot", name就是分區(qū)名,可以隨便取。
.offset = 0, offset是偏移量,就是分區(qū)的起始地址。
.size = SZ_1M, size就是此分區(qū)的大小
},
[1] = {
.name = "kernel",
.offset = SZ_1M + SZ_128K,
.size = SZ_4M,
},
[2] = {
.name = "yaffs2",
.offset = SZ_1M + SZ_128K + SZ_4M,
.size = SZ_256M - SZ_4M - SZ_1M – SZ_128K, }
#endif
};
第一個(gè)分區(qū)是boot分區(qū)(1M),就是存放uboot的。第二個(gè)分區(qū)是kernel分區(qū)(4M),是存放os內(nèi)核的。第三個(gè)分區(qū)是yaffs2(根文件系統(tǒng)分區(qū))。
現(xiàn)在來(lái)說(shuō)下分區(qū)的概念:分區(qū)有兩種意義上的分區(qū),一個(gè)是內(nèi)核的MTD分區(qū),一個(gè)是uboot的分區(qū)。兩者都是和nand的分區(qū)相關(guān)的,但卻不能等同。在內(nèi)核中,Nand上面劃分了一些分區(qū),這些分區(qū)稱(chēng)之為MTD分區(qū),都可以通過(guò)linux系統(tǒng)中的設(shè)備文件來(lái)訪問(wèn)。所以在內(nèi)核中必須有MTD對(duì)uboot,內(nèi)核映像,文件系統(tǒng)在nand上的分區(qū)信息。而uboot的分區(qū)則是nand的實(shí)際分區(qū),在系統(tǒng)上電后通過(guò)sram將uboot放到內(nèi)存中運(yùn)行,并初始化各引導(dǎo)程序,和空間地址。這時(shí)的空間地址是nandflash的真實(shí)地址。而內(nèi)核啟動(dòng)后所執(zhí)行的不說(shuō)從uboot中去讀地址,而是從內(nèi)核MTD分區(qū)地址中在讀地址,因此內(nèi)核MTD分區(qū)與uboot的分區(qū)必須相同。
(2) 修改nand的匹配時(shí)間(查芯片手冊(cè))
(3) 修改Kconfig文件,在配置時(shí)選擇NAND類(lèi)型。讓內(nèi)核選擇支持哪種容量的nandflash
(4) 配置內(nèi)核,支持nandflash。
這些過(guò)程實(shí)際上就是在修改內(nèi)核中的nand驅(qū)動(dòng)源碼,然后在修改編譯選項(xiàng),最后自己用make menuconfig來(lái)配置,最后在linux的集成開(kāi)發(fā)環(huán)境下編譯內(nèi)核生成映像文件,下載到arm開(kāi)發(fā)板上。這樣的內(nèi)核就支持nand的了啦。
(二) yaffs2文件系統(tǒng)移植
(1)下載yaffs2源碼(在光盤(pán)資料/源碼包/其他軟件源碼/目錄下)
解壓,進(jìn)入yaffs2目錄:
#tar xzvf yaffs2.tar.gz
#cd cvs/yaffs2/
(2)給內(nèi)核打上yaffs2文件系統(tǒng)的補(bǔ)丁,執(zhí)行:
#./patch-ker.sh c /………/linux-2.6.31/ ?這個(gè)是你的內(nèi)核源碼的目錄
這時(shí)內(nèi)核源碼fs目錄下多了一個(gè)yaffs2目錄,同時(shí)Makefile文件和Kconfig文件也增加了yaffs2的配置和編譯條件。
(3)最后利用uboot燒如寫(xiě)好的yaffs2文件系統(tǒng)
聯(lián)系客服