色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          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ò) 收藏

            1 研究背景

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

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

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

            2.1 硬件平臺(tái)

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

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


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

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

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

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

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


            3.2 獲得內(nèi)核啟動(dòng)過(guò)程函數(shù)關(guān)系調(diào)用圖

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


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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