新聞中心

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

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

作者: 時間:2012-11-26 來源:網(wǎng)絡 收藏

  1 研究背景

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

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

  2 開發(fā)工具及相關技術介紹

  2.1 硬件平臺

  本文選擇深圳億道公司的XSBase255 開發(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 技術介紹XIP 全稱eXecute-In-Place(就地執(zhí)行),是一種代碼執(zhí)行方式,分為Kernel XIP[1]和Application XIP[2]兩種。Kernel XIP 適用于操作系統(tǒng)啟動過程,而Application XIP 主要用于系統(tǒng)啟動后應用程序的執(zhí)行。

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


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

  3 Linux 啟動過程分析

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

  3.1 執(zhí)行映像生成過程及關系

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


  3.2 獲得內(nèi)核啟動過程函數(shù)關系調用圖

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


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