国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式Linux系統(tǒng)在S3C2410上的移植實(shí)現(xiàn)

2008-04-26 03:32趙瑞娟李敬兆
關(guān)鍵詞:嵌入式操作系統(tǒng)移植

趙瑞娟 李敬兆

摘 要: 首先對(duì)嵌入式Linux操作系統(tǒng)內(nèi)核和S3C2410處理器進(jìn)行了簡單介紹,在此基礎(chǔ)上,對(duì) 系統(tǒng)引導(dǎo)程序進(jìn)行了設(shè)計(jì),重點(diǎn)介紹了將Linux移植到S3C2410處理器的步驟和方法,并對(duì)移 植過程的關(guān)鍵部分進(jìn)行了詳細(xì)闡述。編譯生成的內(nèi)核在嵌入式系統(tǒng)中運(yùn)行穩(wěn)定,結(jié)果證明方 法可行,對(duì)于開發(fā)其它嵌入式系統(tǒng)具有參考意義。

關(guān)鍵詞:嵌入式操作系統(tǒng);移植;Linux;S3C2410

中圖分類號(hào): TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-1098(2008)03-0073-04

1 Linux內(nèi)核和實(shí)驗(yàn)系統(tǒng)簡介

嵌入式操作系統(tǒng)作為大多數(shù)嵌入式應(yīng)用系統(tǒng)的軟件平臺(tái),它管理著系統(tǒng)的資源,為應(yīng)用 軟件提供各種必要的服務(wù)。在嵌入式應(yīng)用系統(tǒng)中使用嵌入式操作系統(tǒng),已是大勢(shì)所趨。目前 嵌入式操作系統(tǒng)的種類繁多,但Linux以其源代碼開放和可移植性強(qiáng)等特點(diǎn),被廣泛使用。 本文將介紹如何將內(nèi)核版本為2.4.18的Linux移植到基于ARM920T的S3C2410處理器上。

1.1 Linux操作系統(tǒng)內(nèi)核

Linux操作系統(tǒng)主要由內(nèi)核、shell、文件結(jié)構(gòu)組成,其中內(nèi)核是靈魂,負(fù)責(zé)整個(gè)系統(tǒng)的 內(nèi)存管理、進(jìn)程調(diào)度和文件管理。Linux內(nèi)核與大部分UNIX內(nèi)核一樣是單內(nèi)核體系結(jié)構(gòu)的, 能夠根據(jù)需要定制內(nèi)核映像的尺寸,具有很大靈活性,不需要重新編譯內(nèi)核和引導(dǎo)就能檢驗(yàn) 新的內(nèi)核組件,這個(gè)特性對(duì)于嵌入式而言是非常有好處的,方便用戶構(gòu)筑自己的個(gè)人內(nèi)核。 Linux內(nèi)核有五個(gè)主要的子系統(tǒng)組成:進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進(jìn) 程間通信。

本文將對(duì)內(nèi)核版本為2.4.18的Linux進(jìn)行移植,其內(nèi)核代碼分布如圖1所示。

(1) /arch目錄包含了目前Linux支持的硬件結(jié)構(gòu)——如i386、alpha、arm等的內(nèi)核代碼;

(2) /drives目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序;

(3) /fs目錄包含了所有的文件系統(tǒng)的代碼;

(4) /include目錄包含了建立內(nèi)核代碼所需要的大部分庫文件,這個(gè)模塊利用其它模塊重建 內(nèi)核;

(5) /init目錄包含了內(nèi)核的初始化代碼,內(nèi)核從此處運(yùn)行;

(6) /ipc目錄包含了進(jìn)程間通信代碼;

(7) /kernel子目錄包含了主內(nèi)核代碼;

(8) /mm目錄包含所有獨(dú)立于CPU體系結(jié)構(gòu)的內(nèi)存管理代碼;

(9) /net目錄包含了和網(wǎng)絡(luò)相關(guān)的代碼,如ipv4、ipv6等。

一般在每個(gè)目錄下都有一個(gè).depend文件和一個(gè)Makefile文件,這兩個(gè)文件都是編譯時(shí)使用 的輔助文件。

1.2 S3C2410處理器

S3C2410是SAMSUNG公司基于ARM920T處理器內(nèi)核開發(fā)的一款16/32位嵌入式處理器,運(yùn)行 頻率高達(dá)200多MHz,具有MMU和高速緩存等豐富片上資源,可以廣泛用于PDA、internet設(shè)備 和手持式設(shè)備。其片上集成的功能主要包括以下幾個(gè)方面:

(1) 1.8V ARM 內(nèi)核,3.3V存儲(chǔ)器,3.3V外部I/O, 具有16kB指令緩存/16kB數(shù)據(jù)緩存和MMU 的微處理器;

(2) 外部存儲(chǔ)控制器(SDRAM 控制和片選邏輯);

(3) LCD控制器(支持上到4k色的STN和256k色的TFT), I通道LCD專 用DMA;

(4) 具有外部請(qǐng)求引腳的4通道DMA;

(5) 3通道UART, 2通道SPI;

(6) 1通道IIC總線控制器,1通道US總線控制器;

(7) 1.0版本的SD主機(jī)接口和兼容的2-11版本的Multi-Media卡協(xié)議;

(8) 2端口 USB 主機(jī),1端口 USB 設(shè)備(USB1.1);

(9) 4通道PWM定時(shí)器,1通道內(nèi)部定時(shí)器;

(10) 看門狗電路;

