




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