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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AM335x(TQ335x)學(xué)習(xí)筆記——掛載Ramdisk

          AM335x(TQ335x)學(xué)習(xí)筆記——掛載Ramdisk

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          上篇文章中我們已經(jīng)能夠通過(guò)u-boot啟動(dòng)內(nèi)核了,但是沒(méi)有能夠啟動(dòng)成功,從內(nèi)核的log中可以看出,內(nèi)核啟動(dòng)失敗的原因是沒(méi)有掛載到root文件系統(tǒng),本文將使用busybox制作根文件系統(tǒng)并打包成ramdisk供u-boot啟動(dòng)內(nèi)核使用。

          (1)制作根文件系統(tǒng)

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

          使用busybox構(gòu)建根文件系統(tǒng)的步驟可以參考本博客的另外一篇文章,該文章鏈接如下:

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

          需要補(bǔ)充的是,文章"S5PV210(TQ210)學(xué)習(xí)筆記——內(nèi)核移植與文件系統(tǒng)構(gòu)建"中記錄rootfs文件系統(tǒng)構(gòu)建時(shí)漏掉了一步,沒(méi)有在etc/sysconfig/目錄下創(chuàng)建HOSTNAME文件,可以手動(dòng)添加HOSTNAME文件,其內(nèi)容為主機(jī)名稱(chēng),本文使用了tq335x。在rootfs目錄可以通過(guò)如下指令創(chuàng)建:

          1. echotq335x>etc/sysconfig/HOSTNAME
          本文在已制作好的rootfs基礎(chǔ)上,制作ramdisk。

          (2)制作ramdisk

          制作ramdisk的方式很多,最方便的是使用指令genext2fs。ubuntu操作系統(tǒng)上可以通過(guò)apt-get工具直接安裝genext2fs工具:

          1. sudoapt-getinstallgenext2fs
          其它操作系統(tǒng)也有類(lèi)似的管理工具,這里就不一一列舉了,下面使用genext2fs打包rootfs目錄。命令如下:
          1. genext2fs-b4096-drootfs/ramdisk
          然后使用gzip命令壓縮ramdisk:
          1. gzip-9-framdisk
          執(zhí)行完成該命令后可以得到文件ramdisk.gz。

          由于u-boot啟動(dòng)內(nèi)核使用的ramdisk需要有u-boot的image頭,故需要使用編譯u-boot時(shí)生成的工具mkimage將ramdisk.gz制作為ramdisk.img。其中,工具mkimage位于u-boot的tools目錄下,制作ramdisk.img的指令如下:

          1. u-boot-2014.10/tools/mkimage-Aarm-Olinux-Tramdisk-Cnone-a0x88080000-n"ramdisk"-dramdisk.gzramdisk.img
          命令中mkimage前的路徑根據(jù)自己實(shí)際執(zhí)行的路徑指定即可。

          這樣,就完成了u-boot可以使用的ramdisk制作,然后將ramdisk.img拷貝到SD卡的boot目錄下即可。

          (3)掛載ramdisk

          老式的ATAGS方式啟動(dòng)內(nèi)核時(shí)使用ATAG傳遞bootargs給內(nèi)核,由于本文使用的dtb方式啟動(dòng)內(nèi)核,故采取dtb的chosen方式傳遞bootargs給內(nèi)核。

          Step1: 修改內(nèi)核配置

          1. makeARCH=armmenuconfig
          進(jìn)入配置項(xiàng):
          1. Bootoptions--->
          按N鍵取消配置項(xiàng):
          1. []UseappendeddevicetreeblobtozImage(EXPERIMENTAL)
          官方內(nèi)核默認(rèn)啟用了該項(xiàng)配置。啟用該項(xiàng)配置后內(nèi)核兼容老式的ATAGS方式內(nèi)核啟動(dòng),關(guān)閉后則使用新式的dtb方式啟動(dòng),故此處禁用了此項(xiàng)配置。

          按ESC保存配置后退出menuconfig畫(huà)面,重新編譯內(nèi)核:

          1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi--j8
          Step2:添加bootargs到dtb

          切換到內(nèi)核目錄arch/arm/boot/dts/,拷貝am335x-evm.dts為tq335x.dts:

          1. cpam335x-evm.dtstq335x.dts
          打開(kāi)tq335x.dts,在memory項(xiàng)后通過(guò)chosen方式添加bootargs,添加內(nèi)容如下:
          1. memory{
          2. device_type="memory";
          3. reg=<0x800000000x10000000>;/*256MB*/
          4. };
          5. chosen{
          6. bootargs="console=ttyO0,115200n8root=/dev/ram0";
          7. };
          8. ...
          其中chosen節(jié)點(diǎn)是新添加的,memory節(jié)點(diǎn)是原有的。

          接下來(lái)重新編譯dtb:

          1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi-tq335x.dtb
          將新編譯得到的tq335x.dtb拷貝到SD的boot目錄下。至此,準(zhǔn)備工作就完成了,下面我們使用新制作的ramdisk.img和tq335x.dtb啟動(dòng)內(nèi)核。

          Step3:使用新制作的ramdisk.img和tq335x.dtb啟動(dòng)內(nèi)核

          將SD插到開(kāi)發(fā)板上,給開(kāi)發(fā)板上電(開(kāi)發(fā)板切換到SD卡啟動(dòng)模式),可以通過(guò)按任意鍵打斷內(nèi)核啟動(dòng)進(jìn)入u-boot命令模式(由于之前沒(méi)有配置u-boot的bootcmd環(huán)境變量,而默認(rèn)的u-boot環(huán)境無(wú)法啟動(dòng)內(nèi)核,故,開(kāi)發(fā)板上電后不按鍵的話(huà)也會(huì)進(jìn)入u-boot的命令行模式)。

          首先是加載內(nèi)核到DRAM:

          1. loadmmc0${loadaddr}/boot/zImage
          其中,${loadaddr}在u-boot的環(huán)境變量中默認(rèn)指定為0x82000000,這里可以直接打數(shù)字。

          然后是加載dtb到DRAM:

          1. loadmmc0${fdtaddr}/boot/tq335x.dtb
          ${fdtaddr}的默認(rèn)值是0x88000000。


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

          關(guān)鍵詞: AM335xTQ335x掛載Ramdis

          評(píng)論


          技術(shù)專(zhuān)區(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); })();