設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)_第1頁(yè)
設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)_第2頁(yè)
設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)_第3頁(yè)
設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)_第4頁(yè)
設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Linux設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)Linux設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)郗閩軍牛建偉實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)Linux下進(jìn)行驅(qū)動(dòng)程序設(shè)計(jì)的原理掌握Linux設(shè)備驅(qū)動(dòng)程序開發(fā)的基本過程和設(shè)計(jì)方法實(shí)驗(yàn)內(nèi)容內(nèi)核驅(qū)動(dòng)設(shè)計(jì)入門-模塊方式驅(qū)動(dòng)程序(5.1)內(nèi)核驅(qū)動(dòng)設(shè)計(jì)實(shí)驗(yàn)-觸摸屏驅(qū)動(dòng)(5.2)寫一個(gè)簡(jiǎn)單的應(yīng)用程序,顯示觸摸位置的坐標(biāo)(x,y)開發(fā)一個(gè)LED(數(shù)碼管)驅(qū)動(dòng)程序,并編寫一個(gè)應(yīng)用程序?qū)λ_發(fā)的驅(qū)動(dòng)程序進(jìn)行測(cè)試(大作業(yè))實(shí)驗(yàn)實(shí)現(xiàn)的功能是上電復(fù)位后,數(shù)碼管顯示數(shù)字0-7,然后每一個(gè)數(shù)字依次閃爍一次,小數(shù)點(diǎn)也要點(diǎn)亮,即:0.1.2.3.4.5.6.7.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è)備對(duì)于實(shí)際硬件的特定操作上驅(qū)動(dòng)程序是內(nèi)核的一部分,可以使用中斷、DMA等操作驅(qū)動(dòng)程序在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù)設(shè)備驅(qū)動(dòng)程序的分類字符設(shè)備所有能夠象字節(jié)流一樣訪問的設(shè)備都通過字符設(shè)備來實(shí)現(xiàn)它們被映射為文件系統(tǒng)中的節(jié)點(diǎn),通常在/dev/目錄下面一般要包含openreadwriteclose等系統(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ā)送和接收數(shù)據(jù)包。它們的數(shù)據(jù)傳送往往不是面向流的,因此很難將它們映射到一個(gè)文件系統(tǒng)的節(jié)點(diǎn)上?;靖拍钪髟O(shè)備號(hào)和次設(shè)備號(hào)主設(shè)備號(hào)和次設(shè)備號(hào)能夠唯一地標(biāo)識(shí)一個(gè)設(shè)備128(V2.0以前),256(V2.0以后)主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例動(dòng)態(tài)獲取主設(shè)備號(hào)Linux下對(duì)設(shè)備號(hào)的分配請(qǐng)參考Documentation/devices.txt設(shè)備文件Linux使用設(shè)備文件來統(tǒng)一對(duì)設(shè)備的訪問接口,將設(shè)備文件放在/dev/目錄下設(shè)備的命名一般為設(shè)備文件名+數(shù)字或者字母表示的子類,例如/dev/hda1,/dev/hda2等Linux2.4以后引入了設(shè)備文件系統(tǒng)(devfs)的概念,所有的設(shè)備文件作為一個(gè)可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)統(tǒng)一管理,從而設(shè)備文件就可以掛裝到任何需要的地方。一般將主設(shè)備建立一個(gè)目錄,再將具體的子設(shè)備文件建立在此目錄下。例如,/dev/mtdblock0基本概念驅(qū)動(dòng)程序使用的2個(gè)重要結(jié)構(gòu)structfilestructfile_operations基本概念structfile基本概念structfile數(shù)據(jù)結(jié)構(gòu)定義位于include/fs.hstructfile結(jié)構(gòu)與驅(qū)動(dòng)相關(guān)的成員mode_tf_mode 標(biāo)識(shí)文件的讀寫權(quán)限loff_tf_pos 當(dāng)前讀寫位置unsignedint_f_flag 文件標(biāo)志,主要進(jìn)行阻塞/非阻塞型操作時(shí)檢查structfile_operation*f_op文件操作的結(jié)構(gòu)指針void*private_data 驅(qū)動(dòng)程序一般將它指向已經(jīng)分配的數(shù)據(jù)structdentry*f_dentry 文件對(duì)應(yīng)的目錄項(xiàng)結(jié)構(gòu)基本概念設(shè)備驅(qū)動(dòng)程序接口(structfile_operations),標(biāo)記化方法:staticstructfile_operationsdemo_fops={owner:THIS_MODULE,write:demo_write,read:demo_read,ioctl:demo_ioctl,open:demo_open,release:demo_release,};基本概概念設(shè)備驅(qū)驅(qū)動(dòng)程程序接接口((structfile_operations))通常所所說的的設(shè)備備驅(qū)動(dòng)動(dòng)程序序接口口是指指structfile_operations{},,它的的定義義位于于include/linux/fs.h中。。在嵌入入式系系統(tǒng)的的開發(fā)發(fā)中,,通常常只要要實(shí)現(xiàn)現(xiàn)如下下幾個(gè)個(gè)接口口函數(shù)數(shù)就能能完成成系統(tǒng)統(tǒng)所需需要的的功能能init加加載驅(qū)驅(qū)動(dòng)程程序時(shí)時(shí),內(nèi)內(nèi)核自自動(dòng)調(diào)調(diào)用read從從設(shè)備備中讀讀取數(shù)數(shù)據(jù)write向向字字符設(shè)設(shè)備中中寫數(shù)數(shù)據(jù)ioctl控控制制設(shè)備備,實(shí)實(shí)現(xiàn)除除讀寫寫操作作以外外的其其他控控制命命令open打打開設(shè)設(shè)備并并進(jìn)行行初始始化release關(guān)關(guān)閉設(shè)設(shè)備并并釋放放資源源exit卸卸載驅(qū)驅(qū)動(dòng)程程序時(shí)時(shí),內(nèi)內(nèi)核自自動(dòng)調(diào)調(diào)用基本概概念驅(qū)動(dòng)程程序注注冊(cè)過過程((動(dòng)態(tài)態(tài)分配配主設(shè)設(shè)備號(hào)號(hào))insmodmodule_name;加加載驅(qū)驅(qū)動(dòng)程程序,,運(yùn)行行init函數(shù)數(shù)(register_chrdev(dev_Major,““module_name”,*fs))查看/proc/devicesmknod/dev/module_namec/b主主設(shè)備備號(hào)次次設(shè)備備號(hào)rmmodmodule_name;卸卸載驅(qū)驅(qū)動(dòng),,運(yùn)行行exit函函數(shù)((unregister_chrdev(dev_Major,““module_name””,*fs))用戶程程序調(diào)調(diào)用Open(“/dev/module_name””,mode);O_RDWRIoctl()Write()Read()Close()開發(fā)驅(qū)驅(qū)動(dòng)程程序時(shí)時(shí)須注注意的的事項(xiàng)項(xiàng)中斷處處理中斷是是現(xiàn)代代微處處理器器的一一個(gè)重重要功功能Linux驅(qū)動(dòng)動(dòng)程序序中的的中斷斷處理理函數(shù)數(shù)externintrequest_irq(unsignedintirq,void(*handler)(int,void*,structpt_regs*),unsignedlongflag,constchar*dev_name,void*dev_id);//請(qǐng)請(qǐng)求為為中斷斷號(hào)irq分配配中斷斷處理理函數(shù)數(shù)externvoidfree_irq(unsignedint,void*);//釋放放中斷斷注意事事項(xiàng)不能向向用戶戶空間間發(fā)送送或者者接收收數(shù)據(jù)據(jù)不能執(zhí)執(zhí)行有有睡眠眠操作作的函函數(shù)不能調(diào)調(diào)用調(diào)調(diào)度函函數(shù)謹(jǐn)慎使使用全全局變變量((可重重入))自旋鎖鎖的使使用基本概概念字符設(shè)設(shè)備的的管理理驅(qū)動(dòng)程程序模模塊通通過函函數(shù)intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops)完成向向內(nèi)核核的注注冊(cè),,其中中major是是主設(shè)設(shè)備號(hào)號(hào),name是是設(shè)備備名,,fops是針針對(duì)該該設(shè)備備的驅(qū)驅(qū)動(dòng)程程序的的接口口。在系統(tǒng)統(tǒng)中為為驅(qū)動(dòng)動(dòng)程序序模塊塊建立立一個(gè)個(gè)設(shè)備備節(jié)點(diǎn)點(diǎn)[minjun@RedHatAS~]$mknod/dev/democ2540其中/dev/demo標(biāo)識(shí)識(shí)設(shè)備備名為為demo,““c””說明明是字字符設(shè)設(shè)備,,254是是指定定的主主設(shè)備備號(hào),,0是次次設(shè)備備號(hào)基本概概念驅(qū)動(dòng)程程序的的編譯譯以demo.c為例例Makefile的的形式-參參考實(shí)驗(yàn)指指導(dǎo)書命令行的形形式[minjun@RedHatAS~]$armv4l-unknown-linux-gcc-Wall-c-O-D__KERNEL__-I/home/minjun/embedded/kernel-2410s/includedemo.c-odemo.o加載驅(qū)動(dòng)[minjun@RedHatAS~]$insmoddemo.o卸載驅(qū)動(dòng)[minjun@RedHatAS~]$rmmoddemo.o基本概念測(cè)試程序?qū)崒?shí)例//test.c#include<stdio.h>#include<fcntl.h>#include<stdlib.h>intmain() {intfd;fd=open("/dev/demo",O_RDWR);if(fd<0){exit(fd);}//yourcodehereread(fd,buffer,size);write(fd,buffer,size);......close(fd);return0;}驅(qū)動(dòng)程序的的實(shí)現(xiàn)-驅(qū)驅(qū)動(dòng)程序框框架#include<linux/config.h>#include<linux/module.h>#include<linux/init.h>#include<linux/kernel.h>/*printk()*/#include<linux/fs.h>/*everything...*/#include<linux/errno.h>/*errorcodes*/#include<linux/types.h>/*size_t*/#include<linux/proc_fs.h>#include<linux/fcntl.h>/*O_ACCMODE*/#include<linux/poll.h>/*COPY_TO_USER*/#include<asm/system.h>/*cli(),*_flags*/#defineDEVICE_NAME"demo"#definedemo_MAJOR250#definedemo_MINOR0staticssize_tdemo_write(structfile*filp,constchar*buffer,size_tcount) {copy_from_user(drv_buf,buffer,count);WRI_LENGTH=count;printk("userwritedatatodriver\n");//yourcodeherereturncount;}驅(qū)動(dòng)程序的的實(shí)現(xiàn)-驅(qū)驅(qū)動(dòng)程序框框架staticssize_tdemo_read(structfile*filp,char*buffer,size_tcount,loff_t*ppos){if(count>MAX_BUF_LEN)count=MAX_BUF_LEN;copy_to_user(buffer,drv_buf,count);printk("userreaddatafromdriver\n");returncount;}staticintdemo_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){printk("ioctlruning\n");switch(cmd){case1:printk("runingcommand1\n");break;case2:printk("runingcommand2\n");break;default:printk("errorcmdnumber\n");break;}return0;}staticintdemo_open(structinode*inode,structfile*file){MOD_INC_USE_COUNT;sprintf(drv_buf,"deviceopensucess!\n");printk("deviceopensucess!\n");return0;}驅(qū)動(dòng)程序的的實(shí)現(xiàn)-驅(qū)驅(qū)動(dòng)程序框框架staticintdemo_release(structinode*inode,structfile*filp){MOD_DEC_USE_COUNT;printk("devicerelease\n");return0;}staticstructfile_operationsdemo_fops={owner: THIS_MODULE,write: demo_write,read: demo_read,ioctl: demo_ioctl,open: demo_open,release:demo_release,};staticint__initdemo_init(void) {SET_MODULE_OWNER(&demo_fops);result=register_chrdev(demo_MAJOR,"demo",&demo_fops);if(result<0)returnresult;printk(DEVICE_NAME"initialized\n");return0;}staticvoid__exitdemo_exit(void) {unregister_chrdev(demo_MAJOR,"demo");printk(DEVICE_NAME"unloaded\n");}module_init(demo_init);module_exit(demo_exit);驅(qū)動(dòng)程序的的實(shí)現(xiàn)-驅(qū)驅(qū)動(dòng)程序框框架open提供給驅(qū)動(dòng)動(dòng)程序初始始化設(shè)備的的能力,為為后續(xù)的操操作做準(zhǔn)備備此外一般會(huì)會(huì)遞增使用用計(jì)數(shù),防防止文件關(guān)關(guān)閉前模塊塊被卸載通常情況下下,open完成如如下工作::遞增使用計(jì)計(jì)數(shù)檢查特定設(shè)設(shè)備錯(cuò)誤如果設(shè)備是是首次打開開,則對(duì)其其進(jìn)行初始始化識(shí)別次設(shè)備備號(hào),如有有必要,則則修改f_op指針針分配并填寫寫filp->private_data中的的數(shù)據(jù)release與open正好相反反釋放由open分配配的filp->private_data中中的數(shù)據(jù)在最后一次次關(guān)閉操作作時(shí)關(guān)閉設(shè)設(shè)備使用計(jì)數(shù)減減一驅(qū)動(dòng)程序的的實(shí)現(xiàn)-驅(qū)驅(qū)動(dòng)程序框框架read和和writeread將將數(shù)據(jù)從內(nèi)內(nèi)核拷貝到到應(yīng)用程序序空間,write則將數(shù)據(jù)據(jù)從應(yīng)用程程序空間拷拷貝到內(nèi)核核。由于用戶空空間和內(nèi)核核空間的內(nèi)內(nèi)存映射方方式不同,,所以在內(nèi)內(nèi)核和用戶戶空間傳輸輸數(shù)據(jù)的時(shí)時(shí)候需要使使用如下的的函數(shù)unsignedlongcopy_to_user(void*to,constvoid*from,unsignedlongcount);unsignedlongcopy_from_user(void*to,constvoid*from,unsignedlongcount);在阻塞型IO中,read和和write調(diào)用可可能會(huì)出現(xiàn)現(xiàn)阻塞read調(diào)調(diào)用當(dāng)前無無數(shù)據(jù)可讀讀,而又沒沒有數(shù)據(jù)馬馬上可讀,,這時(shí)會(huì)睡睡眠并且等等待,write調(diào)調(diào)用也會(huì)出出現(xiàn)這樣的的情況等待隊(duì)列機(jī)機(jī)制-wait_queue_head_t;(定義在在<linux/wait.h>中)如果聲明了了等待隊(duì)列列并完成初初始化,進(jìn)進(jìn)程就可以以睡眠,可可以調(diào)用sleep_on的的不同變體體來完成睡睡眠(函數(shù)數(shù)聲明位于于<linux/sched.h>中)大多數(shù)情況況下應(yīng)使用用“可中斷斷”的函數(shù)數(shù),如interruptible_sleep_on。睡眠進(jìn)程被被喚醒并不不一定代表表有數(shù)據(jù),,也有可能能是被其他他的信號(hào)喚喚醒,所以以醒來后需需要測(cè)試condition.8段LED顯示器外外形原理圖圖一個(gè)數(shù)碼管管(LED)由一個(gè)個(gè)8位的字字節(jié)控制當(dāng)該位為““1”時(shí)點(diǎn)點(diǎn)亮,為““0”時(shí)滅滅acbdefhgLED連接接原理圖LED顯示示驅(qū)動(dòng)器ZLG7290I2CLED/鍵鍵盤驅(qū)動(dòng)動(dòng)器I2C串串行接口提提供鍵盤中中斷信號(hào)方方便與處理理器接口可驅(qū)動(dòng)8位位共陰數(shù)數(shù)碼管或64只獨(dú)獨(dú)立LED和64個(gè)按鍵鍵可控掃描位位數(shù)可控任任一數(shù)碼管管閃爍提供數(shù)據(jù)譯譯碼和循環(huán)環(huán)移位段尋尋址等控制制8個(gè)功能能鍵可檢測(cè)測(cè)任一鍵的的連擊次數(shù)數(shù)無需外接元元件即直接接驅(qū)LED可擴(kuò)展展驅(qū)動(dòng)電流流和驅(qū)動(dòng)電電壓詳細(xì)資料參參加課程網(wǎng)網(wǎng)站上的::zlg7290.pdfzlg7290_led.pdf圖1ZLG7290引腳圖圖LED顯示示驅(qū)動(dòng)器功功能框圖IIC基地地址是0x70有24個(gè)8位寄存器器(0x0-0x17),通通過IIC總線訪問問,必須是是字節(jié)操作作主要寄存器器SystemReg0x0FlashOnOff0x0cScanNum0x0dDpRam0~70x10-0x17CmdBuf0~10x7-0x8兩種控制方方式:-寄存器映映象控制-命令解釋釋控制參考zlg7290.pdfLED驅(qū)動(dòng)動(dòng)程序的主主要函數(shù)staticintled_write(structfile*filp,constchar*buffer,size_tcount,loff_t*ppos){…}staticintled_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){…}staticintled_open(structinode*inode,structfile*filp){…}staticintled_release(structinode*inode,structfile*filp){……}staticint__initled_init(void){…}staticvoid__exitled_exit(void){…}staticstructfile_operationsled_fops={owner: THIS_MODULE,open: led_open,release:led_release,write: led_write,ioctl: led_ioctl,};可以使用IIC_Write(charbaseAddr,charoffSet,chardata)來設(shè)置寄寄存器的值((字節(jié)操作)),該函數(shù)在在iic.h文件中定義義。LED測(cè)試應(yīng)應(yīng)用程序框架架#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>intmain(){intfd;intret;if((fd=open("/dev/led",O_RDWR))<0){printf("openleddevicefailed!\n");exit(fd);}ioctl(intfd,intcmd,……);write(intfd,char*buf,intlength);close(fd);return0;}實(shí)驗(yàn)內(nèi)內(nèi)容內(nèi)核驅(qū)驅(qū)動(dòng)設(shè)設(shè)計(jì)入入門--模塊塊方式式驅(qū)動(dòng)動(dòng)程序序(5.1)在PClinux和開開發(fā)平平臺(tái)上上運(yùn)行行通過過內(nèi)核驅(qū)驅(qū)動(dòng)設(shè)設(shè)計(jì)實(shí)實(shí)驗(yàn)--觸摸摸屏驅(qū)驅(qū)動(dòng)((5.2))寫一個(gè)個(gè)簡(jiǎn)單單的應(yīng)應(yīng)用程程序,,顯示示觸摸摸位置置的坐坐標(biāo)((x,y))在開發(fā)發(fā)平臺(tái)臺(tái)上裝裝載驅(qū)驅(qū)動(dòng)程程序,,運(yùn)行行編寫寫的測(cè)測(cè)試應(yīng)應(yīng)用程程序開發(fā)一一個(gè)LED(數(shù)數(shù)碼管管)驅(qū)驅(qū)動(dòng)程程序,,并編編寫一一個(gè)應(yīng)應(yīng)用程程序?qū)?duì)所開開發(fā)的的驅(qū)動(dòng)動(dòng)程序序進(jìn)行行測(cè)試試(如如果做做不完完,可可以在在下下下次實(shí)實(shí)驗(yàn)接接著做做)開發(fā)led_driver.c開發(fā)led_test.c實(shí)驗(yàn)步步驟-demo驅(qū)動(dòng)動(dòng)程序序閱讀和和理解解源代代碼進(jìn)入/arm2410s/exp/drivers/demo,閱閱讀理理解源源代碼碼編譯驅(qū)驅(qū)動(dòng)模模塊修改Makefile文文件,編編譯實(shí)實(shí)驗(yàn)平平臺(tái)運(yùn)運(yùn)行的的驅(qū)動(dòng)動(dòng)程序序測(cè)試驅(qū)驅(qū)動(dòng)程程序裝載驅(qū)驅(qū)動(dòng)程程序和和建立立設(shè)備備文件件節(jié)點(diǎn)點(diǎn)insmoddemo.o[]mknod/dev/democ2540編譯測(cè)測(cè)試程程序并并運(yùn)行行[]armv4l-unknown-linux-gcctest_demo.c––otest_demo./test_demo實(shí)驗(yàn)步步驟-觸摸摸屏驅(qū)驅(qū)動(dòng)測(cè)試驅(qū)驅(qū)動(dòng)程程序驅(qū)動(dòng)程程序位位于內(nèi)內(nèi)核源源代碼碼目錄錄下面面的drivers/char/下面面,名稱:s3c2410-ts-ads7843.o裝載驅(qū)驅(qū)動(dòng)程程序和和建立立設(shè)備備文件件節(jié)點(diǎn)點(diǎn)在將觸觸摸屏屏驅(qū)動(dòng)動(dòng)加載載到內(nèi)內(nèi)核中中時(shí),可以以看到到系統(tǒng)統(tǒng)為觸觸摸屏屏設(shè)備備分配配的設(shè)設(shè)備號(hào)號(hào)[]insmods3c2410-ts-ads7843.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論