<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S5PV210(TQ210)學(xué)習(xí)筆記——內(nèi)核移植與文件系統(tǒng)構(gòu)建

          S5PV210(TQ210)學(xué)習(xí)筆記——內(nèi)核移植與文件系統(tǒng)構(gòu)建

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          由于之前做過(guò)2440和6410,鑒于時(shí)間原因,這里暫時(shí)跨過(guò)其他模塊的裸機(jī)驅(qū)動(dòng)和uboot移植,直接進(jìn)入內(nèi)核移植及驅(qū)動(dòng)開(kāi)發(fā)方面的學(xué)習(xí)。

          內(nèi)核移植其實(shí)很簡(jiǎn)單,因?yàn)閮?nèi)核是linus率領(lǐng)的linux內(nèi)核開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)并維護(hù)的,我們只需要跟我們的平臺(tái)交叉編譯一下即可使用,但是,內(nèi)核移植也不簡(jiǎn)單,因?yàn)閮?nèi)核移植起見(jiàn)出現(xiàn)任何問(wèn)題都可能會(huì)被卡住,因?yàn)閮?nèi)核代碼非常龐大,我們無(wú)法通讀內(nèi)核代碼,下面是我移植期間遇到的各種悲催的問(wèn)題和解決方案,首先是必備的開(kāi)發(fā)環(huán)境:

          本文引用地址:http://www.ex-cimer.com/article/201611/322806.htm

          a) Linux內(nèi)核代碼,版本3.8.3

          b) S5PV210開(kāi)發(fā)板(我的是TQ210)

          c) HOST環(huán)境是WIN7(64位)下安裝的Ubuntu虛擬機(jī)(12.10)

          一 內(nèi)核編譯

          從Linux內(nèi)核網(wǎng)站(kernel.org)下載內(nèi)核代碼、解壓并進(jìn)入內(nèi)核目錄

          (1)修改Makefile,將195行和196行改為:

          1. ARCH=arm
          2. CROSS_COMPILE?=arm-linux-
          (2)進(jìn)行默認(rèn)配置,進(jìn)入arch/arm/configs目錄,可以發(fā)現(xiàn)最接近我們開(kāi)發(fā)板的配置文件是s5pv210_defconfig,故
          1. makes5pv210_defconfig
          (3)編譯內(nèi)核,如果需要生成zImage則執(zhí)行
          1. makezImage
          如果需要生成uImage則執(zhí)行
          1. makeuImage
          (4)用uboot下載并嘗試運(yùn)行,結(jié)果是悲劇的,在uboot打印”Starting kernel...“之后就看不到任何輸出了,顯然,有兩種原因:

          a. 編譯的內(nèi)核類型錯(cuò)誤,比如您的uboot使用的是uImage,而您編譯的是zImage。

          b. 移植的uboot存在問(wèn)題,沒(méi)能正確的拷貝內(nèi)核到正確的內(nèi)存地址并啟動(dòng)。

          c. 內(nèi)核存在某些配置,我們沒(méi)有配置。

          經(jīng)過(guò)查看內(nèi)核配置項(xiàng)知道,內(nèi)核默認(rèn)采用的UART1打印調(diào)試信息,因此,執(zhí)行:

          1. makemenuconfig
          在出來(lái)的對(duì)話中依次選擇System type =>(1) S3C UART to use for low-level messages,在編輯框中將1改為0,然后保存配置并再次編譯內(nèi)核,直接執(zhí)行make即可,無(wú)需make clean。如果是首次執(zhí)行make menuconfig會(huì)遇到錯(cuò)誤,這是因?yàn)閙ake menuconfig依賴一個(gè)庫(kù),這里我忘記名字了,如果是ubuntu可以直接用指令安裝的,網(wǎng)上搜一下就可以搞定。

          編譯完內(nèi)核之后再次下載并嘗試運(yùn)行,這時(shí),可以看到內(nèi)核打印的信息了,如果您不幸只看到“Uncompressing Linux... done, booting the kernel.”就沒(méi)有任何輸出了,那么請(qǐng)檢查uboot傳入的機(jī)器碼跟內(nèi)核機(jī)器碼是否匹配,如果不匹配請(qǐng)修正,然后重新編譯運(yùn)行內(nèi)核或者uboot,如果修正之后仍然看不到其他輸出,那么請(qǐng)檢查uboot的bootargs參數(shù),bootargs中必須配置console=ttySAC0,否則也看不到打印信息。

          如果沒(méi)有出現(xiàn)上面的錯(cuò)誤,那么您的內(nèi)核已經(jīng)可以打印出很多信息,但是由于內(nèi)核默認(rèn)沒(méi)有提供對(duì)Nand或網(wǎng)卡的支持,無(wú)法掛接文件系統(tǒng),所以仍然無(wú)法正常運(yùn)行。為了能使內(nèi)核進(jìn)入控制臺(tái),為后面的驅(qū)動(dòng)開(kāi)發(fā)提供環(huán)境,我們先制作文件系統(tǒng),然后來(lái)移植網(wǎng)卡驅(qū)動(dòng),讓內(nèi)核NFS方式掛接文件系統(tǒng),然后我們就可以開(kāi)發(fā)其他驅(qū)動(dòng)了,如Nand、LCD、聲卡等等。

          二 構(gòu)建文件系統(tǒng)

          其實(shí)構(gòu)建文件系統(tǒng)還是比較簡(jiǎn)單的,注意幾個(gè)地方,然后按部就班的來(lái)就可以了。

          (1)創(chuàng)建根文件系統(tǒng)目錄結(jié)構(gòu),可以使用如下腳本:

          1. #!/bin/sh
          2. echo"------Createrootfsdirectonsstart...--------"
          3. mkdirrootfs
          4. cdrootfs
          5. echo"--------Createroot,dev....----------"
          6. mkdirrootdevetcboottmpvarsysproclibmnthomeusr
          7. mkdiretc/init.detc/rc.detc/sysconfig
          8. mkdirusr/sbinusr/binusr/libusr/modules
          9. echo"makenodeindev/consoledev/null"
          10. sudomknod-m600dev/consolec51
          11. sudomknod-m600dev/nullc13
          12. mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
          13. mkdirvar/libvar/lockvar/runvar/tmp
          14. chmod1777tmp
          15. chmod1777var/tmp
          16. echo"-------makedirectiondone---------"

          在這里我將腳本命名為mkrootfs.sh,接下來(lái)給腳本加可執(zhí)行權(quán)限(即chmod a+x mkrootfs)并運(yùn)行腳本。我的腳本是在/nfsroot目錄下運(yùn)行的,所以我的根文件系統(tǒng)的根目錄為/nfsroot/rootfs,后面均以該目錄為例闡述。

          (2)編譯Busybox

          到Busybox下載最新版的Busybox源碼,我是用的是1.21.0版本,下載完后解壓并進(jìn)入busybox目錄,首先是配置busybox

          1. makemenuconfig

          配置菜單跟配置內(nèi)核時(shí)的差不多,依次進(jìn)入Busybox Settings =>Build Options =>Cross Compiler prefix (NEW),設(shè)置為編譯器的前綴,我的是arm-linux-。網(wǎng)上有些朋友還推薦選擇Busybox Settings => Build Options =>Build BusyBox as a static binary (no shared libs),但是如果我們正確拷貝編譯器了運(yùn)行庫(kù)的話,不設(shè)置也可以?,F(xiàn)在可以編譯Busybox了,執(zhí)行
          1. make

          編譯過(guò)程很順利,我這里沒(méi)有遇到任何錯(cuò)誤,接下來(lái)將編譯好的Busybox安裝到/nfsroot/rootfs就可以了,執(zhí)行
          1. makeCONFIG_PREFIX=/nfsroot/rootfsinstall

          (3)拷貝編譯器運(yùn)行庫(kù)

          我的編譯器是4.5.1版本的,拷貝arm-none-linux-gnueabi/sys-root/lib的所有動(dòng)態(tài)庫(kù)到/nfsroot/rootfs/lib下,為了不拷貝連接,應(yīng)該加上”-d"選項(xiàng),執(zhí)行

          1. cp*so*/nfsroot/rootfs/lib-d

          同樣拷貝arm-none-linux-gnueabi/sys-root/usr/lib下的所有動(dòng)態(tài)庫(kù)到/nfsroot/rootfs/usr/lib下,執(zhí)行
          1. cp*so*/nfsroot/rootfs/usr/lib-d

          (4)構(gòu)建etc目錄


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();