




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Linux設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)第一章 簡介,參考書籍,Linux設(shè)備驅(qū)動(dòng)程序(第三版) Jonatban Corbet等著 魏永明等譯 中國電力出版社 Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解(第二版) 宋寶華著 人民郵電出版社 Linux設(shè)備驅(qū)動(dòng)開發(fā)技術(shù)及應(yīng)用 (韓)俞永昌著 人民郵電出版社 Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(第二版) Robert Love著 陳莉君等譯,Linux設(shè)備驅(qū)動(dòng)的現(xiàn)狀,高需求 Linux內(nèi)核的絕大多數(shù)代碼為設(shè)備驅(qū)動(dòng) 新設(shè)備、新芯片、新驅(qū)動(dòng)的需求 高門檻 涉及到大量硬件操作 涉及到內(nèi)核基礎(chǔ)知識 涉及到并發(fā)控制與同步 復(fù)雜的軟件結(jié)構(gòu)框架 高回報(bào),內(nèi)核空間和用戶空間,系統(tǒng)態(tài):在Linux系統(tǒng)中
2、,內(nèi)核在最高級執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級任何操作都可以執(zhí)行。 用戶態(tài):而應(yīng)用程序則用戶態(tài)執(zhí)行在最低級,所謂的“用戶態(tài)”,在這一級處理器禁止對硬件的直接訪問和對內(nèi)存的未授權(quán)訪問。 內(nèi)核空間:模塊運(yùn)行的空間是在所謂的“內(nèi)核空間”; 用戶空間:應(yīng)用程序運(yùn)行的空間是在“用戶空間” 。 它們分別引用不同的內(nèi)存映射,也就是程序代碼使用不同的“地址空間”。,Linux內(nèi)核功能劃分,進(jìn)程管理 內(nèi)存管理 文件系統(tǒng) 設(shè)備管理 網(wǎng)絡(luò)連接(strcut net_device),Linux內(nèi)核功能,進(jìn)程管理 進(jìn)程管理負(fù)責(zé)創(chuàng)建和銷毀進(jìn)程,并處理它們與外界之間的通信 控制進(jìn)程如何共享CPU的調(diào)度器 總之,在單個(gè)或者多
3、個(gè)CPU上實(shí)現(xiàn)了多個(gè)進(jìn)程的抽象 內(nèi)存管理 內(nèi)核在有限的可用資源之上為每一個(gè)進(jìn)程創(chuàng)建了獨(dú)立的虛擬內(nèi)存空間(MMU) 內(nèi)核的各個(gè)部分在和內(nèi)存管理系統(tǒng)交互的時(shí)候都使用相同的一組函數(shù)調(diào)用,包括簡單的malloc/free和其他一些復(fù)雜的函數(shù),Linux內(nèi)核功能,文件系統(tǒng) 文件系統(tǒng)是Linux基礎(chǔ) 內(nèi)核在沒有結(jié)構(gòu)的硬件系統(tǒng)上面構(gòu)造了結(jié)構(gòu)化的文件系統(tǒng) Linux支持多種文件系統(tǒng)類型 YAFFS (Yet Another Flash File System) ROMFS RAMFS JFFS2(Journaling Flash File System) 設(shè)備控制 幾乎每一個(gè)系統(tǒng)操作都會(huì)映射到物理設(shè)備上 除去
4、CPU,內(nèi)存以及其他幾個(gè)很有限的對象之外,幾乎所有的設(shè)備控制操作都由與被控制設(shè)備相關(guān)的代碼(設(shè)備驅(qū)動(dòng)程序)來完成,內(nèi)核模塊的構(gòu)造和運(yùn)行,設(shè)備驅(qū)動(dòng)程序的存在形式 可卸載模塊 內(nèi)核提供的特性可以在運(yùn)行時(shí)進(jìn)行擴(kuò)展 可在運(yùn)行時(shí)添加到內(nèi)核中的代碼被稱為“模塊” 常用模塊 設(shè)備驅(qū)動(dòng)和文件系統(tǒng) 靈活 編譯進(jìn)內(nèi)核 與內(nèi)核其他的功能模塊靜態(tài)編譯在一起,不可卸載,內(nèi)核態(tài)和用戶態(tài),多數(shù)操作系統(tǒng)都把內(nèi)核和應(yīng)用程序分為2個(gè)層次管理 內(nèi)核態(tài) 有較高的權(quán)限,可以控制處理器內(nèi)存的映射和內(nèi)存的分配方式 訪問外設(shè)空間和處理器的特殊狀態(tài)寄存器, 控制中斷和DMA 用戶態(tài) 權(quán)限低,優(yōu)先級低 處理器控制著對硬件的直接訪問以及對內(nèi)存的非
5、授權(quán)訪問 具有不同的內(nèi)存映射(指針的傳遞處理) get_user, put_user, copy_from_user, copy_to_user 應(yīng)用程序執(zhí)行系統(tǒng)調(diào)用或者被硬件中斷的時(shí)候由用戶態(tài)轉(zhuǎn)換為內(nèi)核態(tài),內(nèi)核代碼代表應(yīng)用程序執(zhí)行操作,能夠訪問進(jìn)程地址空間的所有數(shù)據(jù),可裝載模塊,Linux: 內(nèi)核提供的特性可在運(yùn)行時(shí)進(jìn)行擴(kuò)展 模塊 可在運(yùn)行時(shí)添加到內(nèi)核中的代碼,包括但 不限于設(shè)備驅(qū)動(dòng)程序 insmod 將模塊連接到正在運(yùn)行的內(nèi)核 rmmod 移除連接,嵌入式Linux的設(shè)備管理,Linux將設(shè)備分成兩大類:一類是塊設(shè)備,類似磁盤以記錄塊或扇區(qū)為單位,成塊進(jìn)行輸入/輸出的設(shè)備;另一類是字符設(shè)備
6、,類似鍵盤以字符為單位,逐個(gè)進(jìn)行輸入/輸出的設(shè)備。網(wǎng)路設(shè)備是介于塊設(shè)備和字符設(shè)備之間的一種特殊設(shè)備。 塊設(shè)備接口僅支持面向塊的I/O操作,所有I/O操作都通過在內(nèi)核地址空間中的I/O緩沖區(qū)進(jìn)行,它可以支持隨機(jī)存取的功能。文件系統(tǒng)通常都建立在塊設(shè)備上。 字符設(shè)備接口支持面向字符的I/O操作,由于它們不經(jīng)過系統(tǒng)的快速緩存,所以它們負(fù)責(zé)管理自己的緩沖區(qū)結(jié)構(gòu)。字符設(shè)備接口只支持順序存取的功能,一般不能進(jìn)行任意長度的I/O請求,而是限制I/O請求的長度必須是設(shè)備要求的基本塊長的倍數(shù)。 處理器與設(shè)備間數(shù)據(jù)交換方式 處理器與外設(shè)之間傳輸數(shù)據(jù)的控制方式通常有3種:查詢方式、中斷方式和直接內(nèi)存存?。―MA)方式
7、。 1查詢方式 設(shè)備驅(qū)動(dòng)程序通過設(shè)備的I/O端口空間,以及存儲(chǔ)器空間完成數(shù)據(jù)的交換。例如,網(wǎng)卡一般將自己的內(nèi)部寄存器映射為設(shè)備的I/O端口,而顯示卡則利用大量的存儲(chǔ)器空間作為視頻信息的存儲(chǔ)空間。利用這些地址空間,驅(qū)動(dòng)程序可以向外設(shè)發(fā)送指定的操作指令。通常來講,由于外設(shè)的操作耗時(shí)較長,因此,當(dāng)處理器實(shí)際執(zhí)行了操作指令之后,驅(qū)動(dòng)程序可采用查詢方式等待外設(shè)完成操作。 驅(qū)動(dòng)程序在提交命令之后,開始查詢設(shè)備的狀態(tài)寄存器,當(dāng)狀態(tài)寄存器表明操作完成時(shí),驅(qū)動(dòng)程序可繼續(xù)后續(xù)處理。查詢方式的優(yōu)點(diǎn)是硬件開銷小,使用起來比較簡單。但在此方式下,CPU要不斷地查詢外設(shè)的狀態(tài),當(dāng)外設(shè)未準(zhǔn)備好時(shí),就只能循環(huán)等待,不能執(zhí)行其
8、他程序,這樣就浪費(fèi)了CPU的大量時(shí)間,降低了處理器的利用率。,2中斷方式 查詢方式白白浪費(fèi)了大量的處理器時(shí)間,而中斷方式才是多任務(wù)操作系統(tǒng)中最有效利用處理器的方式。當(dāng)CPU進(jìn)行主程序操作時(shí),外設(shè)的數(shù)據(jù)已存入端口的數(shù)據(jù)輸入寄存器,或端口的數(shù)據(jù)輸出寄存器已空,此時(shí)由外設(shè)通過接口電路向CPU發(fā)出中斷請求信號。CPU在滿足一定條件下,暫停執(zhí)行當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)入執(zhí)行相應(yīng)能夠進(jìn)行輸入/輸出操作的子程序,待輸入/輸出操作執(zhí)行完畢之后,CPU再返回并繼續(xù)執(zhí)行原來被中斷的主程序。這樣,CPU就避免了把大量時(shí)間耗費(fèi)在等待、查詢外設(shè)狀態(tài)的操作上,使其工作效率得以大大提高。中斷方式的原理示意圖如圖6.1所示。
9、 能夠向CPU發(fā)出中斷請求的設(shè)備或事件稱為中斷源。中斷源向CPU發(fā)出中斷請求,若優(yōu)先級別最高,則CPU在滿足一定的條件時(shí),可中斷當(dāng)前程序的運(yùn)行,保護(hù)好被中斷的主程序的斷點(diǎn)及現(xiàn)場信息,然后根據(jù)中斷源提供的信息,找到中斷服務(wù)子程序的入口地址,轉(zhuǎn)去執(zhí)行新的程序段,這就是中斷響應(yīng)。CPU響應(yīng)中斷是有條件的,如內(nèi)部允許中斷、中斷未被屏蔽、當(dāng)前指令執(zhí)行完等。CPU響應(yīng)中斷以后,就會(huì)中止當(dāng)前的程序,轉(zhuǎn)去執(zhí)行一個(gè)中斷服務(wù)子程序,以完成為相應(yīng)設(shè)備的服務(wù)。 系統(tǒng)引入中斷機(jī)制后,CPU與外設(shè)處于“并行”工作狀態(tài),便于實(shí)現(xiàn)信息的實(shí)時(shí)處理和系統(tǒng)的故障處理。,3直接訪問內(nèi)存(DMA)方式 利用中斷,系統(tǒng)和設(shè)備之間可以通過
10、設(shè)備驅(qū)動(dòng)程序傳送數(shù)據(jù),但是,當(dāng)傳送的數(shù)據(jù)量很大時(shí),因?yàn)橹袛嗵幚砩系难舆t,利用中斷方式的效率會(huì)大大降低。而直接內(nèi)存訪問(DMA)可以解決這一問題。DMA可允許設(shè)備和系統(tǒng)內(nèi)存間在沒有處理器參與的情況下傳輸大量數(shù)據(jù)。設(shè)備驅(qū)動(dòng)程序在利用DMA之前,需要選擇DMA通道并定義相關(guān)寄存器,以及數(shù)據(jù)的傳輸方向,即讀取或?qū)懭?,然后將設(shè)備設(shè)定為利用該DMA通道傳輸數(shù)據(jù)。設(shè)備完成設(shè)置之后,可以立即利用該DMA通道在設(shè)備和系統(tǒng)的內(nèi)存之間傳輸數(shù)據(jù),傳輸完畢后產(chǎn)生中斷以便通知驅(qū)動(dòng)程序進(jìn)行后續(xù)處理。在利用DMA進(jìn)行數(shù)據(jù)傳輸?shù)耐瑫r(shí),處理器仍然可以繼續(xù)執(zhí)行指令。,什么是設(shè)備驅(qū)動(dòng)程序(DD)?,在Linux內(nèi)核中扮演特殊角色,使
11、某個(gè)特定硬件響應(yīng)一個(gè)定義良好的內(nèi)部編程接口,該接口完全隱藏設(shè)備的工作細(xì)節(jié) DD的任務(wù)是將用戶的標(biāo)準(zhǔn)化調(diào)用作用于實(shí)際硬件的設(shè)備特有操作上 為什么要編寫設(shè)備驅(qū)動(dòng)程序?,Linux的設(shè)備驅(qū)動(dòng)程序,硬件設(shè)備與應(yīng)用程序之間的一個(gè)中間軟件層 它使得某個(gè)特定硬件能夠響應(yīng)一個(gè)定義良好的內(nèi)部編程接口,同時(shí)完全隱蔽了設(shè)備的工作細(xì)節(jié) 用戶通過一組與具體設(shè)備無關(guān)的標(biāo)準(zhǔn)化的調(diào)用來完成相應(yīng)的操作 驅(qū)動(dòng)程序的任務(wù)就是把這些標(biāo)準(zhǔn)化的系統(tǒng)調(diào)用映射到具體設(shè)備對于實(shí)際硬件的特定操作上 驅(qū)動(dòng)程序是內(nèi)核的一部分,可以使用中斷、DMA等操作 驅(qū)動(dòng)程序在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù),設(shè)備驅(qū)動(dòng)程序的作用,機(jī)制:需要提供什么功能 策略:如何使用
12、這些功能 分層的思想 由于不同的環(huán)境需要不同的方式來使用硬件,因此應(yīng)盡可能做到讓驅(qū)動(dòng)程序不帶策略 驅(qū)動(dòng)程序應(yīng)當(dāng)處理如何使硬件可用的問題,而將如何使用硬件留給上層應(yīng)用程序,設(shè)備驅(qū)動(dòng)程序主要功能,設(shè)備驅(qū)動(dòng)程序主要完成如下功能: 檢測設(shè)備和初始化設(shè)備 使設(shè)備投入運(yùn)行和退出服務(wù) 從設(shè)備接收數(shù)據(jù)并提交給內(nèi)核 從內(nèi)核接收數(shù)據(jù)送到設(shè)備 檢測和處理設(shè)備錯(cuò)誤,另一角度: 驅(qū)動(dòng)程序可看作應(yīng)用程序與實(shí)際設(shè)備之間的軟件層 即使對于相同的設(shè)備不同驅(qū)動(dòng)程序可能提供不同功能,需要在許多因素間作出平衡 三方面因素: 提供給用戶盡可能多的選項(xiàng) 編寫驅(qū)動(dòng)程序占用的時(shí)間 盡量保持程序簡單,嵌入式Linux驅(qū)動(dòng)程序介紹,嵌入式Lin
13、ux驅(qū)動(dòng)已經(jīng)支持的設(shè)備門類齊全,已成為linux相對其他嵌入式操作系統(tǒng)的一大優(yōu)勢 工業(yè)控制常用的串口,并口 人機(jī)輸入設(shè)備鼠標(biāo)、鍵盤,觸摸屏 彩色、黑白液晶顯示輸出 網(wǎng)絡(luò)的完善支持,包括tcp/ip,udp,firewall, WLAN,ip forwarding,ipsec,vpn Usb的全面支持,包括usb硬盤、u盤,usb攝像頭 支持豐富的文件系統(tǒng),包括fat32,ntfs,嵌入式驅(qū)動(dòng)程序的作用,驅(qū)動(dòng)程序直接操控硬件 收發(fā)通訊數(shù)據(jù) 讀寫存儲(chǔ)介質(zhì),比如flash或硬盤 操作輸出設(shè)備和執(zhí)行機(jī),例如打印,開關(guān)門襟等等 PDF 文件使用 pdfFactory Pro 試用版本創(chuàng)建 ,嵌入式驅(qū)動(dòng)程
14、序的作用,驅(qū)動(dòng)程序提供軟件訪問硬件的機(jī)制 應(yīng)用軟件通過驅(qū)動(dòng)程序安全高效的訪問硬件 驅(qū)動(dòng)程序文件節(jié)點(diǎn)可以方便的提供訪問權(quán)限 控制 驅(qū)動(dòng)程序作為一個(gè)隔離的中間層軟件,將底 層細(xì)節(jié)隱藏起來,提高了軟件的可移植性,訪問Linux設(shè)備驅(qū)動(dòng)的方法,設(shè)備提供dev文件系統(tǒng)節(jié)點(diǎn)和proc文件系統(tǒng)節(jié)點(diǎn) 應(yīng)用程序通過dev文件節(jié)點(diǎn)訪問驅(qū)動(dòng)程序 應(yīng)用程序通過proc文件節(jié)點(diǎn)可以查詢設(shè)備驅(qū)動(dòng)的信息,驅(qū)動(dòng)程序在哪兒,驅(qū)動(dòng)程序在哪兒,驅(qū)動(dòng)程序位于drivers目錄下 驅(qū)動(dòng)程序占kernel代碼50%或以上,Linux驅(qū)動(dòng)程序編譯方式,Linux中驅(qū)動(dòng)程序的使用可以按照兩種方式進(jìn)行編譯: 一種是靜態(tài)編譯進(jìn)內(nèi)核; 另一種是編
15、譯成模塊以供動(dòng)態(tài)加載。,注意:對于uCLinux而言,由于其不支持模塊動(dòng)態(tài)加載,而且嵌入式Linux不能夠象桌面Linux那樣靈活的使用insmod/rmmod加載、卸載設(shè)備驅(qū)動(dòng)程序,因而通常在uCLinux中采用的是將設(shè)備驅(qū)動(dòng)程序靜態(tài)的編譯進(jìn)內(nèi)核。,Linux驅(qū)動(dòng)程序開發(fā),建立嵌入式Linux平臺(tái),移植和編寫驅(qū)動(dòng)程序往往是最具挑戰(zhàn)的工作 驅(qū)動(dòng)程序的開發(fā)周期一般較長,對產(chǎn)品的面世時(shí)間有著重要影響 驅(qū)動(dòng)程序質(zhì)量的好壞,直接關(guān)系到系統(tǒng)工作效能和穩(wěn)定性,對項(xiàng)目的成敗起著關(guān)鍵作用,設(shè)備驅(qū)動(dòng)程序的分類,字符設(shè)備 所有能夠象字節(jié)流一樣訪問的設(shè)備都通過字符設(shè)備來實(shí)現(xiàn) 它們被映射為文件系統(tǒng)中的節(jié)點(diǎn),通常在/d
16、ev/目錄下面 一般要包含open read write ioctl close等系統(tǒng)調(diào)用的實(shí)現(xiàn) 塊設(shè)備 通常是指諸如磁盤、內(nèi)存、Flash等可以容納文件系統(tǒng)的存儲(chǔ)設(shè)備。 塊設(shè)備也是通過文件系統(tǒng)來訪問,與字符設(shè)備的區(qū)別是:內(nèi)核管理數(shù)據(jù)的方式不同 它允許象字符設(shè)備一樣以字節(jié)流的方式來訪問,也可一次傳遞任意多的字節(jié)。 網(wǎng)絡(luò)接口設(shè)備 通常它指的是硬件設(shè)備,但有時(shí)也可能是一個(gè)軟件設(shè)備(如回環(huán)接口loopback),它們由內(nèi)核中網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng),負(fù)責(zé)發(fā)送(hard_start_xmit()和接收數(shù)據(jù)包。 它們的數(shù)據(jù)傳送往往不是面向流的,因此很難將它們映射到一個(gè)文件系統(tǒng)的節(jié)點(diǎn)上。,Linux下設(shè)備驅(qū)動(dòng)程序組
17、成,自動(dòng)配置和初始化子程序: 負(fù)責(zé)檢測所要驅(qū)動(dòng)的硬件設(shè)備是否工作正常,如果該設(shè)備正常,則對這個(gè)設(shè)備及其相關(guān)驅(qū)動(dòng)程序所需要的軟件狀態(tài)進(jìn)行初始化。這部分驅(qū)動(dòng)程序僅在初始化的時(shí)候被調(diào)用一次。,服務(wù)于I/O請求的子程序: 該子程序稱為驅(qū)動(dòng)程序的上半部。這部分程序在執(zhí)行時(shí),系統(tǒng)仍認(rèn)為與進(jìn)行調(diào)用的進(jìn)程屬于同一個(gè)進(jìn)程,只是由用戶態(tài)變成了核心態(tài),可以在其中調(diào)用sleep()等與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。,中斷服務(wù)子程序: 稱為驅(qū)動(dòng)程序的下半部,由Linux系統(tǒng)來接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。,基本概念,主設(shè)備號和次設(shè)備號 主設(shè)備號和次設(shè)備號能夠唯一地標(biāo)識一個(gè)設(shè)備 128(V2.0以前), 256(V
18、2.0以后) 主設(shè)備號相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號用于區(qū)分具體設(shè)備的實(shí)例 動(dòng)態(tài)獲取主設(shè)備號 Linux下對設(shè)備號的分配請參考Documentation/devices.txt 設(shè)備文件 Linux使用設(shè)備文件來統(tǒng)一對設(shè)備的訪問接口,將設(shè)備文件放在/dev/目錄下 設(shè)備的命名一般為設(shè)備文件名+數(shù)字或者字母表示的子類,例如/dev/hda1, /dev/hda2等 Linux 2.4以后引入了設(shè)備文件系統(tǒng)(devfs)的概念,所有的設(shè)備文件作為一個(gè)可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)統(tǒng)一管理,從而設(shè)備文件就可以掛裝到任何需要的地方。一般將主設(shè)備建立一個(gè)目錄,再將具體的子設(shè)備文件建立在
19、此目錄下。例如,/dev/mtdblock/0,基礎(chǔ)知識回顧,硬件部分: 處理器、存儲(chǔ)器、接口與總線 基本工具使用 時(shí)序圖 硬件電路圖,Linux內(nèi)核的編譯加載,make menuconfig make zImage make modules 內(nèi)核配置系統(tǒng)由以下3部分組成: makefile: 定義編譯規(guī)則 Kconfig: 給用戶提供配置選擇功能 配置工具: 配置命令解釋器和配置用戶界面,.config配置文件 運(yùn)行make menuconfig時(shí),配置工具首先分析與體系結(jié)構(gòu)對應(yīng)的/arch/xxx/Kconfig文件,該文件除包含一些與體系結(jié)構(gòu)相關(guān)的配置項(xiàng)外,通過source語句引入一系列Kconfig文件,而這些Kconfig可再次通過source引入下一層Kconfig 一般地,驅(qū)動(dòng)工程師在drivers目錄的相應(yīng)子目錄增加新設(shè)備驅(qū)動(dòng)代碼,并增加或修改Kconfig配置文件和Makefile腳本,小結(jié):Linux驅(qū)動(dòng)程序,在Linux操作系統(tǒng)中驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核與硬件設(shè)備之間的橋梁,它屏蔽了硬件的細(xì)節(jié) (如總線協(xié)議、DMA操作等),在應(yīng)用程序看來硬件設(shè)備只是一個(gè)特殊的文件。 驅(qū)動(dòng)程序的基本功能主要有以下幾點(diǎn): 對設(shè)備的初始化和釋放。如對音頻設(shè)備而言包括向內(nèi)核注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保險(xiǎn)維修合同范本
- 雙方自愿合作合同范例
- 廠家進(jìn)貨協(xié)議合同范本
- 專利設(shè)備合同范本
- 雙方材料合同范本
- 個(gè)人餐飲員工合同范本
- 廠家物流合同范本
- 兼職項(xiàng)目加盟合同范本
- aia 系列合同范本
- 廚房煙道清洗合同范本
- 家校共育之道
- DeepSeek入門寶典培訓(xùn)課件
- 西安2025年陜西西安音樂學(xué)院專職輔導(dǎo)員招聘2人筆試歷年參考題庫附帶答案詳解
- 《作文中間技巧》課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 2025屆八省聯(lián)考 新高考適應(yīng)性聯(lián)考英語試題(原卷版)
- 新蘇教版一年級下冊數(shù)學(xué)第1單元第3課時(shí)《8、7加幾》作業(yè)
- 2024年山東電力高等??茖W(xué)校高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 《平面廣告賞析》課件
- 人教鄂教版六年級下冊科學(xué)全冊知識點(diǎn)
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
評論
0/150
提交評論