嵌入式Linux系統(tǒng)在S3C2410上的移植實現(xiàn)_第1頁
嵌入式Linux系統(tǒng)在S3C2410上的移植實現(xiàn)_第2頁
嵌入式Linux系統(tǒng)在S3C2410上的移植實現(xiàn)_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式Linux系統(tǒng)在S3C241 0上的移植 實現(xiàn)1 Linux 內(nèi)核和實驗系統(tǒng)簡介嵌入式操作系統(tǒng)作為大多數(shù)嵌入式應(yīng)用系統(tǒng)的軟件平臺, 它 管理著系統(tǒng)的資源,為應(yīng)用 軟件提供各種必要的服務(wù)。在嵌入 式應(yīng)用系統(tǒng)中使用嵌入式操作系統(tǒng),已是大勢所趨。目前 嵌入 式操作系統(tǒng)的種類繁多, 但 Linux 以其源代碼開放和可移植性強 等特點, 被廣泛使用。 本文將介紹如何將內(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é)整個系統(tǒng)的 內(nèi)存管理、 進

2、程調(diào)度和文件管理。 Linux內(nèi)核與大部分UNIX內(nèi)核一樣是單內(nèi)核體系結(jié)構(gòu)的,能夠根據(jù)需要定制內(nèi)核映像的尺寸, 具有很大靈活性, 不需要重新編 譯內(nèi)核和引導(dǎo)就能檢驗 新的內(nèi)核組件,這個特性對于嵌入式而 言是非常有好處的,方便用戶構(gòu)筑自己的個人內(nèi)核。 Linux 內(nèi) 核有五個主要的子系統(tǒng)組成:進程調(diào)度、內(nèi)存管理、虛擬文件系 統(tǒng)、網(wǎng)絡(luò)接口和進 程間通信。本文將對內(nèi)核版本為 2.4.18 的 Linux 進行移植,其內(nèi)核代 碼分布如圖 1 所示。(1) /arch 目錄包含了目前 Linux 支持的硬件結(jié)構(gòu)如 i386 、alpha 、arm 等的內(nèi)核代碼;(2) /drives目錄包含了內(nèi)核中所有

3、的設(shè)備驅(qū)動程序;(3) /fs 目錄包含了所有的文件系統(tǒng)的代碼;(4) /include目錄包含了建立內(nèi)核代碼所需要的大部分庫文件,這個模塊利用其它模塊重建 內(nèi)核;(5) /init 目錄包含了內(nèi)核的初始化代碼, 內(nèi)核從此處運行;(6) /ipc 目錄包含了進程間通信代碼;(7) /kernel 子目錄包含了主內(nèi)核代碼;(8) /mm目錄包含所有獨立于 CPU體系結(jié)構(gòu)的內(nèi)存管理代碼;(9) /net 目錄包含了和網(wǎng)絡(luò)相關(guān)的代碼, 如 ipv4 、ipv6 等。 一般在每個目錄下都有一個 .depend 文件和一個 Makefile文件,這兩個文件都是編譯時使用 的輔助文件。1.2 S3C241

4、0 處理器S3C2410是SAMSUN公司基于ARM920處理器內(nèi)核開發(fā)的一款16/32位嵌入式處理器,運行 頻率高達200多MHz具有MMU 和高速緩存等豐富片上資源, 可以廣泛用于 PDA、internet 設(shè)備 和手持式設(shè)備。其片上集成的功能主要包括以下幾個方面:(1) 1.8V ARM 內(nèi)核, 3.3V 存儲器, 3.3V 外部 I/O, 具有 16kB指令緩存/16kB數(shù)據(jù)緩存和MMU的微處理器;(2) 外部存儲控制器(SDRAM控制和片選邏輯);(3) LCD控制器(支持上到4k色的STN和 256k色的TFT), I通道LCD專用DMA(4) 具有外部請求引腳的 4 通道 DMA

5、;(5) 3 通道 UART, 2 通道 SPI;(6) 1通道IIC總線控制器,1通道US總線控制器;(7) 1.0 版本的SD主機接口和兼容的2-11版本的Multi-Media 卡協(xié)議;(8) 2 端口 USB 主機,1 端口 USB 設(shè)備(USB1.1);(9) 4通道PWM定時器,1通道內(nèi)部定時器;(10) 看門狗電路;(11) 117 個通用 I/O 口, 24通道外部中斷源;(12) 電源控制 :常規(guī)、緩慢、空閑和斷電模式;(13) 8通道10位ADC和觸摸屏接口;(14) 具有日歷功能的實時時鐘 RTC;(15) 具有鎖相環(huán)的片上時鐘發(fā)生器。2 將 Linux 移植到 S3C2

