版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
移植嵌入式操作系統(tǒng)16嵌入式Linux內(nèi)核移植Linux內(nèi)核移植根文件系統(tǒng)下載內(nèi)核使用U-Boot加載根文件系統(tǒng)和映像第16章移植嵌入式操作系統(tǒng)16.1嵌入式Linux內(nèi)核16.1.1Linux內(nèi)核簡介Linux內(nèi)核是Linux操作系統(tǒng)的核心,它負(fù)責(zé)操作系統(tǒng)內(nèi)部各個部分之間的調(diào)度與協(xié)調(diào),同時為用戶提供各種各樣的接口。從1991年芬蘭的LinusTorvalds推出的Linux0.1.0版內(nèi)核至今,Linux內(nèi)核已經(jīng)升級到Linux4.2。
基于ARMv7內(nèi)核的三星公司的Exynos4412芯片內(nèi)部集成了MMU,所以針對此款CPU的ARMLinux要使用MMU技術(shù)。由于有操作系統(tǒng)中的MMU對進程提供保護,大大提高了嵌入式系統(tǒng)中多進程的保護能力,進而使用戶應(yīng)用程序的可靠性得以提高,降低了應(yīng)用程序的開發(fā)難度。內(nèi)核的移植主要包括以下幾個方面:●針對具體的試驗板,對內(nèi)核的部分代碼進行修改或刪減?!駥?nèi)核進行重新配置?!窭媒徊婢幾g工具重新編譯配置過的內(nèi)核。●根據(jù)實際情況決定是否下載內(nèi)核到試驗板進行測試。第16章移植嵌入式操作系統(tǒng)16.1.2Linux內(nèi)核的組成結(jié)構(gòu)圖16.1Linux內(nèi)核組成部分關(guān)系圖1、從進程調(diào)度角度理解Linux內(nèi)核第16章移植嵌入式操作系統(tǒng)結(jié)論:
進程調(diào)度子系統(tǒng)是內(nèi)核的核心子系統(tǒng),其他子系統(tǒng)都依賴于進度調(diào)度子系統(tǒng),因為其他子系統(tǒng)都需要具有暫停和恢復(fù)進程的功能。通常,某個子系統(tǒng)會在等待硬件操作時暫停進程,而在硬件操作完成后恢復(fù)進程。
例如,進程發(fā)出一條網(wǎng)絡(luò)消息后,網(wǎng)絡(luò)接口可能需要暫停進程,直到硬件成功地完成消息的發(fā)送,在消息被發(fā)出后,網(wǎng)絡(luò)接口返回一個代碼表示操作成功與否,然后恢復(fù)進程。第16章移植嵌入式操作系統(tǒng)2、從Linux內(nèi)核結(jié)構(gòu)角度理解內(nèi)核圖16.2Linux內(nèi)核結(jié)構(gòu)圖第16章移植嵌入式操作系統(tǒng)從圖16.2中可以看出,位于最底層的部分是嵌入式系統(tǒng)中的硬件部分;緊貼平臺的上層是與體系結(jié)構(gòu)相關(guān)的代碼,相當(dāng)于個人計算機中的BIOS或嵌入式系統(tǒng)中的Bootloader。夾在Bootloader與系統(tǒng)調(diào)用接口之間的操作系統(tǒng)層,從圖中可以看出,是各種設(shè)備的驅(qū)動程序,比如塊設(shè)備、字符設(shè)備和網(wǎng)絡(luò)設(shè)備等。協(xié)調(diào)各部分的是系統(tǒng)的調(diào)度程序,結(jié)構(gòu)的最上層是系統(tǒng)調(diào)用接口,這一部分實現(xiàn)了與用戶應(yīng)用程序的接口,目的是使用戶使用起來更方便。第16章移植嵌入式操作系統(tǒng)16.1.3Linux的源碼結(jié)構(gòu)Linux內(nèi)核文件眾多,這些文件的組織結(jié)構(gòu)并不復(fù)雜,它們分別位于頂層目錄下的21個子目錄中,各個目錄功能獨立。常見的目錄有:(1)
arch目錄:該目錄包含了所有與體系結(jié)構(gòu)相關(guān)的核心代碼,對于每個架構(gòu)的CPU,該目錄下有一個對應(yīng)的子目錄,比如arch/arm、arch/i386。(2)
drivers目錄:此目錄包含了系統(tǒng)中所有設(shè)備的驅(qū)動程序,此目錄下又進一步劃分為幾類設(shè)備驅(qū)動,每一種對應(yīng)一個子目錄。第16章移植嵌入式操作系統(tǒng)(3)
include目錄:此目錄包括編譯核心時需要的大部分頭文件,這部分頭文件既包括與平臺相關(guān)的,也包括與平臺無關(guān)的,其中與平臺無關(guān)的頭文件在include/linux子目錄下。(4)
init目錄:此目錄包含核心的初始化代碼(不是系統(tǒng)的引導(dǎo)碼)。(5)
mm目錄:此目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于目錄arch/*/mm下。(6)
ipc目錄:此目錄包含了核心用于實現(xiàn)進程間通信的相關(guān)代碼。(7)
fs目錄:此目錄涉及Linux支持的所有文件系統(tǒng)的代碼,不同文件系統(tǒng)有不同的子目錄對應(yīng),如ext3文件系統(tǒng)對應(yīng)的就是ext3子目錄。第16章移植嵌入式操作系統(tǒng)(8)
kernel目錄:此目錄存放了內(nèi)核管理的核心代碼,與處理器結(jié)構(gòu)相關(guān)的代碼都放在arch/*/kernal下。(9)
net目錄:此目錄下包含了核心關(guān)于網(wǎng)絡(luò)部分的代碼,其下的每個子目錄對應(yīng)于網(wǎng)絡(luò)的一個方面。(10)
lib目錄:此目錄包含了與核心有關(guān)的代碼,與處理器結(jié)構(gòu)相關(guān)的代碼被放在arch/*/lib目錄下。(11)
scripts目錄:此目錄包含了用于配置核心的腳本文件。(12)
documentation目錄:此目錄包含了與核心有關(guān)的說明文檔,這些文檔對核心每個目錄的作用做了詳細(xì)的說明。第16章移植嵌入式操作系統(tǒng)16.2移植Linux內(nèi)核Linux的移植,就是把Linux操作系統(tǒng)針對具體的目標(biāo)平臺做必要改寫之后安裝到目標(biāo)平臺,使其能夠正確地運行起來。移植過程主要包括以下內(nèi)容:獲取某一版本的Linux內(nèi)核源碼,根據(jù)具體目標(biāo)平臺對內(nèi)核源碼進行必要的改寫(主要修改體系結(jié)構(gòu)相關(guān)部分)。添加一些外設(shè)的驅(qū)動,以打造一款適合具體目標(biāo)平臺的操作系統(tǒng)。對修改后的內(nèi)核源碼進行針對目標(biāo)平臺的交叉編譯,生成一個內(nèi)核映像文件。通過一些手段把內(nèi)核映象文件燒寫到目標(biāo)平臺。第16章移植嵌入式操作系統(tǒng)鑒于改寫Linux源碼的復(fù)雜性,這一步往往由目標(biāo)平臺提供商來提供。開發(fā)者只需要配置內(nèi)核和編譯內(nèi)核即可。1.給內(nèi)核打補丁(1)將內(nèi)核源碼文件與補丁文件都放在arm目錄下。(2)解壓內(nèi)核壓縮文件到當(dāng)前目錄。(3)將當(dāng)前目錄切換到補丁文件所在的目錄,并解壓補丁文件。(4)將解壓后的補丁文件移動到Linux內(nèi)核源碼所在的目錄。(5)將當(dāng)前目錄切換到Linux源碼所在的目錄,并為內(nèi)核打上補丁。第16章移植嵌入式操作系統(tǒng)2.配置內(nèi)核配置內(nèi)核的主要目的是針對具體的試驗板及其功能需求,從大而全的內(nèi)核中裁剪掉一些不用的部分,當(dāng)然也包括添加和修改我們所需要的部分。方法是在Linux的終端窗口里鍵入命令:#makemenuconfig
由于內(nèi)核配置選項眾多,如果對其中某些選項功能不熟悉,將導(dǎo)致配置失敗。內(nèi)核配置是一個很繁瑣的過程,若有可能,可以使用源碼包自帶的默認(rèn)配置文件對內(nèi)核進行配置以簡化工作。第16章移植嵌入式操作系統(tǒng)3.編譯內(nèi)核
編譯內(nèi)核相對簡單,一般只需要依次運行幾個命令就可以了。但需強調(diào)的是,因為我們要編譯出可以在ARM上運行的內(nèi)核,所以在編譯之前要先安裝好交叉編譯工具鏈,并要注意交叉編譯工具鏈中各種工具的版本。
要編譯Linux內(nèi)核,需要首先進入Linux源碼所在的目錄,并依次執(zhí)行以下幾條命令:#makeclean#makedep執(zhí)行完最后一條命令,會生成內(nèi)核的映像文件zImage,對于ARM系列的CPU,生成的映像文件放在“arch/arm/boot”目錄下。第16章移植嵌入式操作系統(tǒng)16.3移植根文件系統(tǒng)1.?Linux文件系統(tǒng)概述
內(nèi)核映像文件(在嵌入式系統(tǒng)中,內(nèi)核一般單獨放在一個分區(qū)中)、內(nèi)核啟動后運行的第一個程序(init)、給用戶提供操作界面的shell程序、應(yīng)用程序所依賴的庫等。這些必需、基本的文件合稱為根文件系統(tǒng),它們存放在一個分區(qū)中。Linux系統(tǒng)啟動后,首先掛接這個分區(qū),稱為掛接(mount)根文件系統(tǒng)。Linux系統(tǒng)以樹狀結(jié)構(gòu)管理所有目錄文件,其他分區(qū)掛接在某個目錄上,這個目錄被稱為掛接點或安裝點,然后就可以通過這個目錄來訪問這個分區(qū)上的文件了。第16章移植嵌入式操作系統(tǒng)
根文件系統(tǒng)被掛接在根目錄“/”上以后,在根目錄下就有根文件系統(tǒng)的各個目錄、文件(/bin、/sbin、/mnt等),再將其他分區(qū)掛接到?/mnt目錄上,/mnt目錄下就有這個分區(qū)的各個目錄、文件。
在一個分區(qū)上存儲文件時,需要遵循一定的格式,這種格式稱為文件系統(tǒng)類型,比如fat16、fat32、ntfs、ext2、ext3、jffs2、yaffs等。除這些擁有實在的存儲分區(qū)的文件系統(tǒng)類型外,Linux還有幾種虛擬的文件系統(tǒng)類型,比如proc、sysfs等等。第16章移植嵌入式操作系統(tǒng)2.?Linux根文件系統(tǒng)目錄結(jié)構(gòu)
為了讓用戶方便地找到不同類型的文件,在構(gòu)造文件系統(tǒng)時,應(yīng)遵守FHS(FilesystemHierarchyStandard,文件系統(tǒng)層次標(biāo)準(zhǔn))。該標(biāo)準(zhǔn)定義了文件系統(tǒng)中目錄、文件的分類存放原則,還定義了系統(tǒng)運行所需的最小文件、目錄的集合,并列舉了不遵守這些規(guī)則的例外情況及原因。圖16.4Linux根文件系統(tǒng)的目錄結(jié)構(gòu)第16章移植嵌入式操作系統(tǒng)常見的目錄有:
/bin目錄。該目錄下存放所有用戶(包括系統(tǒng)管理員和一般用戶)都可以使用的基本命令。(2)?/sbin目錄。該目錄下存放系統(tǒng)命令,即只有管理員能夠使用的命令。系統(tǒng)命令還可以存放在/usr/sbin、/usr/local/sbin目錄下。/sbin目錄中存放的是基本的系統(tǒng)命令,它們用于啟動系統(tǒng)、修復(fù)系統(tǒng)等。(3)?/dev目錄。該目錄下存放的是設(shè)備文件。設(shè)備文件是Linux中特有的文件類型,在Linux系統(tǒng)下,以文件的方式訪問各種外設(shè)。第16章移植嵌入式操作系統(tǒng)(4)?/etc目錄。該目錄下存放各種配置文件。對于PC上的Linux系統(tǒng),/etc目錄下的目錄文件非常多,這些目錄、文件都是可選的,它們依賴于系統(tǒng)中所擁有的應(yīng)用程序,依賴于這些程序是否需要配置。(5)?/lib目錄。該目錄下存放共享和可加載模塊(即驅(qū)動程序),共享用于啟動系統(tǒng)、運行根文件系統(tǒng)中的可執(zhí)行程序。(6)
/home目錄。用戶目錄是可選的,對于每個用戶,在該目錄下都有一個以用戶名命名的子目錄,里面放著用戶相關(guān)的配置文件。第16章移植嵌入式操作系統(tǒng)(7)?/root目錄。根用戶的目錄(用戶名為root),與此對應(yīng),普通用戶的目錄是/home下的某個子目錄。(8)?/usr目錄。該目錄的內(nèi)容可以存放在另一個分區(qū)中,在系統(tǒng)啟動后再掛接到根目錄中的?/usr目錄下。它里面存放的是共享、只讀的程序和數(shù)據(jù),這表明該目錄下的內(nèi)容可以在多個主機間共享,這些主機也是符合FHS標(biāo)準(zhǔn)的。(9)?/var目錄。與/usr目錄相反,該目錄中存放可變的數(shù)據(jù),比如spool目錄、log文件、臨時文件等。第16章移植嵌入式操作系統(tǒng)(10)?/proc目錄。該目錄常作為proc文件系統(tǒng)的掛接點。proc文件系統(tǒng)是個虛擬的文件系統(tǒng),它沒有實際的存儲設(shè)備,里面的目錄、文件都是由內(nèi)核臨時生成的,用來表示系統(tǒng)運行狀態(tài),也可以操作其中的文件控制系統(tǒng)。(11)?/mnt目錄。該目錄用于臨時掛接某個文件系統(tǒng)的掛接點,通常是空的;也可以在里面創(chuàng)建一些空的子目錄。(12)?/tmp目錄。該目錄用來存放臨時文件,通常是空的。一些需要生成臨時文件的程序要用到該目錄,所以該目錄必須存在并可以訪問。第16章移植嵌入式操作系統(tǒng)16.3.1移植Busybox
所謂制作根文件系統(tǒng),就是創(chuàng)建各種目錄,并且在里面創(chuàng)建各種文件。比如在/bin、/sbin目錄下存放各種可執(zhí)行程序,在?/etc目錄下存放配置文件,在/lib目錄下存放庫文件。Busybox是一個遵循GPLv2協(xié)議的開源項目。Busybox將眾多的命令集合進一個很小的可執(zhí)行程序中,可以用來替換GUNfileutiles、shellutils等工具集。Busybox中各種命令與相應(yīng)的GUN工具相比,所能提供的選項較少,但是能夠滿足一般應(yīng)用。Busybox為各種小型的或者嵌入式系統(tǒng)提供了一個比較完整的開發(fā)工具集。第16章移植嵌入式操作系統(tǒng)安裝Busybox從網(wǎng)站上下載源碼包(busybox-1.23.2.tar.bz2),在Linux系統(tǒng)下對其進行解壓,解壓后會在當(dāng)前目錄下生成busybox-1.23.2目錄,其下存放著所有的文件及相關(guān)目錄。進入busybox-1.23.2目錄,通過運行“makemenuconfig”命令啟動Busybox的配置菜單。Busybox的配置菜單與內(nèi)核的配置菜單很相似,它們都采用了相同的基于ncurses的應(yīng)用程序。第16章移植嵌入式操作系統(tǒng)2.配置Busybox
與Linux內(nèi)核的配置類似,Busybox的配置也是一件比較繁瑣的事情,對各選項的選擇要謹(jǐn)慎。例如,在實際操作過程中,Busybox下“Systemutiles->acpid”是不被選中的,如果選擇了此項,編譯時就不會通過。出現(xiàn)這種現(xiàn)象的原因是多方面的,可能是Busybox本身的問題,也可能是與交叉編譯工具的兼容問題。有時交叉編譯工具選擇不恰當(dāng),即使本身沒有問題,編譯也會出現(xiàn)問題。配置完成后需要保存退出。第16章移植嵌入式操作系統(tǒng)3.向Busybox添加新命令添加的步驟:為新命令的源代碼選擇一個位置,這里要根據(jù)命令的類型,比如是網(wǎng)絡(luò)類還是shell等來選擇存放位置,并與其他命令保持一致。將這個新命令的源代碼添加到所選子目錄的Makefile.in中。(3)更新?./miscutils目錄中的配置文件,以便讓新命令在Busybox的配置菜單中出現(xiàn)。(4)更新?./include/apolets.h文件,使其包含新命令。(5)向?./include/usage.h文件中添加詳細(xì)的幫助信息。(6)啟用新命令。第16章移植嵌入式操作系統(tǒng)4.編譯安裝BusyboxBusybox的編譯安裝很簡單,用下面的命令即可完成。#make#makeinstall
注意:當(dāng)使用動態(tài)鏈接方式編譯時,要把交叉編譯所需的動態(tài)鏈接庫文件復(fù)制到對應(yīng)目錄中,這樣才能保證程序的正確運行。如果選擇的是靜態(tài)鏈接方式,所需的庫已經(jīng)與程序靜態(tài)鏈接在一起,這些程序不需要額外的庫就可以單獨運行。第16章移植嵌入式操作系統(tǒng)16.3.2構(gòu)造根文件系統(tǒng)創(chuàng)建根文件系統(tǒng)的步驟:(1)創(chuàng)建頂層目錄結(jié)構(gòu)。一般在Busybox的安裝目錄“_install”下已經(jīng)有“bin”、“sbin”和“usr”3個目錄。用下面的命令可創(chuàng)建其他一些系統(tǒng)需要用到的目錄。 #cd_install #mkdiretcdevproclibvartmpsys這里創(chuàng)建了一個名稱為“l(fā)ib”的目錄。如果使用了動態(tài)鏈接,就需要將系統(tǒng)運行所需的文件放入此目錄。第16章移植嵌入式操作系統(tǒng)(2)創(chuàng)建設(shè)備節(jié)點。Linux系統(tǒng)中的任何對象(包括大部分設(shè)備)都以文件的方式存取。為此,需要為系統(tǒng)的設(shè)備在/dev目錄下建立設(shè)備文件節(jié)點。具體代碼如下: #cddev #mknodram0b10 #mknodconsolec51 #mknodnullc13 #mknodzeroc15上面所創(chuàng)建的設(shè)備節(jié)點是嵌入式Linux運行時可能會用到的幾個設(shè)備節(jié)點。第16章移植嵌入式操作系統(tǒng)(3)創(chuàng)建inittab。inittab是init程序讀取的配置文件。init是內(nèi)核啟動后運行的第一個程序。所有的應(yīng)用程序都是它的子程序,它在系統(tǒng)運行期間一直駐留在內(nèi)存里運行,直到系統(tǒng)關(guān)閉。下面的命令在“/etc”目錄下創(chuàng)建inittab文件: #cdetc #viinittab ::sysinit:/etc/init.d/rcS ::askfirst:/bin/sh 第16章移植嵌入式操作系統(tǒng)(4)建立sysinit動作項執(zhí)行的命令腳本。sysinit動作項指定的命令是指定在系統(tǒng)初始化時執(zhí)行的命令,通常這個命令使用腳本實現(xiàn)。對于前述的inittab應(yīng)在“/etc/init.d”目錄下創(chuàng)建一個名為“rcS”的腳本,具體代碼如下: #mkdirinit.d #viinit.d/rcS #!/bin/sh mount-tprocproc/proc mount-tsysfssysfs/sys ifconfiglo ifconfigetho00 #chmod+xrcS第16章移植嵌入式操作系統(tǒng)16.3.3創(chuàng)建根文件系統(tǒng)映像Linux支持多種格式的文件系統(tǒng),在嵌入式Linux中常用的文件格式有ext2、minix、romfs、cramfs、jffs2以及nfs等。其中,ext2、minix、romfs三種格式的文件系統(tǒng)較常用于Ramdisk中;jffs2文件系統(tǒng)是基于一種Flash的日志文件系統(tǒng);nfs是一種網(wǎng)絡(luò)文件系統(tǒng),它常用于嵌入式Linux的開發(fā)調(diào)試。第16章移植嵌入式操作系統(tǒng)ext2格式的文件系統(tǒng)映像常在嵌入式Linux系統(tǒng)啟動時加載到initrd中,隨后內(nèi)核將其加載成為根文件系統(tǒng),創(chuàng)建ext2格式文件系統(tǒng)映像的指令如下: #mkdirinitrd #cdinitrd #ddif=/dev/zero/of=initrdbs=1kcount=2048 #mkfs.ext2initrd-F #mkdirinitrdinitrd_mmt-oloop #cp-a../_install/*initrd_mmt #umountinitrd #gzip-c9initrd>initrd.gz第16章移植嵌入式操作系統(tǒng)命令解釋:
首先用命令創(chuàng)建一個2MB的二進制空文件initrd,然后用mkfs.ext2把initrd文件作為虛擬塊設(shè)備格式化為ext2文件系統(tǒng)格式。接下來,就是通過loop設(shè)備將initrd文件安裝到一個子目錄,然后將前面已經(jīng)制作好的根文件系統(tǒng)內(nèi)容復(fù)制到安裝目錄中,最后將initrd卸載。這樣,就可以構(gòu)造一個文件格式為ext2的文件映像。第16章移植嵌入式操作系統(tǒng)16.4下載內(nèi)核U-Boot除了可以完成從“裸板”引導(dǎo)的任務(wù)外,還可以完成下載Linux內(nèi)核鏡像和文件系統(tǒng)到試驗板上的Flash中的任務(wù)。其方法是使用U-boot提供的命令,但是U-Boot一般不支持iImage和bzImage格式的文件,要經(jīng)過轉(zhuǎn)換之后才可以使用。第16章移植嵌入式操作系統(tǒng)使用U-Boot制作和下載內(nèi)核U-Boot有一個很重要的特點,即支持網(wǎng)絡(luò)功能,通過網(wǎng)絡(luò)下載數(shù)據(jù)要比通過串口下載數(shù)據(jù)快得多。但是,U-Boot所支持的內(nèi)核文件格式是uImage,不是通常的iImage和bzImage格式。從iImage、bzImage格式到uImage格式的制作工具——mkimage,使用這個工具并不需要重新編譯內(nèi)核,只需通過對已編譯好的內(nèi)核映像文件進行格式轉(zhuǎn)換即可。mkimage在制作映像文件的時候,是在原來的可執(zhí)行映像文件的前面加上一個0x40字節(jié)的頭,記錄參數(shù)所指定的信息。其命令的格式如下:格式一:./mkimage-iimagename 其中,-i列出了imagename文件的頭信息。第16章移植嵌入式操作系統(tǒng)格式二:./mkimage-Aarch-Oos-Ttype-Ccomp-aaddr-eep-nname-ddata_file[:data_file...]image其中,參數(shù)說明如下:-A:設(shè)定架構(gòu)類型;-O:設(shè)定操作系統(tǒng)類型;-T:image類型;-a:指定image在內(nèi)存中的加載地址;-e:指定image運行的入口點地址;-C:指定壓縮方式;-ddata_file[:data_file...]:制作image的源文件。第16章移植嵌入式操作系統(tǒng)2.啟動Linux內(nèi)核
內(nèi)核下載并燒寫成功以后,就可以啟動內(nèi)核進行測試了。由上述燒寫過程可知,燒寫完的內(nèi)核位于Flash中某段地址,可通過運行U-Boot的bootm命令啟動內(nèi)核。第16章移植嵌入式操作系統(tǒng)16.5使用U-Boot加載根文件系統(tǒng)和映像
使用U-Boot加載根文件系統(tǒng)映像與使用U-Boot加載內(nèi)核的步驟類似,同樣是先下載到內(nèi)存。假設(shè)在內(nèi)存中的首地址為0xa1000000,然后再由內(nèi)存燒寫到Flash中,假設(shè)在Flash中的首地址為0x002c0000。這里根文件系統(tǒng)映像文件為initrd.gz,文件系統(tǒng)采用了Ramdisk技術(shù)。具體的操作指令如下:第16章移植嵌入式操作系統(tǒng)=>tftpa1000000initrd.gzTFTPfromserver07;ourIPaddressis4Filename'initrd.gz'Loa
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度公益崗位用工合作協(xié)議3篇
- 2025年度電商平臺會員消費返利協(xié)議3篇
- 2025年度廢塑料瓶回收與環(huán)保瓶蓋生產(chǎn)合同樣板3篇
- 二零二五年度農(nóng)機智能化作業(yè)合同書3篇
- 二零二五年度電子信息產(chǎn)品開發(fā)合作協(xié)議書2篇
- 二零二五年度消防安全風(fēng)險評估與整改方案協(xié)議3篇
- 農(nóng)村土地經(jīng)營權(quán)抵押貸款擔(dān)保合同
- 2025年度醫(yī)藥研發(fā)人員競業(yè)禁止勞動合同書3篇
- 2025年度餐飲業(yè)食品安全責(zé)任書3篇
- 二零二五年度歷史文化名城拆遷房產(chǎn)分割與文物保護合同3篇
- 鐵路線路及站場第三章道岔課件
- 西南交通大學(xué)年《數(shù)字信號處理》經(jīng)典例題及答案解析
- 養(yǎng)生館顧客檔案表格資料
- 海螺牌水泥質(zhì)量檢驗報告28天報告425加章2015
- 免洗手消毒凝膠生產(chǎn)工藝規(guī)程
- 安裝工程定額講義
- 乒乓球比賽第二階段對陣圖表
- 機制砂檢測報告
- 省教育廳檢查組接待方案
- 氣動潛孔錘施工方案
- 云南省教育科學(xué)規(guī)劃課題開題報告 - 云南省教育科學(xué)研究院
評論
0/150
提交評論