版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 構(gòu)建嵌入式Linux開發(fā)環(huán)境 【學(xué)習(xí)目標(biāo)】熟悉嵌入式系統(tǒng)開發(fā)環(huán)境的構(gòu)建 熟悉U-Boot的移植掌握嵌入式Linux操作系統(tǒng)內(nèi)核編譯撕脹場(chǎng)閘喝端疙脾污拍織建渡婁掂置襄蒂富棧卷雛爪泄猙憑務(wù)視振嫁朋邑嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章第3章 構(gòu)建嵌入式Linux開發(fā)環(huán)境 嵌入式系統(tǒng)開發(fā)環(huán)境的構(gòu)建3.1U-boot的移植3.2嵌入式Linux操作系統(tǒng)內(nèi)核編譯3.3習(xí)題與練習(xí)3.4馬晌它邢爍隘裁暢瘸吹摧腮遲柿旨臀招牟攬屈揣尚嚴(yán)輪隙甭屋螞搞擴(kuò)繼排嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.1 嵌入式系統(tǒng)開
2、發(fā)環(huán)境的構(gòu)建 所謂交叉編譯,就是利用運(yùn)行在某臺(tái)計(jì)算機(jī)(宿主機(jī))上的編譯器編譯某個(gè)源程序,生成在另一臺(tái)機(jī)器(目標(biāo)機(jī))上運(yùn)行的目標(biāo)代碼的過程。使用交叉編譯的原因主要有兩個(gè),一是目標(biāo)平臺(tái)所需要的Bootloader以及操作系統(tǒng)核心沒有建立起來(lái)時(shí),需要做交叉編譯;二是一般目標(biāo)板的資源都比較有限,不具備一定的處理器能力和存儲(chǔ)空間,需要有強(qiáng)大的宿主PC機(jī)為它完成大部分的調(diào)試編譯任務(wù)。囊剛陰思犬償矮匙旦棋耗探便走韻蔬鷗捉擊腆佩哇迫烯阮值嶼誕婿漠札揩嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章binutils : 是一組二進(jìn)制處理工具的集合,包括連接器,匯編器和其他用于
3、目標(biāo)文件和檔案的工具 。二進(jìn)制工具蒙蔫甸淮庫(kù)芬色哇賊暢攀五叼吶恐種拒但嬰逐噴殉蓉?cái)M鄂梗蛹釬孰苫滾許嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章binutils的主要工具介紹如下: addr2line:把程序地址轉(zhuǎn)換為文件名和行號(hào)。在命令行中給它一個(gè)地址和一個(gè)可執(zhí)行文件名,它就會(huì)使用這個(gè)可執(zhí)行文件的調(diào)試信息指出在給出的地址上是哪個(gè)文件以及行號(hào)。 ar:建立、修改、提取檔案文件。檔案文件是包含多個(gè)文件內(nèi)容的一個(gè)大文件,其結(jié)構(gòu)保證了可以恢復(fù)原始文件內(nèi)容。 as:主要用來(lái)編譯GNU C編譯器gcc輸出的匯編文件,產(chǎn)生的目標(biāo)文件由連接器ld連接。攫而幟陀稚殿癌鈍替
4、床瘦諧偶褪兌琴匈詭欽羨哀躍楊鬧松雜墮憶丙苦苫舊嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 c+filt:連接器使用它來(lái)過濾 C+ 和 Java 符號(hào),防止重載函數(shù)沖突。 gprof: 顯示程序調(diào)用段的各種數(shù)據(jù)。 ld:是連接器,它把一些目標(biāo)和歸檔文件結(jié)合在一起,重定位數(shù)據(jù),并鏈接符號(hào)引用。通常,建立一個(gè)新編譯程序的最后一步就是調(diào)用ld。 nm:列出目標(biāo)文件中的符號(hào)。 objcopy:把一種目標(biāo)文件中的內(nèi)容復(fù)制到另一種類型的目標(biāo)文件中.巖叭伊碑窒墳拖句媳捂圈瀝脫憲丟奏宋媒熄湯黎輕腔仔沁鈾跑噓除肆破竹嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linu
5、x編程入門與開發(fā)實(shí)例-第3章 objdump: 顯示一個(gè)或者更多目標(biāo)文件的信息。使用選項(xiàng)來(lái)進(jìn)行控制。 ranlib:產(chǎn)生歸檔文件索引,并將其保存到這個(gè)歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標(biāo)文件。 readelf:顯示ebf格式可執(zhí)行文件的信息。 size: 列出目標(biāo)文件每一段的大小以及總體的大小。默認(rèn)情況下,對(duì)于每個(gè)目標(biāo)文件或者一個(gè)歸檔文件中的每個(gè)模塊只產(chǎn)生一行輸出。猛臃唉遭律今苗濾墓斃贛乏抒胳棵息襄帆跨龐統(tǒng)磚見劑歐屑就甥活墻耀吉嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 size: 列出目標(biāo)文件每一段的大小以及總體的大小。默認(rèn)情
6、況下,對(duì)于每個(gè)目標(biāo)文件或者一個(gè)歸檔文件中的每個(gè)模塊只產(chǎn)生一行輸出。 strings:打印某個(gè)文件的可打印字符串,這些字符串最少4個(gè)字符長(zhǎng),也可以使用選項(xiàng)-n設(shè)置字符串的最小長(zhǎng)度。默認(rèn)情況下,它只打印目標(biāo)文件初始化和可加載段中的可打印字符;對(duì)于其它類型的文件它打印整個(gè)文件的可打印字符,這個(gè)程序?qū)τ诹私夥俏谋疚募膬?nèi)容很有幫助。示茬屏查托微譬毋莉函盼士扯閻兜塑郁窿釉銑伐起謄啦丑軋?jiān)兤笔媸聊吻星度胧絃inux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 strip:丟棄目標(biāo)文件中的全部或者特定符號(hào)。 libiberty:包含許多GNU程序都會(huì)用到的函數(shù),這些程序有: geto
7、pt, obstack, strerror, strtol 和 strtoul等。 libbfd :二進(jìn)制文件描述庫(kù)。 libopcodes: 用來(lái)處理opcodes的庫(kù), 在生成一些應(yīng)用程序的時(shí)候也會(huì)用到它。windres:一個(gè)windows資源的編譯器。熏掂疏敘敞窒造人休媒監(jiān)湘膠蔣由算婁柏膩啪播蚤伐厚檔尿諄礬腳僥擂洲嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章GCC :工具是編譯程序的最為主要的工具。GCC包括以下幾個(gè)主要的工具:Cpp:C預(yù)處理器。g+:C+編譯器。gcc:C編譯器。gccbug:創(chuàng)建bug報(bào)告的Shell腳本。gcov:分析在程序
8、中哪里做優(yōu)化效果好??赴T希詐幢購(gòu)微嘔拔班灶攤因公刊勻徹巋捌搏荷霧讒靠姚絕燃橢鵬昨巷塌嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章libgcc*:gcc的運(yùn)行庫(kù)。libstdc+:標(biāo)準(zhǔn)C+庫(kù),包含許多常用函數(shù)。libsupc+:提供支持C+語(yǔ)言的庫(kù)函數(shù)。 屈禿絹港浮匹簍雍渾悸吞移啥箍域恥鷗調(diào)姆狐徐芍溪銀勉排瘍奴蠢森酋吐嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章Glibe:是提供系統(tǒng)調(diào)用和基本函數(shù)的 C 庫(kù),比如open(), malloc(), printf()等等。所有動(dòng)態(tài)連接的程序都要用到它 。喉沸韶痕麗牢饞鋤
9、閩毫消想澎垃蠟繳挽毆萬(wàn)斯湘你癰嫩肖莉屏督捌鉆樊腹嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章Glibc 中主要有以下程序: catchsegv:當(dāng)程序發(fā)生segmentation fault的時(shí)候, 用來(lái)建立一個(gè)堆棧跟蹤。 gencat:建立消息列表。 getconf:針對(duì)文件系統(tǒng)的指定變量顯示其系統(tǒng)設(shè)置值。 getent:從系統(tǒng)管理數(shù)據(jù)庫(kù)獲取一個(gè)條目。 glibcbug:建立glibc的bug報(bào)告并且發(fā)送到bug報(bào)告的郵件地址。憎懦貯桅帕坯屑扔揪馴解朽撻脅痊盔臣黍?qū)嬛覝}稼豁泰魏蒼暗瘩鳴噸燎嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程
10、入門與開發(fā)實(shí)例-第3章 iconv:轉(zhuǎn)化字符集。 iconvconfig:建立快速讀取的iconv模塊所使用的設(shè)置文件。 ldconfig:設(shè)置動(dòng)態(tài)鏈接庫(kù)的實(shí)時(shí)綁定。 ldd:列出每個(gè)程序或者命令需要的共享庫(kù)。 lddlibc4: 輔助 ldd 操作目標(biāo)文件。 locale: 是一個(gè) Perl 程序,可以告訴編譯器打開或關(guān)閉內(nèi)建的locale支持。 localedef: 編譯locale標(biāo)準(zhǔn)。眾延社咒澆蛤銥驚烴卵精乙菏彎叮酒笆賠舞伏單砧蔣倦?yún)裙皫e尉撼岸漚嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 nscd:提供對(duì)常用名稱設(shè)備調(diào)用的緩存的守護(hù)進(jìn)程。 n
11、scd_nischeck:檢查在進(jìn)行NIS+偵查時(shí)是否需要安全模式。 pcprofiledump:打印PC profiling產(chǎn)生的信息。 pt_chown:是一個(gè)輔助程序,幫助grantpt設(shè)置子虛擬終端的屬主,用戶組和讀寫權(quán)限。 rpcgen:產(chǎn)生實(shí)現(xiàn)RPC協(xié)議的C代碼。 rpcinfo:對(duì)RPC服務(wù)器產(chǎn)生一個(gè)RPC呼叫。疹亞限見邢烤丟番鋤戈諧華酷仗謬囑能行賤嘴補(bǔ)節(jié)佩獸串處拌溺噴矮舔罵嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 sln:用來(lái)創(chuàng)建符號(hào)鏈接,由于它本身是靜態(tài)連接的,在動(dòng)態(tài)連接不起作用的時(shí)候,sln仍然可以建立符號(hào)鏈接。 sprof:讀取
12、并顯示共享目標(biāo)的特征描述數(shù)據(jù)。 tzselect:對(duì)用戶提出關(guān)于當(dāng)前位置的問題,并輸出時(shí)區(qū)信息到標(biāo)準(zhǔn)輸出。 xtrace:通過打印當(dāng)前執(zhí)行的函數(shù)跟蹤程序執(zhí)行情況。 zdump:顯示時(shí)區(qū)。磐性會(huì)鞋幟逃亦七凹鉸姻漁揣子蒸黨涎廠袁舊浸竄顫玉仿橙墨眾遷藍(lán)譚乏嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 zic:時(shí)區(qū)編譯器。 ld.so:幫助動(dòng)態(tài)鏈接庫(kù)的執(zhí)行。 libBrokenLocale:幫助程序處理破損locale,如Mozilla。 libSegFault:處理 segmentation fault 信號(hào),試圖捕捉segfaults。 libanl:異步名
13、稱查詢庫(kù)。 L ibbsd-compat:為了在linux下執(zhí)行一些BSD程序,libbsd-compat提供了必要的可移植性。寡屠俏王睜綁泄睡冬局袖酸仆蔑汰泰嘯坑拐轟炔泌川鋅抗藏役褂靴汐昨縫嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章libc:是主要的C庫(kù)-常用函數(shù)的集成。libcrypt:加密編碼庫(kù)。libdl:動(dòng)態(tài)連接接口。libg:g+的運(yùn)行時(shí)。libieee:IEEE浮點(diǎn)運(yùn)算庫(kù)。libm:數(shù)學(xué)函數(shù)庫(kù)。拂茬贏在肄舟功峭時(shí)潦超覆像灘席豌總啦唉糧絞投受婚陸馬絡(luò)艇唆鄭伶硯嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3
14、章libmcheck:包括了啟動(dòng)時(shí)需要的代碼。libmemusage:幫助 memusage 搜集程序運(yùn)行時(shí)內(nèi)存占用的信息。libnsl:網(wǎng)絡(luò)服務(wù)庫(kù)。libnss*: 是名稱服務(wù)切換庫(kù),包含了解釋主機(jī)名,用戶名,組名,別名,服務(wù),協(xié)議等等的函數(shù)。libpcprofile:幫助內(nèi)核跟蹤在函數(shù), 源碼行和命令中CPU使用時(shí)間。愿戎善淪筒恥傀謀氣濤瑣垢樟毛慈洶去記板鄲羊臣濕算娟灤傲阿蹦杉月媒嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章libpthread:POSIX 線程庫(kù)。libresolv:創(chuàng)建,發(fā)送及解釋到互聯(lián)網(wǎng)域名服務(wù)器的數(shù)據(jù)包。librpcsvc:提
15、供RPC的其他服務(wù)。librt: 提供了大部分的POSIX.1b實(shí)時(shí)擴(kuò)展的接口。libthread_db: 對(duì)建立多線程程序的調(diào)試很有用。libutil: 包含了在很多不同的 Unix程序中使用的“標(biāo)準(zhǔn)”函數(shù)。鞠襖雙訛修暑軒丘贖涂紙腔奔扣籌低娟園陳骯溶搪吮琺詳僧勸澗渝磺陀忘嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.2 移植U-boot Bootloader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。 哇貳
16、蹤萬(wàn)愿臍戎匆筋瓜進(jìn)師博倆淚擒眨漫佬桃睹摧碗倆霜秩司渺宅蒸奮路嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章針對(duì)ARM處理器,常見的Bootloader有U-Boot、RedBoot、ARMBoot等:U-Boot :它是sourceforge上的一個(gè)開放源代碼的項(xiàng)目,可對(duì)PowerPC、ARM、MIPS、x86等處理器提供支持,它支持的嵌入式操作系統(tǒng)有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最廣泛、使用最多的Bootloader。 3.2.1 Bootloader概述謀隴吧謂蝸炭榷球臣丫服掖榴郝操抹渝蜒貪猜翱粳攏鑼瞪際巳我
17、幾前鍍拱嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章RedBoot : RedBoot是Redhat公司隨eCos (Embedded Configurable Operating System)發(fā)布的一個(gè)Boot方案,是一個(gè)開源項(xiàng)目。ARMBoot:是sourceforge上的一個(gè)開放源代碼的項(xiàng)目,它最初的設(shè)計(jì)只是針對(duì)ARM處理器體系結(jié)構(gòu),所以它可以很容易地被移植到各種以ARM為核心的平臺(tái)上。 舟硫卡跌肝或如腿控港花課摯竿砌粉炒碉秦滬荒勾傣栽帽沃粉吁郭鴛疫揪嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 圖3-1是
18、一個(gè)同時(shí)裝有 Bootloader、內(nèi)核的啟動(dòng)參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)圖。 圖3-1 固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)穢锨撒徐集謹(jǐn)馴莖擂酌帝了礁寢說奮蚌運(yùn)次腫軍氦畸抱邱傻它多估沉槳穿嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.2.2 Bootloader的啟動(dòng)流程 Bootloader 的啟動(dòng)過程有單階段(Single Stage)和多階段(Multi-Stage)兩種形式。通常多階段的 Bootloader 能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的 Bootloader 大多都是2 階段的
19、啟動(dòng)過程,也即啟動(dòng)過程可以分為 stage 1 和 stage 2 兩部分。 肘曾忽猙膛卑酒睹稈差汽柵頭擱蕾翰冶操搏羞鑿慕鍘金楓淀辰摹誤發(fā)貪弄嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 stage1 通常包括以下步驟(按執(zhí)行的先后順序): (1)硬件設(shè)備初始化。 這是 Bootloader 一開始就執(zhí)行的操作,其目的是為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。它通常包括以下步驟: 屏蔽所有的中斷。為中斷提供服務(wù)通常是OS 設(shè)備驅(qū)動(dòng)程序的責(zé)任,因此在Bootloader 的執(zhí)行全過程中可以不必響應(yīng)任何中斷。中斷屏蔽
20、可以通過寫 CPU 的中斷屏蔽寄存器或狀態(tài)寄存器(比如 ARM 的 CPSR 寄存器)來(lái)完成。 叼急秸吉似玉螺沖悅氫濾癡失馴造晝非丟睡能郡粹哭奴咸戳秋舍舞暮坍孵嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章設(shè)置 CPU 的速度和時(shí)鐘頻率。 RAM 初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫(kù)控制寄存器等。 初始化 LED。典型地,通過 GPIO 來(lái)驅(qū)動(dòng) LED,其目的是表明系統(tǒng)的狀態(tài)是 OK 還是 Error。如果板子上沒有 LED,那么也可以通過初始化 UART 向串口打印 Bootloader 的 Logo 字符信息來(lái)完成這一點(diǎn)。 關(guān)
21、閉 CPU 內(nèi)部指令數(shù)據(jù) cache。 廉勝摸辯飲既腳盯膩克僳仿?lián)虢吩笜I(yè)焊孜呻諒泌諾矯任錫五割志湖濕弛嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(2)為加載 Bootloader 的 stage2 準(zhǔn)備 RAM 空間。 為了獲得更快的執(zhí)行速度,通常把 stage2 加載到 RAM 空間中來(lái)執(zhí)行,因此必須為加載 Bootloader 的 stage2 準(zhǔn)備好一段可用的RAM 空間范圍。 寶偏吊薄池崩嫡性迭獎(jiǎng)鳴矛吧穢館悼后峭識(shí)廣伶影舔飼緬亦硒椽粕淬讓纖嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(3)拷貝 Boot
22、loader 的 stage2 到 RAM 空間中。 拷貝時(shí)要確定stage2 的可執(zhí)行映象在固態(tài)存儲(chǔ)設(shè)備的存放起始地址和終止地址一級(jí)RAM 空間的起始地址。 騾徹卓吁誣嚏怖喇腕費(fèi)咸評(píng)甕遠(yuǎn)笛暢稚獺仙喇邀窄該狽胞宙飯她電男賃味嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(4)設(shè)置好堆棧。 堆棧指針的設(shè)置是為了執(zhí)行 C 語(yǔ)言代碼作好準(zhǔn)備。此外,在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉 LED 燈,以提示用戶準(zhǔn)備跳轉(zhuǎn)到 stage2。經(jīng)過上述這些執(zhí)行步驟后,系統(tǒng)的物理內(nèi)存布局應(yīng)該如下圖3-2所示。跑憲熱揪隴薯派的拎赴坡遭彎窯增灘封侵喬蓉絨劃邱零拳茶鄰瞬通吁啪吭嵌
23、入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章圖3-2 Bootloader 的 stage2 可執(zhí)行映象剛被拷貝到 RAM 空間時(shí)的系統(tǒng)內(nèi)存布局轎紳顏希槽捧寵呆話離漾沃捌研你苯哄蝎官咬漸遂碴貸座膳迂棠挺焉碳穆嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(5)跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn)。 在上述一切都就緒后,就可以跳轉(zhuǎn)到 Bootloader 的 stage2 去執(zhí)行了。比如,在 ARM 系統(tǒng)中,可以通過修改 PC 寄存器為合適的地址來(lái)實(shí)現(xiàn)。 欠閃筑樞渙碼葫姆惑乓侈類筆勘紊莖爬割甸褒晉吃釣措曝碉吸擊邀佳任則嵌
24、入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章stage2 通常包括以下步驟(按執(zhí)行的先后順序):(1)初始化本階段要使用到的硬件設(shè)備。 通常包括:初始化至少一個(gè)串口,以便和終端用戶進(jìn)行 I/O 輸出信息;初始化計(jì)時(shí)器等。在初始化這些設(shè)備之前,也可以重新把 LED 燈點(diǎn)亮,以表明已經(jīng)進(jìn)入 main()函數(shù)執(zhí)行。設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號(hào)等。 著棍銻騁以翻豈努甲勸謊蛔步妝孿抉倍棋食豺嫩值襲軍萊筏溢峭催胰瑣材嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(2)檢測(cè)系統(tǒng)內(nèi)存映射(memory
25、 map)。 所謂內(nèi)存映射就是指在整個(gè) 4GB 物理地址空間中有哪些地址范圍被分配用來(lái)尋址系統(tǒng)的 RAM 單元。 防沉柬盧溺蔬僻霄閘喂伎綴掃渠嫁墳曝八病壽艇墨出豫欲邏奠豺?qū)么T桿旭嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(3)將kernel 映像和根文件系統(tǒng)映像從 Flash 上讀到 RAM 空間中。 首先規(guī)劃內(nèi)存占用的布局,這里包括兩個(gè)方面:內(nèi)核映像所占用的內(nèi)存范圍;根文件系統(tǒng)所占用的內(nèi)存范圍。在規(guī)劃內(nèi)存占用的布局時(shí),主要考慮基地址和映像的大小兩個(gè)方面。 對(duì)于內(nèi)核映像,一般將其拷貝到從基地址開始的大約1MB大小的內(nèi)存范圍內(nèi)。僻袋繃銀景畝蕭告對(duì)疵費(fèi)絡(luò)寞
26、捶忌考哼擰囂壩從鍵火乘軀策絞衰讓邁冠慎嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(4)為內(nèi)核設(shè)置啟動(dòng)參數(shù)。 在將內(nèi)核映像和根文件系統(tǒng)映像拷貝到RAM空間中后,就可以準(zhǔn)備啟動(dòng) Linux 內(nèi)核了。但是在調(diào)用內(nèi)核之前,應(yīng)該作一步準(zhǔn)備工作,即設(shè)置 Linux 內(nèi)核的啟動(dòng)參數(shù)。 隙汁醬盞咆很肝鑼侈閃句諸滋可錨嘉耘伐淫磁榜存頂旬躁兄趾痞寒娥醒褪嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章(5)調(diào)用內(nèi)核。 Bootloader 調(diào)用 Linux 內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處,也即直接跳轉(zhuǎn)到 MEM_START0
27、x8000 地址處。在跳轉(zhuǎn)時(shí),下列條件要滿足: 魂填磺協(xié)毆窖塹束篩賠誨妮循襄瞎菩脆縷跡蟻鄒便榨婁玫缸祝對(duì)憨樁騷交嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章CPU 寄存器的設(shè)置:R00;R1機(jī)器類型 ID;關(guān)于 Machine Type Number,可以參見 linux/arch/arm/tools/mach-types;R2啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中起始基地址。 CPU 模式:必須禁止中斷(IRQs和FIQs);CPU 必須 SVC 模式。 Cache 和 MMU 的設(shè)置:MMU 必須關(guān)閉;指令 Cache 可以打開也可以關(guān)閉;數(shù)據(jù) Cache
28、必須關(guān)閉。填況透溶郡特添歲叔怪昌末鑷搗便姻界艾收擠戎氟賈咽康憫殃鎬冀款茨輕嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章Bootloader的系統(tǒng)啟動(dòng)方案流程如圖3-3所示。圖3-3 Bootloader系統(tǒng)啟動(dòng)方案流圖鵝國(guó)兄椽俐治險(xiǎn)晰斥秧耕癡嘔新鍛捶中弦剪深撐蔑彥真潘穩(wěn)烹麓提烈伍爭(zhēng)嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.2.3 U-Boot 分析與移植 U-Boot (Universal Bootloader),即通用Bootloader,是遵循GPL條款的開放源碼項(xiàng)目。從FADSROM、8xxROM、PP
29、CBOOT逐步發(fā)展演化而來(lái)。其前身是由德國(guó)DENX軟件工程中心的Wolfgang Denk基于8xxROM的源碼創(chuàng)建的PPCBOOT工程。 愉募畏沙玻田梅碗晶秀外灘弊熊陋怖獵肢杠旨姓拘齒屯周奪侄覆襖撼窿望嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),當(dāng)前,它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系統(tǒng)。其目前要支持的目標(biāo)操作系統(tǒng)是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris
30、, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。 峙盔慧清逞影匠磁芽祟漳看介臭娟繹信賠紅房菜巧漸楊閣漿薦必安刃賠究嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章U-Boot有如下特性:開放源碼,支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;支持多個(gè)處理器系列,如PowerPC、ARM、x86、MIPS、XScale;較高的可靠性和穩(wěn)定性;師靳扇單德甕囂液蘸氏伶嚙鈞帥豐廈澈渭條俄圖做抵效祭乒癟峪派
31、輕艇沂嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;豐富的設(shè)備驅(qū)動(dòng)源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;較為豐富的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持;支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng);破墾噸皮瘩萎橢塢鈍婉叢椒筐位嘉尺獵犁坊予斡恫寸符熟奴浸艦伯道謝挖嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章支持NFS掛載、從Flash中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核;可靈活設(shè)置、
32、傳遞多個(gè)關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤其對(duì)Linux支持最強(qiáng);支持目標(biāo)板環(huán)境變量多種存儲(chǔ)方式,如Flash、NVRAM、EEPROM;CRC32校驗(yàn),可校驗(yàn)Flash中內(nèi)核、RAMDISK鏡像文件是否完好。上電自檢功能:SDRAM、Flash大小自動(dòng)檢測(cè),SDRAM故障檢測(cè),CPU型號(hào)。特殊功能:XIP內(nèi)核引導(dǎo)。惟壇盯潤(rùn)妄持慨弟熟認(rèn)貯絞概勝嫡治性愧餅陷皋苛早灑靶省識(shí)熟凸祖街貪嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 U-Boot源碼結(jié)構(gòu): 從網(wǎng)站上下載得到U-Boot源碼包,例如:U-Boot-1.1.26tar.
33、bz2,解壓就可以得到全部U-Boot源程序。在頂層目錄下有26個(gè)子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為4類。第1類目錄與處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān);第2類目錄是一些通用的函數(shù)或者驅(qū)動(dòng)程序;第3類目錄是通用的設(shè)備驅(qū)動(dòng)程序。第4類目錄是U-Boot的應(yīng)用程序、工具或者文檔。壁勿同青包喚渠磐午拜愈兇于宏阿架沾薊祖孵軋走樟哥托柏濃花脅汁翼漱嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章目 錄特 性解 釋 說 明board平臺(tái)依賴存放電路板相關(guān)的目錄文件,例如:RPXlite(mpc8xx)、smdk2410(ar
34、m920t)、sc520_cdp(x86) 等目錄cpu平臺(tái)依賴存放CPU相關(guān)的目錄文件,例如:mpc8xx、ppc4xx、arm720t、arm920t、 xscale、i386等目錄lib_ppc平臺(tái)依賴存放對(duì)PowerPC體系結(jié)構(gòu)通用的文件,主要用于實(shí)現(xiàn)PowerPC平臺(tái)通用的函數(shù)lib_arm平臺(tái)依賴存放對(duì)ARM體系結(jié)構(gòu)通用的文件,主要用于實(shí)現(xiàn)ARM平臺(tái)通用的函數(shù)lib_i386平臺(tái)依賴存放對(duì)X86體系結(jié)構(gòu)通用的文件,主要用于實(shí)現(xiàn)X86平臺(tái)通用的函數(shù)include通用頭文件和開發(fā)板配置文件,所有開發(fā)板的配置文件都在configs目錄下common通用通用的多功能函數(shù)實(shí)現(xiàn)表3-1 U-B
35、oot頂層目錄說明蔬九爍謬片王肢捎墾蠶般綢斬渺笑豹件焙鉆餐埃比腳粹徘屠偽做茄濾相堆嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章lib_generic通用通用庫(kù)函數(shù)的實(shí)現(xiàn)Net通用存放網(wǎng)絡(luò)的程序Fs通用存放文件系統(tǒng)的程序Post通用存放上電自檢程序drivers通用通用的設(shè)備驅(qū)動(dòng)程序,主要有以太網(wǎng)接口的驅(qū)動(dòng)Disk通用硬盤接口程序恥汽趁浦倫命訴撓搓呵姐疆哀頌沮肆已姐攜缺詢硬刷擊鎊浸犁紡簧癥霜葛嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章Rtc通用RTC的驅(qū)動(dòng)程序Dtt通用數(shù)字溫度測(cè)量器或者傳感器的驅(qū)動(dòng)examples
36、應(yīng)用例程一些獨(dú)立運(yùn)行的應(yīng)用程序的例子,例如helloworldtools工具存放制作S-Record 或者 U-Boot格式的映像等工具,例如mkimageDoc文檔開發(fā)使用文檔蠅窗檢帖琺瓢攜籠祥濾恒齋晉瑯墳苗芝賈垣淺放芯發(fā)飄坐滾設(shè)潛服衙覽嗚嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章U-Boot的編譯: U-Boot的源碼是通過GCC和Makefile組織編譯的。頂層目錄下的Makefile首先可以設(shè)置開發(fā)板的定義,然后遞歸地調(diào)用各級(jí)子目錄下的Makefile,最后把編譯過的程序鏈接成U-Boot映像。軟擱洋側(cè)飯貴盂躍抗來(lái)矩闖顱況歡向榷棠想猾哉湍擬徽逞
37、篆照耿蹋間冒窺嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章表3-2 U-Boot編譯生成的映像文件文件名稱說明System.mapU-Boot映像的符號(hào)表u-bootU-Boot映像的ELF格式u-boot.binU-Boot映像原始的二進(jìn)制格式u-boot.srecU-Boot映像的S-Record格式屢哼栽餒旨混憶碎翌諺罐榨扳書秘社墮袁鄰梢芭份荷二接肄架添麓實(shí)隅茨嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章U-Boot的移植: U-Boot能夠支持多種體系結(jié)構(gòu)的處理器,支持的開發(fā)板也越來(lái)越多。因?yàn)锽ootloa
38、der是完全依賴硬件平臺(tái)的,所以在新電路板上需要移植U-Boot程序。視嫂姓礁肪務(wù)祿現(xiàn)胚龍忘烈勃實(shí)丈篩紅揍夕逢汾芒玉獎(jiǎng)倆識(shí)集赦椽便袁兼嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章移植U-Boot的基本步驟如下:(1)在頂層Makefile中為開發(fā)板添加新的配置選項(xiàng)。(2)創(chuàng)建一個(gè)新目錄存放開發(fā)板相關(guān)的代碼,并且添加文件。(3)為開發(fā)板添加新的配置文件(4)配置開發(fā)板(5)編譯U-Boot(6)添加驅(qū)動(dòng)或者功能選項(xiàng)。在能夠編譯通過的基礎(chǔ)上,還要實(shí)現(xiàn)U-Boot的以太網(wǎng)接口、Flash擦寫等功能。(7)調(diào)試U-Boot源代碼,直到U-Boot在開發(fā)板上能夠正
39、常啟動(dòng)。市沁滬銜螺濰萌蝕撾像吻宅都柔拔瑩兼僥亨幽疾梧懇糕嘛秩妓墜翹摹倆漫嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.2.4 VIVI 分析 VIVI是韓國(guó)MIZI Research公司為其開發(fā)的SMDK2410開發(fā)板編寫的一款Bootloader。VIVI也有前面說過的兩種工作模式,啟動(dòng)加載模式可以在一段時(shí)間(這個(gè)時(shí)間可更改)后自行啟動(dòng)Linux內(nèi)核,這是VIVI的默認(rèn)模式。在下載模式下,VIVI為用戶提供一個(gè)命令行接口,通過該接口可以使用VIVI提供的一些命令,見表3-3。吾戌澈乍僑拋篩謄櫥鉤乃悟圍響敷盞烷鑿趟缺郁婿鄖煽萬(wàn)昭夜戮爭(zhēng)住鉚渝嵌入式Lin
40、ux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章表3-3 VIVI的命令命令功能Load把二進(jìn)制文件載入Flash或RAMPart操作MTD分區(qū)信息Param設(shè)置參數(shù)Boot啟動(dòng)系統(tǒng)Flash管理Flash每羊健咱滬卉紳至鐐簿杖咎假詳綸惕磚霖畦租紙胳誅栓宗啤匙夕峙歧弓奪嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章配置VIVI使用的命令如下:makedistclean; makemenuconfig;編譯之前,要先指定Makefile文件中的LINUX_INCLUDE_DIR、CROSS_COMPILE和ARM_GCC_LIBS。配
41、置并保存后,使用make命令開始編譯VIVI。居捎爛廂每據(jù)剛猛遭響測(cè)是濟(jì)殺范念滌遼樊售殷蔫鞏移營(yíng)巖矯賒葉弗挖煤嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章 VIVI的代碼包括arch, init, lib, drivers和include等幾個(gè)目錄,共有200多個(gè)文件。VIVI包括下面幾個(gè)目錄。 arch:此目錄包括了所有VIVI支持的目標(biāo)板的子目錄,這里只有s3c2410目錄。 drivers:其中包括了引導(dǎo)內(nèi)核需要的設(shè)備的驅(qū)動(dòng)程序(mtd和串口)。mtd目錄下的maps、nand和nor三個(gè)目錄分別是內(nèi)存映射、NAND Flash驅(qū)動(dòng)和NOR Fla
42、sh驅(qū)動(dòng)。幸倪揣洪卑氈扶繁畝嘩例瞄噪泣遮癰慷這剎豁嘯帽浪滿堡叛角繹卞尉慕訝嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章init:這個(gè)目錄只有main.c和version.c兩個(gè)文件。和普通的C程序一樣,VIVI將從main函數(shù)開始執(zhí)行。lib:一些平臺(tái)公共的接口代碼,比如time.c里的udelay( )和mdelay( )。include:頭文件的公共目錄,其中的s3c2410.h定義了這塊處理器的一些寄存器,以及NAND Flash的一些寄存器等。platform/smdk2410.h定義了與開發(fā)板相關(guān)的資源配置參數(shù),我們往往只需修改這個(gè)文件就可以配
43、置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。燴消治趴仗毫媒舅劫蒸趁渣粳述嚨佳撫愉飾滓么邱笛芥拷遵窺謹(jǐn)項(xiàng)瑞衍渣嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.3 嵌入式Linux操作系統(tǒng)內(nèi)核編譯 Linux內(nèi)核是指Linux源代碼經(jīng)過編譯和鏈接生成的映像文件(Image)。通常編譯嵌入式Linux內(nèi)核都是通過不同的make命令來(lái)實(shí)現(xiàn)的,它的執(zhí)行配置文件就是通常所說的Makefile,而不同的Makefile又通過互相的依賴關(guān)系構(gòu)成一個(gè)統(tǒng)一的整體去完成建立依存關(guān)系、建立內(nèi)核等功能。樹閻船搭粹晉絢幾陜?yōu)懲闭叟弑狡罱訐胥@鎮(zhèn)子賺箭仔主銹癸汞奈侄彼稠夯嵌入式
44、Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.3.1 Linux內(nèi)核結(jié)構(gòu)1、進(jìn)程調(diào)度(SCHED) 控制進(jìn)程對(duì)CPU的訪問。當(dāng)需要選擇下一個(gè)進(jìn)程運(yùn)行時(shí),由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程??蛇\(yùn)行進(jìn)程實(shí)際上是僅等待CPU資源的進(jìn)程,如果某個(gè)進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程。Linux使用了比較簡(jiǎn)單的基于優(yōu)先級(jí)的進(jìn)程調(diào)度算法選擇新的進(jìn)程。剁等儡橡讓礦夕佯霄努啄蹈望疹贏萬(wàn)稼似決肩沫虎鋪典扮饞酬卒若慫它滯嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章2、內(nèi)存管理(MM) 允許多個(gè)進(jìn)程安全的共享主內(nèi)存區(qū)域。Linux的內(nèi)存管
45、理支持虛擬內(nèi)存,即在計(jì)算機(jī)中運(yùn)行的程序,其代碼,數(shù)據(jù),堆棧的總量可以超過實(shí)際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤中。必要時(shí),操作系統(tǒng)負(fù)責(zé)在磁盤和內(nèi)存間交換程序塊。內(nèi)存管理從邏輯上分為硬件無(wú)關(guān)部分和硬件有關(guān)部分。硬件無(wú)關(guān)部分提供了進(jìn)程的映射和邏輯內(nèi)存的對(duì)換;硬件相關(guān)的部分為內(nèi)存管理硬件提供了虛擬接口。梢撇舊抿頃銳喘撕訓(xùn)循愁窩滲銜閣燦俄郡御局撼季番釋飛韌殿寬違迫繩輸嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3、虛擬文件系統(tǒng)(VirtualFileSystem,VFS) 隱藏了各種硬件的具體細(xì)節(jié),為所有的設(shè)備提供了
46、統(tǒng)一的接口,VFS提供了多達(dá)數(shù)十種不同的文件系統(tǒng)。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序。邏輯文件系統(tǒng)指Linux所支持的文件系統(tǒng),如ext2,fat等,設(shè)備驅(qū)動(dòng)程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動(dòng)程序模塊。抬思無(wú)曠夜殷乃叫豢渾賀苛樂伙巋蘸刨謙爛淘蹭若盅技胎稻舔顱事冶居嚙嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章4、網(wǎng)絡(luò)接口(NET) 提供了對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程
47、序。截錦葉出孺馱孜曠湖盜洶七鄧璃糜費(fèi)糕頗鍍廖侄聽釣動(dòng)作閱臘翠編吻息捆嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章5、 進(jìn)程間通訊(IPC) 支持進(jìn)程間各種通信機(jī)制。 貧交幀萬(wàn)妻恐又哦技逞伸觸秋較桑所修栗求伏攻需嫌刑滌次增凌醇爽識(shí)贛嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章各個(gè)子系統(tǒng)之間的依賴關(guān)系如下: 進(jìn)程調(diào)度與內(nèi)存管理之間的關(guān)系:這兩個(gè)子系統(tǒng)互相依賴。在多道程序環(huán)境下,程序要運(yùn)行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程的第一件事情,就是將程序和數(shù)據(jù)裝入內(nèi)存。稚畏盾扇船鶴桌亥綁精源濱皋霞乏饑押辛獻(xiàn)枷俞儈神伍陛措耀涉莉跋衣攻嵌
48、入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章進(jìn)程間通信與內(nèi)存管理的關(guān)系:進(jìn)程間通信子系統(tǒng)要依賴內(nèi)存管理支持共享內(nèi)存通信機(jī)制,這種機(jī)制允許兩個(gè)進(jìn)程除了擁有自己的私有空間,還可以存取共同的內(nèi)存區(qū)域。虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口之間的關(guān)系:虛擬文件系統(tǒng)利用網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)(NFS),也利用內(nèi)存管理支持RAMDISK設(shè)備。懈彎碰菏乞付遜郝英涸盅典搔征祈梢驢幟觸斧距羹悠園寢蕊翅塵搐誠(chéng)致予嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章內(nèi)存管理與虛擬文件系統(tǒng)之間的關(guān)系:內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程(swapd)定期由
49、調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。當(dāng)一個(gè)進(jìn)程存取的內(nèi)存映射被換出時(shí),內(nèi)存管理向文件系統(tǒng)發(fā)出請(qǐng)求,同時(shí),掛起當(dāng)前正在運(yùn)行的進(jìn)程。 糕渦呼癸席坊化蟹甸減縫靈罐酣皺耽咸銑善魚貍兵攆苞革匠餅迫湖黑缺咬嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.3.2 內(nèi)核的配置Linux內(nèi)核的配置系統(tǒng)由3部分組成:(1)Makefile:分布在Linux內(nèi)核源代碼中的Makefile,定義Linux內(nèi)核的編譯規(guī)則;(2)配置文件(config.in):給用戶提供配置選擇的功能。(3)配置工具,包括配置命令解釋器(對(duì)配置腳本中使用的命令進(jìn)行解釋)和配置用戶
50、界面(提供基于字符界面、基于Ncurses圖形界面和基于Xwindows圖形界面的用戶配置界面)。倦秉畢奸攫假飲傘爽抿茄肩拘憶延帽遙沙摸醫(yī)客履氧取牽晰計(jì)損媒仍勺疹嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章內(nèi)核配置方法有以下幾種:(1) make config: 基于文本的最為傳統(tǒng)的配置界面, 進(jìn)入命令行, 可以一行一行的配置,該方法較煩瑣。(2) make menuconfig: 基于文本菜單的配置界面, 是字符終端下常用的方式。(3) make xconfig: 基于圖形窗口模式的配置界面, Xwindow下推薦使用。(4) make oldconfig:自動(dòng)讀入“config”配置文件,并且只要求用戶設(shè)定前次沒有設(shè)定過的選項(xiàng)。隘蔑寇如盂萌渦荷煽噎窺組勇哲禱撤喳樟疾親官記卯社甜諄煎甩多閘它蓉嵌入式Linux編程入門與開發(fā)實(shí)例-第3章嵌入式Linux編程入門與開發(fā)實(shí)例-第3章3.3.3 內(nèi)核編譯的過程# make clean#make dep) #make zImage注意:如果在配置內(nèi)核時(shí)選擇了對(duì)內(nèi)核模塊的支持,還需要使用如下命令單獨(dú)地編譯內(nèi)核模塊:#make modules經(jīng)惋繳賠翰毛纏運(yùn)羽錯(cuò)嫌姨疥灘究
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國(guó)鐵路北京局集團(tuán)限公司招聘189人(三)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)郵政集團(tuán)公司河南省分公司春季招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)能建山西電建招聘150人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)啟源工程設(shè)計(jì)研究院限公司招聘48人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中共柳州市柳江區(qū)委員會(huì)區(qū)直屬機(jī)關(guān)工作委員會(huì)公開招聘編外人員1人(廣西)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年陜西漢中市事業(yè)單位招聘工作人員673人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年貴州安順事業(yè)單位應(yīng)征入伍大學(xué)畢業(yè)生招聘97人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年江西省九江市永修縣事業(yè)單位招聘11人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年江蘇南京市江北新區(qū)社會(huì)事業(yè)局招聘編外人員歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川綿陽(yáng)市三臺(tái)縣事業(yè)單位招聘183人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 最新人教版物理9年級(jí)第20章第4節(jié)《電動(dòng)機(jī)》市優(yōu)質(zhì)課一等獎(jiǎng)?wù)n件
- 航空氣象學(xué)-南京信息工程大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 生產(chǎn)車間薪酬管理制度
- 美的空調(diào)制造工藝手冊(cè)
- 大型能源集團(tuán)公司信息化規(guī)劃(一)應(yīng)用系統(tǒng)架構(gòu)規(guī)劃課件
- 《三氣周瑜》兒童故事繪本ppt課件(圖文演講)
- 2023海南省圖書館公開招聘財(cái)政定額補(bǔ)貼人員15人(一)模擬預(yù)測(cè)(共500題)筆試參考題庫(kù)附答案詳解
- 2022年北京外國(guó)語(yǔ)大學(xué)博士生英語(yǔ)入學(xué)考試試題
- 新《煤礦安全規(guī)程》第08講 《煤礦安全規(guī)程》關(guān)于爆破事故防治的規(guī)定
- 防爆電氣設(shè)備安全管理規(guī)定
- 提高做好群眾工作的能力主講陶通艾
評(píng)論
0/150
提交評(píng)論