新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > AM335x(TQ335x)學習筆記——掛載Ramdisk

AM335x(TQ335x)學習筆記——掛載Ramdisk

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

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

本文引用地址:http://m.butianyuan.cn/article/201611/322819.htm

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

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

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

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

(2)制作ramdisk

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

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

由于u-boot啟動內(nèi)核使用的ramdisk需要有u-boot的image頭,故需要使用編譯u-boot時生成的工具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ù)自己實際執(zhí)行的路徑指定即可。

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

(3)掛載ramdisk

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

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

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

按ESC保存配置后退出menuconfig畫面,重新編譯內(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
打開tq335x.dts,在memory項后通過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é)點是新添加的,memory節(jié)點是原有的。

接下來重新編譯dtb:

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

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

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

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

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

然后是加載dtb到DRAM:

  1. loadmmc0${fdtaddr}/boot/tq335x.dtb
${fdtaddr}的默認值是0x88000000。


上一頁 1 2 3 下一頁

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

評論


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

關(guān)閉