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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于XIP技術(shù)的ARM Linux系統(tǒng)的研究與移植

          基于XIP技術(shù)的ARM Linux系統(tǒng)的研究與移植

          作者: 時(shí)間:2012-11-26 來(lái)源:網(wǎng)絡(luò) 收藏

            3.3 Bootloader 的修改

            Bootloader 分為兩個(gè)階段,第1 階段采用匯編語(yǔ)言實(shí)現(xiàn)。第2 階段采用C 語(yǔ)言實(shí)現(xiàn)。除了進(jìn)行普通Bootloader 所需的片級(jí)和板級(jí)初始化之外,針對(duì)內(nèi)核XIP 執(zhí)行方式所做的主要工作有以下2 個(gè):

            1:通過(guò)查看體系Makefile 得到XIP 方式的DATAADDR 和TEXTADDR。

            2:建立初始頁(yè)表時(shí),為.data 和.bss 段建立好3MB 連續(xù)空間以存放xipImage。

            4 基于XIP 的 Linux 內(nèi)核移植

            本文采用的標(biāo)準(zhǔn) Linux 內(nèi)核2.6.12 版本不支持在XSBASE255 上直接運(yùn)行,需要根據(jù)開(kāi)發(fā)板硬件體系結(jié)構(gòu)進(jìn)行相關(guān)移植和訂制裁減工作。

            4.1 內(nèi)核鏈接腳本

            生成內(nèi)核映像的鏈接腳本是在 arch/arm/kernel/vmlinux.lds 中,而vmlinux.lds 是由同目錄下的vmlinux.lds.S 生成,查看腳本內(nèi)容,可以獲知內(nèi)核映像各節(jié)的虛擬地址取決于內(nèi)核符號(hào)TEXTADDR和DATAADDR,以及各節(jié)的大小。對(duì)于xipImage,其.init,.text 和__ext_table都是在NOR Flash 上,只有.data 節(jié).bss 節(jié)在主存上,因而根據(jù)配置過(guò)程中設(shè)置的CONFIG_XIP_PHYS_ADDR 值,設(shè)置TEXTADDR 為0xbf000000,而DATAADDR 則設(shè)置為0xC0008000,在內(nèi)核的CPU 片級(jí)初始化過(guò)程中的頁(yè)表建立過(guò)程中,TEXTADDR 指向NORFlash,而DATAADDR 指向主存SDRAM 中,把.init 段鏈接到.data 段之前,拷貝到SDRAM中,執(zhí)行完畢后,回收這部分主存,而內(nèi)核的.text 段以Kernel XIP 方式運(yùn)行[4][5]。

            4.2 移植源代碼

            下面闡述在 XSBase255 開(kāi)發(fā)板上以XIP 運(yùn)行內(nèi)核的移植過(guò)程[6]。

            4.2.1 添加機(jī)器平臺(tái)支持、目錄框架及內(nèi)核配置的支持

            4.2.2 源代碼文件移植,為實(shí)現(xiàn)XIP,在arch/arm/mach-pxa/Makefile.boot 中定義內(nèi)核映像text節(jié)的物理地址,即ZRELADDR 的地址值 zreladdr-y := 0xa0008000

            4.2.3 閃存分區(qū)的移植

            本文采用的是 NOR Flash,根據(jù)開(kāi)發(fā)板上閃存的起始地址和大小劃分為Bootloader,Kernel , Rootfs 等四個(gè)不同部分。其初始地址和大小分別分Persistant storage 0x01000000-0x02000000, Initial ramdisk image 0x00300000-0x01000000,Kernel Image0x00020000-0x00300000 ,Bootloader 0x00000000-0x00020000

            4.3 配置內(nèi)核

            根據(jù)開(kāi)發(fā)板移植好特定代碼后,本節(jié)對(duì)內(nèi)核進(jìn)行配置,主要通過(guò)make menuconfig 命令啟動(dòng)的圖形交互界面進(jìn)行。

            4.3.1 指定內(nèi)核CPU 體系和交叉編譯器及選擇系統(tǒng)類(lèi)型

            4.3.2 啟動(dòng)XIP 支持

            在菜單 Boot options 中,選中Kernel Execute-In-Place from rom,并設(shè)置好XIP 內(nèi)核的物理位置0x00380000。

            4.3.3 設(shè)置啟動(dòng)參數(shù)

            同樣在 Boot options 中,設(shè)置啟動(dòng)參數(shù),如圖2 所示。

            4.3.4 選擇串口驅(qū)動(dòng)和控制臺(tái)驅(qū)動(dòng)

            4.3.5 啟動(dòng)MTD 和NOR Flash 分區(qū)至此內(nèi)核配置完畢,使用 make xipImage,獲得XIP 內(nèi)核映像。

            5 文件系統(tǒng)的制作

            為了支持 XIP,需要選擇Linear CRAMFS 作為根文件系統(tǒng)。系統(tǒng)使用過(guò)程中的其他需要,可以采用其他類(lèi)型的文件系統(tǒng),如系統(tǒng)的臨時(shí)文件可以采用RAMFS/TMPFS,系統(tǒng)中可修改的配置數(shù)據(jù)可以采用JFFS2 文件系統(tǒng)掛載。最終定制的文件系統(tǒng)類(lèi)型如表1 所示:




            本文采用嵌入式系統(tǒng)常用的 Busybox 方法制作根文件系統(tǒng)映像[7]。先編譯生成系統(tǒng)應(yīng)用程序,再建立完整的頂層目錄和必要的其他文件。然后使用的Linux2.6 自帶的mkfs.cramfs工具制作rootfs_cramfs.img 映像。至此根文件系統(tǒng)制作完畢。



          評(píng)論


          相關(guān)推薦

          技術(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); })();