6、4102.1 移植思路首先要為 Linux 設(shè)計一個 BootLoader ,通過 BootLoader 來 初始化硬件,引導(dǎo) Linux 運行。 Bootloader 設(shè)計可以在 ads 中 實現(xiàn)。然后,針對硬件環(huán)境和設(shè)計的 BootLoader 修改 Linux 內(nèi) 核。接下來,在 Linux 操作系統(tǒng)下建立交叉編譯環(huán)境。最后,配 置、編譯、連接 Linu x ,下 載編譯得到的映像文件到 Flash , 通過 BootLoader 來啟動嵌入式操作系統(tǒng) Linux 。2.2 Boot Loader 的設(shè)計引導(dǎo)加載程序通常稱為 Boot Loader ,就是在操作系統(tǒng)內(nèi)核 運行之前運行的一

7、段小程序 。通過這段小程序,初始化硬件設(shè) 備、建立內(nèi)存空間的映射圖, 從而建立適當(dāng)?shù)南到y(tǒng)軟硬件 環(huán)境, 為調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。本系統(tǒng) Boot Loader 的第一階段主要完成基本的硬件初始化,用匯編語言實現(xiàn):關(guān)閉 w atchdog,屏蔽所有中斷;設(shè) 置處理器時鐘和工作頻率,CPU工作頻率為200 M Hz;初始化 外部寄存器;初始化堆棧指針SP;拷貝Boot Loader的第二階段到RAM空間 中,使用一個 跳轉(zhuǎn)語句跳轉(zhuǎn)到第二階段的 main 入口函數(shù)。在完成以上操作后就為 main 函數(shù)的運行建立起 了 一個基本的環(huán)境。第二階段用C語言完成:通用I/O 口的設(shè)置;完成內(nèi)存 映射初始

8、化和內(nèi)存管理單元初 始化: men_map_init();mmunit();這兩個函數(shù)在/arch/s3c2410/mmu.c 中;初 始化 mtd 設(shè)備: mtd_dev_init(); 這個函數(shù)在 /drivers/mtd/maps/s3c2410_flash.c 中;拷貝 flash 中的 kernel映像和根文件系統(tǒng)映像到 RAM空間中;跳轉(zhuǎn)到內(nèi)核的 第一條指令 處。跳轉(zhuǎn)時需要滿足下列條件:R0為0; R1為機器類型ID;禁止中斷(IRQ和FIQ); C PU設(shè)置 為SVC模式(SVC 是供操作系統(tǒng)使用的一種保護模式);關(guān)閉MMU關(guān)閉數(shù)據(jù)Cache。至此 Boot Loader 的任務(wù)

9、結(jié)束。2.3 Linux 內(nèi)核的修改假定內(nèi)核代碼放在 /usr/src/Linux-2.4.18 目錄下( 1) 打開根目錄下的 Makefile 文件 此文件用來指定編譯 規(guī)則,例如哪些需要編譯,哪些 需要先編譯。指定目標(biāo)平臺: Arch=arm; 指定交叉編譯器:添加 CROSS_COMPILE=arm-linux。-(2) 打開 /arch/arm 目錄下的 Makefile 文件 啟動代碼的 產(chǎn)生需要通過此文件,由于2.4內(nèi) 核還沒有對S3C2410的支持, 在此添加如下代碼:ifeq(CONFIG_ARCH_S3C2410),y)TEXTADDR=0xC0008000MACHINE=

10、s3c2410EndifTEXTADD是內(nèi)核的最終運行地址,該位置一般在RAM區(qū)起始地址偏移0x8000處(RAM起始地址 到偏移0x8000之間的32KB 空間中存放一些全局?jǐn)?shù)據(jù)結(jié)構(gòu)如啟動參數(shù)、內(nèi)存頁表等信息)。(3) 打開 /arch/arm/boot 目錄下的 Makefile 文件ZTEXTADD是解壓前image.rom的位置,ZRELADDR!內(nèi)核解壓 并最終執(zhí)行的位置。ZRELADD與 TEXTADD之間符合如下映射關(guān) 系:_v irt_to_phys(TEXTADDR)=ZRELADDR.ifeq(CONFIG_ARCH_s3c2410),y)ZTEXTADDR=0XC0008

11、000ZRELADDR=0X30008000endif(4) 打開 /arch/arm/boot/compressed目錄下的 Makefile文件,添加 ifeq( “$(CONFIG_A RCH_S3C2410),y)OBJS+=head-s3c2410.oendif(5) 打開/arch/arm/co nfig.in 此文件是配置文件,決定了在配置菜單中看到的內(nèi)容。添加$CONFIG_ARCH_S3C24子選項If “$ CONFIG_ARCH_S3C24”10= “y” ;thenComment Archimedes/A5000 Implementations Dep_bool SMD

