嵌入式linux系統(tǒng)開發(fā)詳解-第15章解析內(nèi)核_第1頁
嵌入式linux系統(tǒng)開發(fā)詳解-第15章解析內(nèi)核_第2頁
嵌入式linux系統(tǒng)開發(fā)詳解-第15章解析內(nèi)核_第3頁
嵌入式linux系統(tǒng)開發(fā)詳解-第15章解析內(nèi)核_第4頁
嵌入式linux系統(tǒng)開發(fā)詳解-第15章解析內(nèi)核_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第15章解析Linux內(nèi)核15.1基本知識(shí)15.2Linux內(nèi)核的子系統(tǒng)15.3Linux內(nèi)核代碼的工程結(jié)構(gòu)15.4內(nèi)核編譯系統(tǒng)15.1基本知識(shí)15.1.1什么是Linux內(nèi)核15.1.2Linux內(nèi)核版本15.1.3如何獲取Linux內(nèi)核代碼15.1.4編譯內(nèi)核15.1.1什么是Linux內(nèi)核內(nèi)核是操作系統(tǒng)的核心部分,為應(yīng)用程序提供安全訪問硬件資源的功能。直接操作計(jì)算機(jī)硬件是很復(fù)雜的,內(nèi)核通過硬件抽象的方法屏蔽了硬件的復(fù)雜性和多樣性。通過硬件抽象的方法,內(nèi)核向應(yīng)用程序提供了統(tǒng)一和簡潔的接口,應(yīng)用程序設(shè)計(jì)復(fù)雜程度降低。Linux內(nèi)核最早是芬蘭大學(xué)生LinusTorvalds由于個(gè)人興趣編寫的,并且在1991年發(fā)布。從Linux0.12版本開始,使用GNU()的GPL(通用公共許可協(xié)議)自由軟件許可協(xié)議。15.1.2Linux內(nèi)核版本Linux內(nèi)核版本號(hào)采用兩個(gè)“.”分割的3個(gè)數(shù)字來標(biāo)示,形式為X.Y.Z。其中,X是主要版本號(hào),Y是次要版本號(hào),Z代表補(bǔ)丁版本號(hào)。奇數(shù)代表不穩(wěn)定的版本;偶數(shù)代表穩(wěn)定的版本。15.1.3如何獲取Linux內(nèi)核代碼Linux內(nèi)核代碼的官方站點(diǎn)是。下載Linux內(nèi)核代碼后,會(huì)得到一個(gè)類似linux-2.6.xx.tar.gz或者linux-2.6.xx-tar.bz2形式的壓縮文件,xx代表版本號(hào)。在Linux系統(tǒng)上,通常把這個(gè)文件存放在/usr/src目錄下,便于以后使用。15.1.4編譯內(nèi)核內(nèi)核編譯主要分成配置和編譯兩部分,其中配置是關(guān)鍵,許多問題都是出在配置環(huán)節(jié)。Linux內(nèi)核編譯配置提供多種方式:makeconfig:基于傳統(tǒng)的文本界面配置方式;makemenuconfig:基于文本模式下的圖形選單界面;makexconfig:基于圖形窗口模式的配置界面;makeoldconfig:導(dǎo)入已有的配置。15.2Linux內(nèi)核的子系統(tǒng)15.2.1系統(tǒng)調(diào)用接口15.2.2進(jìn)程管理子系統(tǒng)15.2.3內(nèi)存管理子系統(tǒng)15.2.4虛擬文件系統(tǒng)15.2.5網(wǎng)絡(luò)堆棧15.2.6設(shè)備驅(qū)動(dòng)15.2.7依賴體系結(jié)構(gòu)的代碼15.2.1系統(tǒng)調(diào)用接口用戶程序通過軟件中斷后,調(diào)用系統(tǒng)內(nèi)核提供的功能,這個(gè)在用戶空間和內(nèi)核提供的服務(wù)之間的接口稱為系統(tǒng)調(diào)用。15.2.2進(jìn)程管理子系統(tǒng)Linux內(nèi)核通過進(jìn)程管理子系統(tǒng)實(shí)現(xiàn)了進(jìn)程有關(guān)的操作。Linux系統(tǒng)是一種動(dòng)態(tài)系統(tǒng),通過進(jìn)程管理能夠適應(yīng)不斷變化的計(jì)算需求。在一個(gè)系統(tǒng)上可以有多個(gè)進(jìn)程,但是一般情況下只有一個(gè)CPU,在同一個(gè)時(shí)刻只能有一個(gè)進(jìn)程在工作,即使有多個(gè)CPU,也不可能和進(jìn)程的數(shù)量一樣多。如果讓若干的進(jìn)程都能在CPU上工作,這就是進(jìn)程管理子系統(tǒng)的工作。15.2.3內(nèi)存管理子系統(tǒng)Linux內(nèi)核的內(nèi)存管理子系統(tǒng)管理虛擬內(nèi)存與物理內(nèi)存之間的映射關(guān)系,以及系統(tǒng)可用內(nèi)存空間。為了解決物理內(nèi)存被耗盡的問題,內(nèi)存管理子系統(tǒng)規(guī)定頁面可以移出內(nèi)存并放入磁盤中,這個(gè)過程稱為交換。15.2.4虛擬文件系統(tǒng)虛擬文件系統(tǒng)屏蔽了不同文件系統(tǒng)間的差異,向用戶提供了統(tǒng)一的接口。虛擬文件系統(tǒng),即VFS(VirtualFileSystem)是Linux內(nèi)核中的一個(gè)軟件抽象層。通過使用同一套文件I/O系統(tǒng)調(diào)用即可對(duì)Linux中的任意文件進(jìn)行操作而無須考慮其所在的具體文件系統(tǒng)格式;更進(jìn)一步,文件操作可以在不同文件系統(tǒng)之間進(jìn)行。15.2.5網(wǎng)絡(luò)堆棧socket相關(guān)的函數(shù)也是通過內(nèi)核的子系統(tǒng)完成的,擔(dān)當(dāng)這部分任務(wù)的是內(nèi)核的網(wǎng)絡(luò)子系統(tǒng),一些資料里也把這部分代碼稱為“網(wǎng)絡(luò)堆棧”。Linux的網(wǎng)絡(luò)堆棧部分沿襲了傳統(tǒng)的層次結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)從用戶進(jìn)程到達(dá)實(shí)際的網(wǎng)絡(luò)設(shè)備需要4個(gè)層次。Linux內(nèi)核網(wǎng)絡(luò)子系統(tǒng)定義了4個(gè)實(shí)體:網(wǎng)絡(luò)協(xié)議套接字設(shè)備接口網(wǎng)絡(luò)緩沖區(qū)15.2.6設(shè)備驅(qū)動(dòng)Linux內(nèi)核把設(shè)備分成3類:塊設(shè)備、字符設(shè)備和網(wǎng)絡(luò)設(shè)備。Linux內(nèi)核對(duì)設(shè)備按照主設(shè)備號(hào)和從設(shè)備號(hào)的方法訪問,主設(shè)備號(hào)描述控制設(shè)備的驅(qū)動(dòng)程序,從設(shè)備號(hào)區(qū)分同一個(gè)驅(qū)動(dòng)程序的不同設(shè)備。15.2.7依賴體系結(jié)構(gòu)的代碼Linux內(nèi)核支持眾多體系結(jié)構(gòu),內(nèi)核把與設(shè)備無關(guān)的代碼放在arch目錄下,對(duì)應(yīng)的頭文件放在include/asm-<體系名稱>目錄下。在arch目錄里,每個(gè)子目錄對(duì)應(yīng)一種體系結(jié)構(gòu),存放這種體系結(jié)構(gòu)對(duì)應(yīng)的代碼。15.3Linux內(nèi)核代碼的工程結(jié)構(gòu)15.3.1源代碼目錄布局15.3.2幾個(gè)重要的Linux內(nèi)核文件15.3.1源代碼目錄布局目錄名稱作

