《嵌入式系統(tǒng)講義》PPT課件.ppt_第1頁(yè)
《嵌入式系統(tǒng)講義》PPT課件.ppt_第2頁(yè)
《嵌入式系統(tǒng)講義》PPT課件.ppt_第3頁(yè)
《嵌入式系統(tǒng)講義》PPT課件.ppt_第4頁(yè)
《嵌入式系統(tǒng)講義》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩102頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)講義 第6章 嵌入式系統(tǒng)軟件移植與Linux下程序開發(fā),周國(guó)運(yùn) 2007.9,本章主要內(nèi)容,1、Bootloader及vivi移植 2、嵌入式Linux內(nèi)核及移植 3、基于Linux的應(yīng)用程序開發(fā) 4、基于Linux的驅(qū)動(dòng)程序開發(fā) 5、驅(qū)動(dòng)程序開發(fā)實(shí)例,6.1 Bootloader 及vivi移植,本節(jié)內(nèi)容 1、Bootloader簡(jiǎn)介 2、Bootloader工作模式 3、Bootloader啟動(dòng)過程 4、vivi Bootloader源代碼分析 5、vivi Bootloader接口命令 6、vivi 源代碼修改移植,建立交叉編譯環(huán)境,Bootloader的/移植/配置/編譯,kernel的移植/配置/編譯,根文件系統(tǒng)Cramfs的實(shí)現(xiàn),嵌入式系統(tǒng)軟件開發(fā)流程,用戶應(yīng)用程序開發(fā),6.1.1 Bootloader簡(jiǎn)介,Bootloader,為引導(dǎo)加載程序,是嵌入式系統(tǒng)加電后運(yùn)行的第一段代碼,相當(dāng)于PC機(jī)的BIOS。 Bootloader的位置:通常固化在硬件上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上,加電后自啟動(dòng)。 Bootloader功能:初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,將系統(tǒng)的軟、硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。,Bootloader在軟件的層次位置,Bootloader的地址:在嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)從地址0x0000,0000處開始執(zhí)行,在這個(gè)地址處安排的就是Bootloader。 Bootloader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的。每種不同體系結(jié)構(gòu)的處理器都有不同的Bootloader。不過Bootloader的發(fā)展也趨于支持多種體系結(jié)構(gòu),如現(xiàn)在比較成熟的vivi、RedBoot和U-Boot等。,幾種發(fā)布的Bootloader,1、vivi vivi是韓國(guó)Mizi公司開發(fā)的Bootloader,適用于ARM9處理器。 2、RedBoot RedBoot即紅帽(Red Hat)嵌入式調(diào)試引導(dǎo)程序,是一種用于嵌入式系統(tǒng)的獨(dú)立開放源代碼引導(dǎo)/裝載器。 3、U-Boot U-Boot(Universal Bootloader)由德國(guó)DENX小組開發(fā),是一款目前功能較為強(qiáng)大的開源Bootloader程序,它支持多種處理器平臺(tái),包括ARM、PowerPC、MIPS等。,6.1.2 Bootloader操作模式,大多數(shù)Bootloader都有兩種不同的操作模式:“啟動(dòng)加載”模式和“下載”模式。其區(qū)別對(duì)于開發(fā)人員才有意義。 從最終用戶的角度看,Bootloader的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載模式的區(qū)別。,1、啟動(dòng)加載(Bootloading)模式 啟動(dòng)加載模式稱為“自舉”(Autonomous)模式。即Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個(gè)過程并沒有用戶的介入。 啟動(dòng)加載模式是 Bootloader的正常工作模式,在嵌入式產(chǎn)品發(fā)布的時(shí)侯,Bootloader必須工作在這種模式下。,2、下載(Downloading)模式 下載方式:在這種模式下,目標(biāo)機(jī)上的Bootloader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件。 下載內(nèi)容及存儲(chǔ):主要是下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被Bootloader保存到目標(biāo)機(jī)的RAM中,然后再被 Bootloader寫到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲(chǔ)設(shè)備中。,下載模式應(yīng)用場(chǎng)合:Bootloader的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)被使用;此外,以后的系統(tǒng)更新也會(huì)使用到這種工作模式。 用戶應(yīng)用接口:工作于這種模式下的Bootloader通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。 如在RedBoot下,將出現(xiàn)“RedBoot”提示符;在vivi Bootloader 下出現(xiàn)“vivi”提示符。,2、下載(Downloading)模式,6.1.3 Bootloader啟動(dòng)過程,Bootloader的啟動(dòng)可以分為兩個(gè)階段 1、第一階段 階段1主要包含依賴于CPU體系結(jié)構(gòu)及硬件設(shè)備的初始化等。通常都用匯編語(yǔ)言來實(shí)現(xiàn)。這個(gè)階段的任務(wù)有5: (1)、基本的硬件設(shè)備初始化 這是 Bootloader 一開始就執(zhí)行的操作,其目的是為階段2 的執(zhí)行、以及隨后kernel 的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。,它通常包括以下工作:屏蔽所有的中斷、設(shè)置 CPU 的速度和時(shí)鐘頻率、關(guān)閉處理器內(nèi)部指令/數(shù)據(jù)cache等。,(2)、為階段2代碼準(zhǔn)備RAM空間 為了獲得更快的執(zhí)行速度,通常把 階段2 的代碼加載到 RAM 空間中來執(zhí)行。 準(zhǔn)備RAM空間考慮的因素:階段2代碼大小、堆棧、頁(yè)大?。?KB的倍數(shù))、安排位置等。 總的空間有1MB足夠,安排在RAM的頂端較恰當(dāng)。,(3)、拷貝階段2代碼到RAM空間 (4)、設(shè)置好堆棧 堆棧指針sp設(shè)置在1MB 的 RAM 空間的最頂端(堆棧向下生長(zhǎng))。 (5)、跳轉(zhuǎn)到階段2的C程序入口點(diǎn) 在上述一切都就緒后,就可以跳轉(zhuǎn)到 Bootloader 的 stage2 去執(zhí)行了。,Bootloader的階段2可執(zhí)行映像剛被拷貝到RAM空間時(shí)的系統(tǒng)內(nèi)存布局,2、第二階段 階段2通常用C語(yǔ)言來實(shí)現(xiàn),以便實(shí)現(xiàn)更復(fù)雜的功能,也使程序有更好的可讀性和可移植性。這個(gè)階段的主要任務(wù)有5: (1)、初始化本階段要使用到的硬件 至少初始化一個(gè)串口,以便和終端用戶進(jìn)行 I/O 輸出信息等。,(2)、檢測(cè)系統(tǒng)內(nèi)存映射(memory map) 所謂內(nèi)存映射,就是指在整個(gè)物理地址空間中有哪些地址范圍被分配用來作為系統(tǒng)的 RAM 單元。為后面使用RAM、運(yùn)行程序做好準(zhǔn)備。 (3)、將kernel和根文件系統(tǒng)映像從flash讀到RAM空間,(4)、為kernel設(shè)置啟動(dòng)參數(shù) 這是在調(diào)用內(nèi)核之前應(yīng)該做的準(zhǔn)備工作。Linux 2.4.x 以后的內(nèi)核都期望以標(biāo)記列表(tagged list)的形式來傳遞啟動(dòng)參數(shù)。 啟動(dòng)參數(shù)標(biāo)記列表方法:以ATAG_CORE標(biāo)記開始,以ATAG_NONE標(biāo)記結(jié)束。 在嵌入式 Linux 系統(tǒng)中,通常需要由 Boot Loader 設(shè)置的啟動(dòng)參數(shù)有:ATAG_CORE、ATAG_MEM(內(nèi)存映射)、ATAG_NONE等。,(5)、調(diào)用內(nèi)核 Bootloader調(diào)用Linux kernel的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處。在跳轉(zhuǎn)時(shí)必須滿足下列條件: 1)、CPU寄存器的設(shè)置:R0為0;R1為機(jī)器類型ID;R2為啟動(dòng)參數(shù),標(biāo)記列表在RAM中的起始基地址。 (機(jī)器類型參見 linux/arch/arm/tools/mach-types目錄) 2)、CPU模式: CPU必須設(shè)置為SVC模式,必須禁止中斷(IRQs和FIQs)。 3)、 MMU 和 Cache的設(shè)置:MMU 必須關(guān)閉;指令 Cache 可以打開也可以關(guān)閉; 數(shù)據(jù) Cache 必須關(guān)閉。,6.1.4 vivi Bootloader源碼分析,vivi是韓國(guó)Mizi公司開發(fā)的Bootloader,適用于ARM9處理器。 vivi有兩種工作模式,在啟動(dòng)時(shí)可以選擇。在vivi啟動(dòng)時(shí),通過串行口發(fā)出如下信息: Press Return to start the Linux now, any other key for vivi 按回車鍵啟動(dòng)Linux OS,按其它鍵進(jìn)入vivi命令接口模式,可以使用vivi提供的命令進(jìn)行一些操作。,一、vivi源代碼目錄結(jié)構(gòu) vivi源代碼包含的目錄有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目錄,共300多個(gè)文件。各個(gè)目錄內(nèi)容如下: 1、arch(architecture)目錄 它下面的文件為與CPU硬件相關(guān)的初始化代碼,此目錄包含了所用vivi支持的CPU。一般只包含S3C2410x的文件。,2、Documentation目錄 其下文件為vivi使用指南。 3、drivers目錄 存放的為MTD(數(shù)據(jù)存儲(chǔ)媒質(zhì))設(shè)備讀寫控制文件和串行口操作文件,對(duì)串行口支持xmodem和ymodem協(xié)議。 4、include目錄 存放所有的頭文件,包括S3C2410微處理器的和S3C2410開發(fā)板的頭文件。,5、init目錄 該目錄下是系統(tǒng)初始化文件main.c、version.c,后者是vivi版本信息,main.c為vivi整個(gè)初始化的結(jié)構(gòu)。 6、lib目錄 該目錄下是公共應(yīng)用及接口代碼,如時(shí)鐘功能文件time.c,堆棧初始化文件heap.c等文件。 7、scripts目錄 該目錄存放的是系統(tǒng)配置需要的腳本文件,如menuconfig和configue文件。,8、CVS目錄 所有的目錄下面都有一個(gè)CVS目錄,存放的是該目錄的路徑和它的子目錄。,二、vivi源代碼文件與功能結(jié)構(gòu) vivi源代碼文件: 1、vivi/arch/s3c2410/head.s 2、一段過度,實(shí)現(xiàn)循環(huán)調(diào)用,main返回后重新復(fù)位 LDR SP, DW_STACK_START MOV FP, #0 MOV A2, #0 BL MAIN MOV PC, #FLASH_BASE 3、vivi/init/main.c,6.1.5 vivi Bootloader接口命令,vivi有兩種工作模式,一種是 “啟動(dòng)加載”模式,另一種是命令行模式。利用串行口與主機(jī)的連接,可以進(jìn)行命令行操作。 vivi啟動(dòng)后,通過串行口發(fā)出如下信息: Press Return to start the Linux now, any other key for vivi 按下除了“Enter”之外的鍵,便可進(jìn)入命令行模式。 vivi的接口命令有5條。,1、load-下載文件命令 功能:將二進(jìn)制文件下載到Flash或RAM 格式:load | media_type:存儲(chǔ)器類型,F(xiàn)lash或RAM partname:分區(qū)名稱 addr size:下載的地址及占用空間大小 x|y|z:文件的傳輸協(xié)議。x表示采用xmodem協(xié)議,y表示采用ymodem協(xié)議,z表示采用zmodem協(xié)議。目前vivi僅支持xmodem協(xié)議。,例1:viviload flash kernel x 表示下載壓縮的內(nèi)核映像文件zImage到flash存儲(chǔ)器的內(nèi)核分區(qū)中,采用xmodem傳輸協(xié)議。 例2:viviload flash 0x80000 0xc0000 x,2、part-MTD分區(qū)操作命令 操作命令:顯示、增加、刪除、復(fù)位、保存MTD分區(qū)等。 各個(gè)命令格式: part show:顯示分區(qū)信息 part del :刪除指定的分區(qū) part reset:恢復(fù)分區(qū)的默認(rèn)值 part save:在flash中保存分區(qū)和參數(shù)值,增加新的分區(qū) part add : partname:新分區(qū)名稱 offset:新分區(qū)的偏移地址 size:新分區(qū)的大小 flag:新分區(qū)的類型,可以是JFFS2、LOCKED、BONFS,3、param -設(shè)置或查看分區(qū)參數(shù)命令 查看分區(qū)參數(shù): param show 設(shè)置啟動(dòng)等待按鍵延遲: param set boot_delay n(s) 設(shè)置通信初始化超時(shí): param set xmodem_initial_timeout m (s),4、boot-引導(dǎo)內(nèi)核命令 格式: boot media_type | media_type:存儲(chǔ)器類型,flash或RAM partname:內(nèi)核所在分區(qū)名稱 addr:內(nèi)核所在器件的偏移地址 size:內(nèi)核的大小 若 boot (無參數(shù)),則從kernel內(nèi)核對(duì)應(yīng)的分區(qū)中(kernel)讀取內(nèi)核映像啟動(dòng)。,例如: 1、viviboot nand 0x80000 內(nèi)核在nand flash中,偏移地址為0x80000,大小為缺省值0xc0000 2、viviboot nor 0x80000,5、flash-flash存儲(chǔ)器管理命令 擦除flash數(shù)據(jù)格式: flash erase | 說明: 對(duì)flash只有擦除命令。 例如: flash erase 0x80000 0xc0000,vivi接口命令,第三講到此,6.1.6 vivi源碼的修改移植,vivi的移植方法步驟: 對(duì)vivi進(jìn)行修改移植 對(duì)vivi進(jìn)行配置 對(duì)vivi進(jìn)行編譯 下載、運(yùn)行vivi 一、對(duì)vivi進(jìn)行修改移植 設(shè)Linux系統(tǒng)的目錄結(jié)構(gòu)為,設(shè)Linux系統(tǒng)的目錄結(jié)構(gòu)為: cygwin friendly-arm crosstool kernel vivi ,1、修改vivi/Makefile (1)修改交叉編譯庫(kù)和頭文件 1)修改編譯器路徑: 將: CROSS_COMPILE= /opt/host/armv4l/bin/armv4l-unknown-linux- 修改為: CROSS_COMPILE= arm-linux-gcc的路徑 如: CROSS_COMPILE =/friendly-arm/ crosstool/arm-linux/ gcc-2.95.3-glibc-2.2.3/bin/arm-linux-,2)修改編譯器庫(kù)文件路徑: 將: ARM_GCC_LIBS= /opt/host/armv4l/bin/gcc-lib/ armv4l-unknown-linux/2.95.2 修改為: ARM_GCC_LIBS=符合本機(jī)的路徑 如: ARM_GCC_LIBS= /friendly-arm/ crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/ gcc-lib/arm-linux/2.95.3,3)增加交叉編譯時(shí)頭文件的搜索路徑: LIBC_INCLUDE_DIR= 本機(jī)的include的路徑 如: LIBC_INCLUDE_DIR = /friendly-arm/ crosstool/arm-linux/ gcc-2.95.3-glibc-2.2.3/include,(2)Linux內(nèi)核包含文件 修改Linux頭文件所在路徑 將:LINUX_INCLUDE_DIR= /opt/host/armv4l/include 改為: LINUX_INCLUDE_DIR=符合本機(jī)的 如: LINUX_INCLUDE_DIR= /friendly-arm/kernel/include,2、修改vivi中與硬件相關(guān)的部分 只需要修改: /friendly-arm/vivi/include/platform/ 下面的文件smdk2410.h即可。 文件smdk2410.h的內(nèi)容是針對(duì)開發(fā)板的硬件配置的,主要有:時(shí)鐘設(shè)置、存儲(chǔ)器初始化、通用I/O口初始化、UART初始化、vivi初始配置等。 根據(jù)自己的目標(biāo)板的實(shí)際情況進(jìn)行設(shè)置即可。,3、支持Nor Flash啟動(dòng)的修改 (vivi/arch/s3c2410/smdk.c) (1) Nor flash分區(qū) 對(duì)于一個(gè)嵌入式系統(tǒng),可能會(huì)采用Nor flash、Nand flash、SDRAM等多種介質(zhì)構(gòu)成存儲(chǔ)器系統(tǒng), Nor flash(如1、2MB)用于存放、運(yùn)行bootloader,Nand flash用于存放操作系統(tǒng)、其它系統(tǒng)軟件、應(yīng)用程序和各種文件, SDRAM用于運(yùn)行程序和存放數(shù)據(jù)。 如果系統(tǒng)有Nor flash存儲(chǔ)器(一般沒有),則需要做相應(yīng)修改。,修改方法:在vivi/arch/s3c2410/smdk.c中的分區(qū)代碼,添加上Nor flash分區(qū): #ifdef CONFIG_S3C2410_AMD_BOOT mtd_partition_t default_mtd_partitions = name: “vivi“, offset: 0, size: 0x00020000, flag: 0 , name: “param“, offset: 0x00020000, size: 0x00010000, flag: 0 , name: “kernel“, offset: 0x00030000, size: 0x000C0000, flag: 0 , name: “root“, offset: 0x00100000, size: 0x00140000, flag: MF_BONFS ; #endif,(2)內(nèi)核啟動(dòng)參數(shù)設(shè)置 經(jīng)過上面修改,系統(tǒng)板可以從Nand flash中啟動(dòng)Linux,也可以從Nor flash中啟動(dòng)Linux,另外還需要修改啟動(dòng)命令:,還需要修改啟動(dòng)命令: #ifdef CONFIG_S3C2410_NAND_BOOT Char Linux_cmd = “noinitrd root=/dev/bon/2 init =/linuxrc console=tty1 console=ttyS0“; #else Char Linux_cmd = “noinitrd root=/dev/mtdblock/3 init =/linuxrc console=tty1 console=ttyS0“;,式中啟動(dòng)命令: noinitrd :不使用ramdisk; root :根文件系統(tǒng)所在的MTD分區(qū) init :內(nèi)核運(yùn)行入口命令文件 console :內(nèi)核信息輸出控制臺(tái) ttyS0表示串行口; tty0表示虛擬終端LCD。 說明: 關(guān)于Linux啟動(dòng)命令的參數(shù),可以參考Kernel/Documentatio/下面的文件 kernel-parameters.txt。,4、增加一種下載操作 load flash j操作 在Nand啟動(dòng)時(shí),可以從JTAG下載程序到SDRAM(0x30000000),然后用“l(fā)oad flashj”來燒寫相應(yīng)的分區(qū),并且可以做vivi、kernel、root這3個(gè)分區(qū)的操作。其中大部分操作與使用X-Modem和 Y-Modem等功能類似,所以命名為J-Modem,并特別修改以下3個(gè)部分。,(1)在 vivi/include/priv_data.h 中增加宏定義 原來為: #define X_MODEM 1 #define Y_MODEM 2 #define Z_MODEM 3 增加: #define JTAG_D 4,(2)在 vivi/lib/load_file.c中 增加對(duì)J-Modem的識(shí)別 原來為: modem_is(const char *mt) else if (strncmp(“z“, mt, 1) = 0) return Z_MODEM; else return UNKNOWN_MODEM; ,修改為: modem_is(const char *mt) else if (strncmp(“z“, mt, 1) = 0) return Z_MODEM; else if (strncmp(“J“, mt, 1) = 0) return JTAG_D; else return UNKNOWN_MODEM; 說明:該修改僅提高了下載到SDRAM的速度,二、對(duì)vivi進(jìn)行配置 運(yùn)行vivi配置程序menuconfig: make menuconfig 啟動(dòng)對(duì)vivi配置的主菜單,根據(jù)自己的目標(biāo)系統(tǒng)逐項(xiàng)進(jìn)行設(shè)置,設(shè)置完后退出保存即可。,三、對(duì)vivi進(jìn)行編譯 在vivi目錄下執(zhí)行以下命令: make clean make make clean是清除以前編譯時(shí)生成的所有目標(biāo)文件和臨時(shí)文件。 如果沒有錯(cuò)誤,編譯后會(huì)生成vivi的目標(biāo)文件vivi.bin。,四、對(duì)vivi進(jìn)行下載 利用JTAG口將vivi下載到目標(biāo)板的Nor flash空間(0x00000-0x20000)。 然后對(duì)目標(biāo)板加電,使vivi啟動(dòng)運(yùn)行,觀察運(yùn)行情況。,6.2 Linux內(nèi)核及移植,本節(jié)內(nèi)容 1、Linux內(nèi)核結(jié)構(gòu) 2、Linux移植 3、Linux編譯 4、Linux下載,6.2.1 Linux內(nèi)核結(jié)構(gòu),一、Linux操作系統(tǒng)的移植性 Linux操作系統(tǒng)具有很好的移植性,能夠很方便地從一個(gè)硬件平臺(tái)移植到另一個(gè)硬件平臺(tái)上,其根本原因是Linux操作系統(tǒng)的代碼,將與硬件相關(guān)的代碼與硬件無關(guān)的代碼是分開編寫的。 Linux移植所涉及的文件:對(duì)Linux移植時(shí),只需要修改與硬件相關(guān)的代碼即可,涉及的文件主要是各個(gè)目錄下的makefile文件,以及少數(shù)的匯編語(yǔ)言文件。,一、Linux內(nèi)核結(jié)構(gòu) Linux內(nèi)核有12個(gè)主目錄,700多個(gè)子目錄,文件總數(shù)11000多個(gè),總長(zhǎng)度120多MB。 Linux內(nèi)核的主目錄為:arch、drivers、fs、include、init、ipc、kernel、lib、mm、net、 1、arch目錄 arch目錄包含了與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核代碼,其下面的每一個(gè)目錄都是一種硬件平臺(tái),如ARM和PC機(jī)的i386。對(duì)于每一平,臺(tái)都包含以下幾個(gè)目錄。 boot :與平臺(tái)相關(guān)的啟動(dòng)內(nèi)核代碼 kernel :與平臺(tái)相關(guān)的內(nèi)核代碼 lib :與平臺(tái)相關(guān)的通用函數(shù) mm :與平臺(tái)相關(guān)的內(nèi)存管理代碼 math-emu :與平臺(tái)相關(guān)的模擬FPU代碼 顯然,內(nèi)核移植的重點(diǎn)就是該目錄下面的文件。 2、drivers目錄 該目錄下面保存的是所用設(shè)備的驅(qū)動(dòng)程序,其下的每個(gè)目錄是一種設(shè)備。,3、fs目錄 該目錄下面列出了Linux所支持的文件系統(tǒng),其下每個(gè)目錄代表一種文件系統(tǒng),文件系統(tǒng)代碼與平臺(tái)無關(guān)。 4、include目錄 該目錄下面是編譯內(nèi)核所需要的頭文件,與平臺(tái)無關(guān)的部分在linux子目錄下面,其余的子目錄都是與各種平臺(tái)相關(guān)的頭文件。 5、init目錄 其下只有兩個(gè)文件:main.c和version.c,前者是核心的初始化代碼,后者是版本信息,6、ipc目錄 其文件是核心進(jìn)程的通信代碼。 7、kernel目錄 為與平臺(tái)無關(guān)的內(nèi)核管理代碼,與平臺(tái)相關(guān)部分在arch/*/kernel下面。 8、lib目錄 該目錄下面的文件是與平臺(tái)無關(guān)的通用函數(shù)。 9、mm目錄 該目錄下面的文件是與平臺(tái)無關(guān)的內(nèi)存管理代碼,與平臺(tái)相關(guān)部分在arch/*/mm下面。,10、net目錄 是網(wǎng)絡(luò)功能代碼,其每個(gè)子目錄對(duì)應(yīng)網(wǎng)絡(luò)的一個(gè)方面。 11、其它目錄 Documentation目錄下存放的是說明和應(yīng)用文檔,scripts目錄下存放的是配置內(nèi)核腳本。 另外在每個(gè)目錄下幾乎都有一個(gè)depend文件和Makefile文件,depend是被包含在Makefile中的,編譯目標(biāo)所依賴的頭文件。,6.2.2 Linux移植,對(duì)于后面的移植,假設(shè)內(nèi)核的目錄為/my-arm/kernel,并且設(shè)環(huán)境變量為$KERNELCODE=/my-arm/kernel。 一、/my-arm/kernel-根目錄 根目錄下只需要修改Makefile文件。該文件的任務(wù)有兩個(gè):產(chǎn)生Linux內(nèi)核鏡像壓縮文件vmlinux和內(nèi)核模塊,Makefile遞歸進(jìn)入到各個(gè)子目錄中,調(diào)用子目錄中的Makefile最終產(chǎn)生出目標(biāo)文件。,需要修改的內(nèi)容: (1)指定目標(biāo)平臺(tái): 將: ARCH :=$(shell uname m|sed e s/ i.86/i.386 修改為: ARCH :=arm (2)指定交叉編譯器 將: CROSS_COMPILE = 修改為: CROSS_COMPILE = /friendly-arm/ crosstool/arm-linux/ gcc-2.95.3-glibc-2.2.3/bin/arm-linux-,(3)修改TOPDIR 將: TOPDIR := $(shell bin/pwd) 修改為: TOPDIR := $(/my-arm/kernel) (4)修改export INSTALL_MOD_PATH 將: INSTALL_MOD_PATH = /root 修改為: INSTALL_MOD_PATH = /my-arm/kernel/arch/arm/root,二、arch/arm目錄 1、對(duì)Makefile文件的修改 ifeq($(CONFIG_ARCH_S3C2410),y) TEXTADDR = 0xC0008000 MACHINE = s3c2410 endif TEXTADDR決定內(nèi)核起始運(yùn)行地址,即image.ram應(yīng)下載的位置,其值與具體目標(biāo)板有關(guān)。 0xC0008000的含義:從地址0xC0000000開始,共有32MB空間。,2、對(duì)config.in文件的修改 config.in是配置文件,運(yùn)行menuconfig時(shí)出現(xiàn)的菜單就是config.in的內(nèi)容。因?yàn)?.4.18內(nèi)核沒有中沒有S3C2410x處理器的信息,所以需要加入相關(guān)信息。 (1)添加CONFIG_ARCH_S3C2410子選項(xiàng) 修改后為: if“$CONFIG_ARCH_S3C2410”=“y”;then comment S3C2410 Implementation dep_bool SMDK (MERI TECH BOARD) CONFIG_S3C2410_SMCK $CONFIG_ARCH_S3C2410 fi,(2)其它選項(xiàng) 在: if“$CONFIG_FOOTBRIDGE_HOST”=“y” o “$CONFIG_ARCH_SA1100”=“y”; then 中間添加: “$CONFIG_ARCH_S3C410”=“y” o ,三、arch/arm/boot目錄 1、Makefile文件需要考慮修改的內(nèi)容 ifeq($(CONFIG_ARCH_S3C2410),y) ZTEXTADDR = 0x30008000 ZRELADDR = 0x30208000 endif ZRELADDR為內(nèi)核解壓后輸出的地址。ZTEXTADDR為Boorloader執(zhí)行的起始地址,若直接啟動(dòng)執(zhí)行,則設(shè)為0,否則為裝入RAM中的開始地址。 這兩個(gè)地址由具體的目標(biāo)板決定。,隨目標(biāo)變化,隨目標(biāo)板變化,2、compressed/Makefile 修改后: ifeq($(CONFIG_ARCH_S3C2410),y) OBJS += head-s3c2410.o endif 加入head-s3c2410.o 3、compressed/head-s3c2410.S 這是新加入的文件,#include #include #include .section “.start“, #alloc, #execinstr _S3C2410_start: bic r2, pc, #0x1f add r3, r2, #0x4000 16 kb is quite e

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論