12、K (MERI TECH BOARD)CONFIG_S3C2410_SMDK/$CONFIG_ARCH_S3C2410/ 其他fi在 if “$CONFIG_FOOTBRIDGE_H”O(jiān)S=T“y” -o“$CONFIG_ARCH_SA1”10=0“y” ;then define_bool CONFIG_ISA y elsedefine_bool CONFIG_ISA nfi中依樣添加“ $CONFIG_ARCH_s3c24”10=“y”。(6) 打開 /arch/arm/boot/compressed/head-s3c2410.s 此 處需要添加內(nèi)核解壓前處 理器初始化文件 head-s3c

13、2410.s ,示 例代碼如下:.section # “.start ”,“ax”_S3C2410_start:bic r2,pc,#0x1f 清除 pc 相關(guān)位,放于 r2add r3,r2,#0x4000l:ldr r0,r2,#32teq r2,r3bne 1bmcr p15,0,r0,c7,c10,4 寫回 Write Buffermcr p15,0,r0,c7,c7,0 刷新 I&D caches#if 0禁用 MMU,caches#endifmov r0,#0x00200000l:subs r0,r0,#1bne 1b依次將 $(CONFIG_ARCH_241加)入(7) 打開 /

14、arch/arm/kernel/Makefile no-irq-arch:=$(CONFIG_ARCH_INTEGRATOR)$(CONFIG_ARCH_CLPS711X)$(CONFIG_ARCH_AT91RM9200并添加 obj-$(CONFIG_MIZI)+=ecard.o obj-$(CONFIG_ARCH_APM)+=apm2.o(8) 打開 /arch/arm/kernel/e ntry-arm v.s此文件主要定義CPU初始化時中斷處理部分,可參考處理器使用手冊,按處理器使用要求配置。(9) 打開 /arch/arm/kernel/debug-arm v.s 此文件用于 最基本

15、的串口調(diào)試功能,包括 調(diào)試串口的地址初始化、發(fā)送、 等待、忙狀態(tài)定義等。使用此文件可以在啟動過程中打印出 相 關(guān)信息。(10) 打開/arch/arm/kernel/setup.c此文件中要根據(jù)使 用的板子設(shè)置幾個變量。 nr_b a nks 指定了內(nèi)存塊的數(shù)量, bank 指定了每塊內(nèi)存塊的范圍,PAGE_OFFSE是內(nèi)存起始地址, MEM_SIZ是內(nèi)存的大小,PAGE_OFFSE和MEM_SIZ要在 /include/asm-arm/arch-s3c 2410 中定義。(11) 打開/arch/arm/mm/mm-arm v.c此文件用于與硬件 相關(guān)的內(nèi)存管理,如初始化內(nèi) 存頁表內(nèi)存映射等

16、。將 init_maps-bufferable=0; 改為 init_maps-bufferable=1 。(12) 打開 /arch/arm/mach-s3c2410 建立相應(yīng)目錄并按照 處理器使用要求編寫 irq.c 、mm.c 、time.c 、arch.c 、Makefile , 分別實現(xiàn)中斷控制器的初始化,地址的虛實映射關(guān)系,時鐘 中 斷和實時時鐘處理以及有關(guān) Ramdisk 使用參數(shù)等的設(shè)置。(13) 打開 /include/asm-arm/arch-s3c2410此目錄下定義用到的頭文件。2.4 編譯 Linux 內(nèi)核在完成上述工作后, 再進行如下編譯, 即可得到我們需要的 映像

17、文件。(1) make clean :該命令清除以前構(gòu)造內(nèi)核時生成的所有 目標(biāo)文件、模塊和臨時文件。(2) make dep:該命令搜索Linux輸出與源代碼之間的依 賴關(guān)系,并以此生成依賴文件。( 3) make menuconfig :該命令是用來調(diào)用菜單式配制內(nèi) 核界面。(4) make zlmage :該命令用來編譯內(nèi)核,生成壓縮的Linux 內(nèi)核目標(biāo)代碼 zImage 文件。( 5) make modules :該命令編譯模塊驅(qū)動程序2.5文件系統(tǒng)的生成一一創(chuàng)建 JFFS2文件系統(tǒng)文件系統(tǒng)是 Linux 系統(tǒng)必備的一個部分,本系統(tǒng)使用mkfs.jffs2 工具來創(chuàng)建 JFFS2 文件系 統(tǒng)。首先建立上述的 /bin 、 /sbin 等目錄,然后拷貝命令工具到 /bin 文件夾, 拷貝系統(tǒng)控制 程序到 /sbin 目錄下,拷貝應(yīng)用程序運行時所需要的庫到 /lib 文 件夾,庫文件可以從 pc 機上 的交叉編譯根據(jù)安裝目錄下拷貝, 如 libc-2.2.2.so、 libcrypt-2.2.2.so、libm-2.2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論