(11) 117個(gè)通用I/O口,24通道外部中斷源;

(12) 電源控制:常規(guī)、緩慢、空閑和斷電模式;

(13) 8通道10位ADC和觸摸屏接口;

(14) 具有日歷功能的實(shí)時(shí)時(shí)鐘RTC;

(15) 具有鎖相環(huán)的片上時(shí)鐘發(fā)生器。

2 將Linux移植到S3C2410

2.1 移植思路

首先要為Linux設(shè)計(jì)一個(gè)BootLoader,通過BootLoader來初始化硬件,引導(dǎo)Linux運(yùn)行。 Bootloader設(shè)計(jì)可以在ads中實(shí)現(xiàn)。然后,針對(duì)硬件環(huán)境和設(shè)計(jì)的 BootLoader修改Linux內(nèi) 核。接下來,在Linux操作系統(tǒng)下建立交叉編譯環(huán)境。最后,配置、編譯、連接Linu x,下 載編譯得到的映像文件到Flash,通過BootLoader 來啟動(dòng)嵌入式操作系統(tǒng)Linux。

2.2 Boot Loader的設(shè)計(jì)

引導(dǎo)加載程序通常稱為Boot Loader,就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序 。通過這段小程序,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而建立適當(dāng)?shù)南到y(tǒng)軟硬件 環(huán)境,為調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。

本系統(tǒng)Boot Loader的第一階段主要完成基本的硬件初始化,用匯編語言實(shí)現(xiàn):①關(guān)閉w atchdog,屏蔽所有中斷;②設(shè)置處理器時(shí)鐘和工作頻率,CPU工作頻率為200 M Hz;③初始化外部寄存器;④初始化堆棧指針SP;⑤拷貝Boot Loader的第二階段到RAM空間 中,使用一個(gè) 跳轉(zhuǎn)語句跳轉(zhuǎn)到第二階段的main入口函數(shù)。在完成以上操作后就為main函數(shù)的運(yùn)行建立起了 一個(gè)基本的環(huán)境。

第二階段用C語言完成:①通用I/O口的設(shè)置;②完成內(nèi)存映射初始化和內(nèi)存管理單元初 始化:men璤map璤init(); mmu璤init(); 這兩個(gè)函數(shù)在/arch/s3c2410/mmu.c中;③初 始化mtd設(shè)備:mtd璤dev璤init();這個(gè)函數(shù)在/drivers/mtd/maps/s3c2410璤flash.c中 ;④拷貝flash中的kernel映像和根文件系統(tǒng)映像到RAM空間中;⑤跳轉(zhuǎn)到內(nèi)核的第 一條指令 處。跳轉(zhuǎn)時(shí)需要滿足下列條件:R0為0;R1為機(jī)器類型ID;禁止中斷(IRQ和FIQ);C PU設(shè)置 為SVC模式(SVC是供操作系統(tǒng)使用的一種保護(hù)模式);關(guān)閉MMU;關(guān)閉數(shù)據(jù)Cache。至此Boot Loader的任務(wù)結(jié)束。

2.3 Linux內(nèi)核的修改

假定內(nèi)核代碼放在/usr/src/Linux-2.4.18目錄下

(1) 打開根目錄下的Makefile文件 此文件用來指定編譯規(guī)則,例如哪些需要編譯,哪些 需要先編譯。

指定目標(biāo)平臺(tái):Arch=arm;

指定交叉編譯器:添加CROSS璤COMPILE=arm-linux-。

(2) 打開/arch/arm目錄下的Makefile文件 啟動(dòng)代碼的產(chǎn)生需要通過此文件,由于2.4內(nèi) 核還沒有對(duì)S3C2410的支持,在此添加如下代碼:

ifeq((CONFIG璤ARCH璤S3C2410),y)

TEXTADDR=0xC0008000

MACHINE=s3c2410

Endif

TEXTADDR是內(nèi)核的最終運(yùn)行地址,該位置一般在RAM區(qū)起始地址偏移0x8000處(RAM起始地址 到偏移0x8000之間的32KB空間中存放一些全局?jǐn)?shù)據(jù)結(jié)構(gòu)如啟動(dòng)參數(shù)、內(nèi)存頁表等信息)。

猜你喜歡
嵌入式操作系統(tǒng)移植
典型實(shí)時(shí)嵌入式操作系統(tǒng)應(yīng)用分析
基于FreeRTOS系統(tǒng)和LwIP協(xié)議棧的網(wǎng)絡(luò)通訊
西方音樂元素在二胡演奏中的移植
“移植”瘦人糞便能減肥?
基于嵌入式操作系統(tǒng)的工業(yè)采集板設(shè)計(jì)
應(yīng)用服務(wù)型人才培養(yǎng)體系下的嵌入式操作系統(tǒng)教學(xué)改革探索
計(jì)算機(jī)嵌入式操作系統(tǒng)研究
绿春县| 翼城县| 防城港市| 承德市| 天峻县| 文昌市| 伊金霍洛旗| 鄂伦春自治旗| 民乐县| 巴东县| 商城县| 兴海县| 民丰县| 泰顺县| 大理市| 高平市| 高邮市| 淮安市| 巢湖市| 金山区| 木兰县| 孟州市| 湘乡市| 招远市| 上虞市| 宜兴市| 辽阳县| 西盟| 岑溪市| 四会市| 伊春市| 云龙县| 松江区| 茂名市| 台中县| 安阳县| 横山县| 河北区| 乌拉特中旗| 德清县| 五大连池市|