<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  1 研究背景

本文引用地址:http://dyxdggzs.com/article/217881.htm

   Linux 嵌入式系統在不同應用領(lǐng)域應用的日趨廣泛,它們存儲容量相對較小、系統的電能消耗及啟動(dòng)速度要求嚴格。為了滿(mǎn)足它們對啟動(dòng)速度和低能耗的要求,本文采用內核XIP 方式運行 Linux 系統,避免把內核從Nor Flash 拷貝到主存SDRAM 空間,讓內核運行在低功耗的NOR Flash 上,節省系統啟動(dòng)時(shí)間,降低系統對SDRAM 的需要,減少電能消耗,使產(chǎn)品能夠持續使用更長(cháng)時(shí)間。

  2 開(kāi)發(fā)工具及相關(guān)技術(shù)介紹

  2.1 硬件平臺

  本文選擇深圳億道公司的XSBase255 開(kāi)發(fā)板,其處理器采用的是Intel? XScalePXA255,400MHz,SDRAM 為Samsung 64Mbyte,Flash 為Intel? strata flash 32Mbyte。

  2.2 軟件工具

  Linux-2.6.12 linux-2.6.13-kgdb-2.3 Cramfs-linear-xip-4-patch busybox-1.10.0 ramust-arm2.3XIP 技術(shù)介紹XIP 全稱(chēng)eXecute-In-Place(就地執行),是一種代碼執行方式,分為Kernel XIP[1]和Application XIP[2]兩種。Kernel XIP 適用于操作系統啟動(dòng)過(guò)程,而Application XIP 主要用于系統啟動(dòng)后應用程序的執行。

  Kernel XIP 原理如下,內核映像在Flash 設備上執行以后,只把映像中要讀寫(xiě)的.data和.bss 拷貝到SDRAM 主存中,同時(shí)設置好系統的MMU,內核運行過(guò)程中,代碼段.text 指向Flash 空間,.data 和.bss 指向SDRAM 主存空間。相對于全映射的執行方式,系統節省了解壓縮和拷貝代碼段的時(shí)間,節省了代碼段占用的RAM 主存空間。


  Application XIP 原理與Kernel XIP 類(lèi)似,管理NOR Flash 空間的文件系統必須具有線(xiàn)性的一致的地址空間,可執行的應用程序的代碼段在NOR Flash 中線(xiàn)性連續,且地址能夠從文件系統知曉。操作系統執行應用程序時(shí),系統的程序加載器(loader)在建立虛擬進(jìn)程空間后,只需要把應用程序的數據段和未初始化段等要讀寫(xiě)的段裝入SDRAM 主存空間,并建立好映射,而對于可執行文件的只讀的代碼段空間則無(wú)需裝入,直接映射到NOR Flash 設備上應用程序文件的代碼段,程序執行時(shí)直接從NOR Flash 設備上獲取代碼執行。

  3 Linux 啟動(dòng)過(guò)程分析

  開(kāi)發(fā)板上電啟動(dòng)后,首先執行Bootloader 程序,Bootloader 進(jìn)行初步的環(huán)境初始化并準備好內核參數。對于本文采用的內核XIP 執行方式,Bootloader 不需要從Flash 設備中解壓拷貝內核映像到SDRAM主存中,運行內核映像后,把需要讀寫(xiě)操作的數據段拷貝到SDRAM主存的適當位置,并進(jìn)行片級初始化、板級初始化等內核運行的硬件環(huán)境初始化工作,最后是根據內核參數執行內核各個(gè)子系統的初始化。

  3.1 執行映像生成過(guò)程及關(guān)系

  生成內核映像的一般過(guò)程是,使用 make menuconfig 配置內核,再使用make zImage 或make bzImage 生成壓縮的內核映像zImage 或bzImage,這樣生成的是壓縮的內核映像。本文通過(guò)配置CONFIG_XIP_KERNEL,使系統生成xipImage,其生成圖如圖2 所示:


  3.2 獲得內核啟動(dòng)過(guò)程函數關(guān)系調用圖

  這里使用 KFT 工具來(lái)獲得。KFT 全稱(chēng)Kernel Function Trace[3],主要功能是跟蹤函數調用事件。KFT 收集調用數據后,把數據保存在/proc/kft_data,在XScale 平臺上配置KFT 時(shí),KFT 需要使用cmpxchg 函數,而原始內核不支持,所以需要修改源代碼,添加__cmpxchg_u3和__cmpxchg 函數的聲明和定義,以及宏cmpxchg 和arch_align_stack(x)。準備工作完成后,下載到開(kāi)發(fā)板上運行并獲取原始跟蹤數據。然后,調用addr2sym 工具對原始跟蹤數據進(jìn)行格式化,可以獲取函數調用順序圖,再使用kd 工具將獲得的內容格式化為樹(shù)狀關(guān)系圖,最終獲得內核啟動(dòng)過(guò)程函數關(guān)系調用圖kft.tree,為下面的工作提供很好的指引和幫助。


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

關(guān)鍵詞: XIP技術(shù) ARM Linux系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>