新聞中心

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

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

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

        (1)制作根文件系統

        本文引用地址:http://www.104case.com/article/201611/322819.htm

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

        S5PV210(TQ210)學習筆記——內核移植與文件系統構建

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

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

        (2)制作ramdisk

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

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

        由于u-boot啟動內核使用的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前的路徑根據自己實際執行的路徑指定即可。

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

        (3)掛載ramdisk

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

        Step1: 修改內核配置

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

        按ESC保存配置后退出menuconfig畫面,重新編譯內核:

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

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

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

        接下來重新編譯dtb:

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

        Step3:使用新制作的ramdisk.img和tq335x.dtb啟動內核

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

        首先是加載內核到DRAM:

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

        然后是加載dtb到DRAM:

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


        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 油尖旺区| 汉沽区| 景德镇市| 上高县| 永城市| 华池县| 湖南省| 晴隆县| 子洲县| 宿州市| 崇义县| 广安市| 特克斯县| 托里县| 黄石市| 孝感市| 永春县| 沾益县| 罗定市| 济南市| 漠河县| 栾城县| 湘西| 苍梧县| 五寨县| 贞丰县| 阿城市| 阳原县| 梁平县| 香河县| 武冈市| 农安县| 宜章县| 汽车| 桐城市| 崇义县| 平南县| 宁明县| 罗平县| 洱源县| 蓬安县|