用arch這個(gè)子目錄包含了此核心源代碼所支持的硬件體系結(jié)構(gòu)相關(guān)的核心代碼。如對(duì)于X86平臺(tái)就是i386include這個(gè)目錄包括了核心的大多數(shù)include文件。另外對(duì)于每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄init此目錄包含核心啟動(dòng)代碼mm此目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下,如對(duì)應(yīng)于X86的就是arch/i386/mm/fault.cdrivers系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)都位于此目錄中。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),每一種也有對(duì)應(yīng)的子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/soundipc此目錄包含了核心的進(jìn)程間通信代碼modules此目錄包含已建好可動(dòng)態(tài)加載的模塊fsLinux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)由不同的子目錄對(duì)應(yīng),如ext2文件系統(tǒng)對(duì)應(yīng)的就是ext2子目錄kernel主要核心代碼。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下net核心的網(wǎng)絡(luò)部分代碼。里面的每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面lib此目錄包含了核心的庫代碼。與處理器結(jié)構(gòu)相關(guān)庫代碼被放在arch/*/lib/目錄下scripts此目錄包含用于配置核心的腳本文件Documentation此目錄是一些文檔,起參考作用15.3.2幾個(gè)重要的Linux內(nèi)核文件當(dāng)用戶編譯一個(gè)Linux內(nèi)核代碼后,會(huì)生成幾個(gè)文件:vmlinuz、initrd.img,以及System.map,如果讀者配置過grub引導(dǎo)管理器程序,會(huì)在/boot目錄下看到這幾個(gè)文件。1.vmlinuz文件2.initrd文件3.System.map文件1.vmlinuz文件vmlinuz文件是可引導(dǎo)的、壓縮的內(nèi)核文件,該文件僅包含了一個(gè)最小功能的內(nèi)核,在PC上通常是先執(zhí)行vmlinuz,之后加載initrd.img文件,最后加載根分區(qū)。2.initrd文件initrd是initialramdisk的縮寫,就是由Bootloader初始化的內(nèi)存盤。在Linux內(nèi)核啟動(dòng)之前,Bootloader會(huì)把存儲(chǔ)介質(zhì)(例如閃存)中的initrd文件加載到內(nèi)存,內(nèi)核啟動(dòng)時(shí)會(huì)在訪問到真正的根文件系統(tǒng)前訪問內(nèi)存中的initrd文件系統(tǒng)。如果Bootloader配置了initrd,內(nèi)核啟動(dòng)被分成兩個(gè)階段:第一階段先加載initrd文件系統(tǒng)中的驅(qū)動(dòng)程序模塊;第二階段才會(huì)執(zhí)行真正的根文件系統(tǒng)中的/sbin/init進(jìn)程。3.System.map文件System.map是內(nèi)核符號(hào)表,對(duì)應(yīng)一個(gè)內(nèi)核vmlinuz映像。System.map文件是通過nmvmlinux命令生成的。在進(jìn)行程序設(shè)計(jì)的時(shí)候,會(huì)命名變量和函數(shù),在編譯以后會(huì)生成符號(hào)表。Linux內(nèi)核也會(huì)生成符號(hào)表,但是Linux工作的時(shí)候并不使用這些符號(hào)表,而是通過地址來標(biāo)識(shí)變量或者函數(shù)的。15.4內(nèi)核編譯系統(tǒng)15.4.1內(nèi)核編譯系統(tǒng)基本架構(gòu)15.4.2內(nèi)核頂層Makefile分析15.4.3內(nèi)核編譯文件分析15.4.4目標(biāo)文件清除機(jī)制15.4.5編譯輔助程序15.4.6KBuild變量15.4.1內(nèi)核編譯系統(tǒng)基本架構(gòu)Linux內(nèi)核編譯系統(tǒng)有5種類型的文件,請(qǐng)參考表。文件類型作

用Makefile頂層Makefile文件.config內(nèi)核配置文件arch/$(ARCH)/Makefile機(jī)器體系Makefile文件scripts/Makefile.*所有內(nèi)核Makefiles共用規(guī)則kbuildMakefiles其他Makefile文件15.4.2內(nèi)核頂層Makefile分析內(nèi)核編譯一般會(huì)按照7個(gè)大步驟執(zhí)行:(1)配置內(nèi)核,產(chǎn)生.config配置文件;(2)保存內(nèi)核版本到include/linux/version.h文件中;(3)建立符號(hào)鏈接到include/asmtoinclude/asm-$(ARCH);(4)更新定義在arch/$(ARCH)/Makefile所有目標(biāo)對(duì)象的前提文件;(5)遞歸進(jìn)入init-*

core*

drivers-*

net-*

libs-*中的所有子目錄和編譯所有的目標(biāo)對(duì)象;(6)鏈接所有的object文件生成vmlinux文件,并且復(fù)制到內(nèi)核代碼根目錄下。最開始鏈接的幾個(gè)object文件列舉在arch/$(ARCH)/Makefile文件的head-y變量中;(7)最后體系Makefile文件定義編譯后期處理規(guī)則和建立最終的引導(dǎo)映像bootimage,包括創(chuàng)建引導(dǎo)記錄,準(zhǔn)備initrd映像和相關(guān)處理等。1.設(shè)置變量頂層Makefile定義了一些編譯內(nèi)核基本的變量,也是公共用到的變量。LDFLAGS變量LDFLAGS_MODULE變量LDFLAGS_vmlinux變量OBJCOPYFLAGS變量AFLAGS變量CFLAGS變量2.增加預(yù)設(shè)置項(xiàng)在開始進(jìn)入子目錄編譯之前需要調(diào)用prepare規(guī)則生成編譯需要的前提文件。前提文件是包含匯編常量的頭文件。#arch/s390/Makefileprepare:include/asm-$(ARCH)/offsets.h3.目錄表頂層Makefile定義了所有通用目錄,arch/$(ARCH)/Makefile文件只需增加體系相關(guān)的目錄。#arch/sparc64/Makefilecore-y+=arch/sparc64/kernel/libs-y+=arch/sparc64/prom/arch/sparc64/lib/drivers-$(CONFIG_OPROFILE)+=arch/sparc64/oprofile/4.引導(dǎo)映像Makefile文件定義了編譯vmlinux目標(biāo)文件需要的代碼文件,將它們壓縮和封裝成引導(dǎo)代碼,并復(fù)制到合適的位置。這包括各種安裝命令。如何定義實(shí)際的目標(biāo)對(duì)象無法為所有的體系結(jié)構(gòu)提供標(biāo)準(zhǔn)化的方法。處理過程常位于arch/$(ARCH)/下的boot/目錄下。5.編譯非內(nèi)核目標(biāo)extra-y定義了在當(dāng)前目錄下創(chuàng)建沒有在obj-*定義的附加的目標(biāo)文件。使用extra-y列舉目標(biāo)有兩個(gè)目的:一個(gè)是內(nèi)核編譯系統(tǒng)在命令行中檢查變動(dòng)情況,另一個(gè)是向makeclean提供刪除的文件列表。#arch/i386/kernel/Makefileextra-y:=head.oinit_task.o6.編譯引導(dǎo)映像命令Kbuild提供了編譯內(nèi)核需要的宏。if_changed是后面命令使用的基礎(chǔ)。用法如下:target:source(s)FORCE$(callif_changed,ld/objcopy/gzip)7.定制編譯命令當(dāng)執(zhí)行帶KBUILD_VERBOSE=0參數(shù)的編譯命令時(shí),會(huì)顯示簡短的命令提示。如果用戶定制的命令需要這種功能需要設(shè)置如下兩個(gè)變量:quiet_cmd_<command>

//存放將被顯示的內(nèi)容cmd_<command>

//被執(zhí)行的命令8.預(yù)處理鏈接腳本當(dāng)編譯vmlinux映像時(shí)將使用arch/$(ARCH)/kernel/vmlinux.lds鏈接腳本。相同目錄下的vmlinux.lds.S文件是這個(gè)腳本的預(yù)處理的變體。內(nèi)核編譯系統(tǒng)知曉.lds文件并使用規(guī)則*lds.S->*lds。#arch/i386/kernel/Makefilealways:=vmlinux.lds#MakefileexportCPPFLAGS_vmlinux.lds+=-P-C-U$(ARCH)15.4.3內(nèi)核編譯文件分析Linux內(nèi)核代碼使用KBuild作為Makefile的基礎(chǔ)架構(gòu)。Kbuild定義了若干的內(nèi)置變量。1.目標(biāo)定義2.內(nèi)嵌對(duì)象-obj-y3.可加載模塊-obj-m4.導(dǎo)出符號(hào)目標(biāo)5.庫文件-lib-y6.目錄遞歸7.編譯標(biāo)記8.依賴關(guān)系9.特殊規(guī)則10.$(CC)支持功能1.目標(biāo)定義Makefile文件的核心是目標(biāo)定義。目標(biāo)定義的主要功能是定義如何編譯文件、設(shè)置編譯選項(xiàng)以及遞歸子目錄的方法等。在使用Kbuild架構(gòu)的Makefile文件里,最簡單的Makefile可以只包含一行配置:obj-y+=foo.o2.內(nèi)嵌對(duì)象-obj-y$obj-y是用于存放編譯生成vmlinux的目標(biāo)文件的列表,列表的內(nèi)容由內(nèi)核編譯配置決定。Kbuild編譯$(obj-y)列表內(nèi)的所有文件,之后使用“$(LD)–r”命令把目標(biāo)文件打包到built-in.o一個(gè)文件中。built-in.o文件最終被鏈接到vmlinux目標(biāo)文件。3.可加載模塊-obj-m$(obj-m)表示對(duì)象文件(objectfiles)編譯成可加載的內(nèi)核模塊。一個(gè)模塊可以通過一個(gè)源文件或幾個(gè)源文件編譯而成。Makefile只需簡單地把它們加到$(obj-m)。#drivers/isdn/i4l/Makefileobj-$(P)+=p.o4.導(dǎo)出符號(hào)目標(biāo)在Makefile文件中沒有特別導(dǎo)出符號(hào)的標(biāo)記。5.庫文件-lib-yobj-*中的object文件用于模塊或built-in.o編譯。object文件也可能編譯到庫文件中--lib.a。所有羅列在lib-y中的object文件都將編譯到該目錄下的一個(gè)單一的庫文件中。包含在0bj-y中的object文件如果也列舉在lib-y中將不會(huì)包含到庫文件中,因?yàn)樗鼈儾荒鼙辉L問。但lib-m中的object文件將被編譯進(jìn)lib.a庫文件。6.目錄遞歸Makefile文件負(fù)責(zé)編譯當(dāng)前目錄下的目標(biāo)文件,子目錄中的文件由子目錄中的Makefile文件負(fù)責(zé)編譯。編譯系統(tǒng)將使用obj-y和obj-m自動(dòng)遞歸編譯各個(gè)子目錄中文件。如果ext2是一個(gè)子目錄,fs目錄下的Makefile將使用以下賦值語句編譯系統(tǒng)編譯ext2子目錄。例如:#fs/Makefileobj-$(CONFIG_EXT2_FS)+=ext2/7.編譯標(biāo)記所有的EXTRA_變量只能使用在定義該變量后的Makefile文件中。EXTRA_變量被Makefile文件所有的執(zhí)行命令語句所使用。$(EXTRA_CFLAGS)是使用$(CC)編譯C文件的選項(xiàng)。#drivers/sound/emu10k1/MakefileEXTRA_CFLAGS+=-I$(obj)ifdefDEBUGEXTRA_CFLAGS+=-DEMU10K1_DEBUGendif8.依賴關(guān)系內(nèi)核編譯記錄如下依賴關(guān)系:所有的前提文件(both*.cand*.h);CONFIG_選項(xiàng)影響到的所有文件;編譯目標(biāo)文件使用的命令行。因此,假如改變$(CC)的一個(gè)選項(xiàng),所有相關(guān)的文件都要重新編譯。9.特殊規(guī)則特殊規(guī)則使用在內(nèi)核編譯需要規(guī)則定義而沒有相應(yīng)定義的時(shí)候,典型的例子如編譯時(shí)頭文件的產(chǎn)生規(guī)則。其他例子有體系Makefile編譯引導(dǎo)映像的特殊規(guī)則。定義特殊規(guī)則時(shí)將使用到兩個(gè)變量:$(src)和$(obj)。$(src)是對(duì)于Makefile文件目錄的相對(duì)路徑,當(dāng)使用代碼樹中的文件時(shí)使用該變量$(src)。$(obj)是目標(biāo)文件目錄的相對(duì)路徑。生成文件使用$(obj)變量。10.$(CC)支持功能內(nèi)核可能會(huì)用不同版本的$(CC)進(jìn)行編譯,每個(gè)版本有不同的性能和選項(xiàng),內(nèi)核編譯系統(tǒng)提供基本的支持用于驗(yàn)證$(CC)選項(xiàng)。$(CC)通常是gcc編譯器,但其他編譯器也可以。另外提供了幾種與$(CC)有關(guān)的功能。cc-optioncc-option-yncc-option-aligncc-version15.4.4目標(biāo)文件清除機(jī)制"makeclean"命令刪除在編譯內(nèi)核生成的大部分文件如主機(jī)程序。列舉在$(hostprogs-y)、$(hostprogs-m)、$(always)、$(extra-y)和$(targets)中目標(biāo)文件都將被刪除。代碼目錄數(shù)中的"*.[oas]"、"*.ko"文件和一些由編譯系統(tǒng)產(chǎn)生的附加文件也將被刪除。附加文件可以使用$(clean-files)進(jìn)行定義。15.4.5編譯輔助程序內(nèi)核編譯系統(tǒng)支持在編譯(compliation)階段編譯主機(jī)可執(zhí)行程序。為了使用主機(jī)程序需要2個(gè)步驟:第1個(gè)步驟使用hostprogs-y變量告訴內(nèi)核編譯系統(tǒng)有主機(jī)程序可用。第2步給主機(jī)程序添加潛在的依賴關(guān)系。1.簡單輔助程序2.組合輔助程序3.定義共享庫4.C++語言使用方法5.輔助程序編譯控制選項(xiàng)6.何時(shí)建立輔助程序7.使用hostprogs-$(CONFIG_FOO)1.簡單輔助程序在一些情況下需要在主機(jī)上編譯和運(yùn)行主機(jī)程序。下面這行告訴Kbuild在主機(jī)上建立bin2hex程序。例如:hostprogs-y:=bin2hex2.組合輔助程序主機(jī)程序也可以由多個(gè)object文件組成。定義組合輔助程序的語法同內(nèi)核對(duì)象的定義方法。$(<executeable>-objs)包含了所有的用于鏈接最終可執(zhí)行程序的對(duì)象。#scripts/lxdialog/Makefilehostprogs-y:=lxdialoglxdialog-objs:=checklist.olxdialog.o3.定義共享庫擴(kuò)展名為.so的對(duì)象是共享庫文件,并且是位置無關(guān)的object文件。內(nèi)核編譯系統(tǒng)提供共享庫使用支持,但使用方法有限制。在下面例子中l(wèi)ibkconfig.so庫文件被鏈接到可執(zhí)行文件conf中。#scripts/kconfig/Makefilehostprogs-y:=confconf-objs:=conf.olibkconfig.solibkconfig-objs:=expr.otype.o4.C++語言使用方法內(nèi)核編譯系統(tǒng)提供了對(duì)C++主機(jī)程序的支持以用于內(nèi)核配置,但不主張其他方面使用這種方法。#scripts/kconfig/Makefilehostprogs-y:=qconfqconf-cxxobjs:=qconf.o5.輔助程序編譯控制選項(xiàng)當(dāng)編譯主機(jī)程序時(shí)仍然可以使用$(HOSTCFLAGS)設(shè)置編譯選項(xiàng)傳遞給$(HOSTCC)。這些選項(xiàng)將影響所有使用變量HOST_EXTRACFLAG的Makefile創(chuàng)建的主機(jī)程序。#scripts/lxdialog/MakefileHOST_EXTRACFLAGS+=

-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論