基於ARM的嵌入式linux 核心的裁剪與移植

2021-05-17 14:10:48 字數 3153 閱讀 4442

0 引言

微處理器的產生為**低廉、結構小巧的cpu和外設的連 接提供了穩定可靠的硬體架構,這樣,限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。儘管從八十年代末開始,已經陸續出現了一些嵌入式作業系統(比較著 名的有vxwork、psos、neculeus和windows ce)。但這些專用作業系統都是商業化產品,其高昂的**使許多低端產品的小公司望而卻步;而且,源**封閉性也大大限制了開發者的積極性。而linux 的開放性,使得許多人都認為linux非常適合多數intemet裝置。linux作業系統可以支援不同的裝置和不同的配置。linux對廠商不偏不倚, 而且成本極低,因而很快成為用於各種裝置的作業系統。嵌入式linux是大勢所趨,其巨大的市場潛力與醞釀的無限商機必然會吸引眾多的廠商進入這一領 域。

1 嵌入式linux作業系統

linux為嵌入作業系統提供了乙個極有吸引力的選擇,它是個和unix相似、以核心為基礎、全記憶體保護、多工、多程序的作業系統。可以支援廣泛的計算 機硬體,包括x86、alpha、sparc、mips、ppc、arm、nec、motorola等現有的大部分晶元。linux的程式原始碼全部公開, 任何人都可以根據自己的需要裁剪核心,以適應自己的系統。文章以將linux移植到arm920t核心的s3c2410處理器晶元為例,介紹了嵌入式 linux核心的裁剪以及移植過程,文中介紹的基本原理與方法技巧也可用於其它晶元。

2 核心移植過程

2.1 建立交叉編譯環境

交叉編譯的任務主要是在乙個平台上生成可以在另乙個平台上執行的程式**。不同的cpu需要有不同的編譯器,交叉編譯如同翻譯一樣,它可以把相同的程式**翻譯成不同的cpu對應語言。

交叉編譯器完整的安裝涉及到多個軟體安裝,最重要的有binutils、gcc、glibc三個。其中,binutils主要用於生成一些輔助工 具;gcc則用來生成交叉編譯器,主要生成arm—linux—gcc交叉編譯工具;glibc主要是提供使用者程式所使用的一些基本的函式庫。

自行搭建交叉編譯環境通常比較複雜,而且很容易出錯。本文使用的是開發板自帶的交叉編譯器,即cross一3.3.4.交叉編譯器,該編譯只需將光碟中的 arm—linux一3.3.4.bar.bz2用tar ixvf arm—linux一3.3.4.bar.bz2命令解壓到/usr/local/arm下即可。

2.2 修改makefile

修改核心目錄樹根下的makefile時,可先指明交叉編譯器。設計時,可向makefile中新增如下內容:

arch ?=arm

cross_compile?=arm-linux-然後設定path環境變數,使其可以找到其交叉編譯工具鏈,然後執行vi~/.bashrc,再新增如下內容:

export path=/usr/local/arln—linux一3.4.4/bin:$path

2.3 設定flash分割槽

此處一共要修改3個檔案,分別如下:

(1)在arch/arm/machs3c2410/devs.c檔案中新增如下內容:

#include

#include

#include

然後再建立nand flash分割槽表;同時建立nand f1ash晶元支援,最後加入nand flash晶元並支援到nand flash驅動。

另外,還要修改arch/arm/machs3c2410/devs.c檔案中的s3c_device_nand結構體變數,同時新增對dev成員的賦值。

(2)指定啟動時初始化

核心啟動時,可以依據對分割槽的設定進行初始配置,然後修改arch/am4mach—s3c2410/machsmdk2410.e檔案下的smdk2410_devices,指明初始化時包括在前面所設定的flash分割槽資訊,並新增如下語句:

&s3c_device_nand,

(3)禁止flash ecc校驗

核心一般都是通過uboot寫到nand flash的。uboot則通過軟體ecc演算法來產生ecc校驗碼,這與核心校驗的ecc碼不一樣,核心中的ecc碼是由s3c2410中nand flash控制器產生的。所以,這裡選擇禁止核心ecc校驗。

修改drivers/mtd/nand/s3c2410.c 下的s3c2410_nand_init_chip ()函式,可在該函式體最後加上如下一條語句:

chip->eccmode=nand_ecc_none;

3 核心配置過程

3.1 支援啟動時掛載devfs

為了使核心支援devfs以及在啟動且在/sbin/init執行之前能自動掛載/dev為devfs檔案系統,應修改fs/keonfig檔案,找到menu「pseudo filesystems」並新增如下語句:

3.2 配置核心產生.config檔案

linux核心裁減的配置選單命令有好幾個配置方法,這幾個方法實現的功能類似,只是與使用者的互動介面不同。其中:

make config是基於文字的、最為傳統的配置介面,可進入命令列;

make menuconfig是基於文字選單的配置介面;

make xconfig是基於圖形視窗模式的配置介面,在xwindow下推薦使用該介面。

在這3種方法中,make menuconfig使用最為廣泛,這裡選用的是make menuconfig的配置方法。相應的配置有三種選擇,它們分別代表的含義如下:

「y」:將該功能編譯進核心;

「n」:不將該功能編譯進核心;

「m」:將該功能編譯成可以在需要時動態插入到核心中的模組。

執行make menuconfig時,在smdk2410_defeonfig基礎上,其所增刪的核心配置項如下:

(1)增加對模組的支援

loadable module support--->

[*]enable loadable module support

[*]automatic kernel module loading

system type——>

5 結束語

本文以將linux移植到arm920t核心的s3c2410處理器晶元為例,介紹了嵌入式linux核心裁剪以及移植的過程,並對移植中的關鍵技術和重 要步驟給出了詳細的說明。移植後的linux系統在開發板上執行穩定,效能良好。本文的操作過程對嵌入式linux系統在其它處理器上的移植也具有參考意 義。

基於ARM的Qt Creator嵌入式開發環境搭建

平台 ubnutu10.04 交叉編譯器 arm linux gcc 3.4.1 在qtqt everywhere opensource src 4.8.1.tar 解壓為3 份,可分別命名為 qt x11 qt x86 qt armqt x11版本可以產生 qt開發工具 designer qt介面...

嵌入式,ARM掃盲

炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...

ARM嵌入式實驗

問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...