MMCSD卡驅(qū)動(dòng)程序的設(shè)計(jì)通信10123趙翔_第1頁
MMCSD卡驅(qū)動(dòng)程序的設(shè)計(jì)通信10123趙翔_第2頁
MMCSD卡驅(qū)動(dòng)程序的設(shè)計(jì)通信10123趙翔_第3頁
MMCSD卡驅(qū)動(dòng)程序的設(shè)計(jì)通信10123趙翔_第4頁
MMCSD卡驅(qū)動(dòng)程序的設(shè)計(jì)通信10123趙翔_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 . . . ARM嵌入式系統(tǒng)課程設(shè)計(jì)-MMC/SD卡驅(qū)動(dòng)程序設(shè)計(jì)班級(jí):通信1001學(xué)號(hào):3100601023: 翔指導(dǎo)老師:清華 課程設(shè)計(jì)時(shí)間:2013.6.24-2012.6.30大學(xué)目 錄第一章 引言1.1 課程設(shè)計(jì)目的1第二章 課程設(shè)計(jì)平臺(tái)構(gòu)建與流程22.1 嵌入式系統(tǒng)開發(fā)平臺(tái)構(gòu)建22.2 課程設(shè)計(jì)流程22.3 課程設(shè)計(jì)硬件結(jié)構(gòu)與工作原理2第三章 Bootloader移植與下載43.1 源代碼安裝43.2 源代碼分析移植與編譯43.3 下載4第四章 Linux核移植與下載64.1 Linux核源代碼安裝64.2 Linux核源代碼分析與移植64.3 Linux核編譯與下載6第五章 課程

2、設(shè)計(jì)功能模塊驅(qū)動(dòng)程序設(shè)計(jì)155.1 MMC/SD卡模塊注冊(cè)初始化:155.2設(shè)備文件操作接口定義155.3 MMC接口初始化165.4 GPIO初始化函數(shù)165.5 SD移除操作函數(shù)175.6讀數(shù)據(jù)塊操作185.7 寫數(shù)據(jù)塊操作19第六章 根文件系統(tǒng)建立與文件系統(tǒng)下載206.1 根文件系統(tǒng)分析206.2 文件系統(tǒng)映像文件生成216.3 文件系統(tǒng)下載226.4 功能模塊運(yùn)行與調(diào)試23第七章 完成課堂上布置的三個(gè)思考題26第八章 課程設(shè)計(jì)總結(jié)與體會(huì)288.1 課程設(shè)計(jì)中遇到的問題以與解決方法288.2 總結(jié)和體會(huì)2828 / 31第一章 引言1.1 課程設(shè)計(jì)目的1) 了解PXA27X微處理器GPI

3、O的功能2) 了解MMC卡驅(qū)動(dòng)程序的架構(gòu)與編程方法3) 掌握MMC卡的使用方法1.2 課程設(shè)計(jì)任務(wù)與要求1) 理解基于Linux的嵌入式系統(tǒng)交叉開發(fā)環(huán)境,對(duì)嵌入式系統(tǒng)的開發(fā)流程有詳細(xì)的了解;2) 掌握開發(fā)工具鏈的構(gòu)建方法,能獨(dú)立進(jìn)行系統(tǒng)開發(fā)操作;3) 掌握Linux的常用命令,在linux系統(tǒng)下能熟練的使用這些常用命令;4) 熟悉linux核的知識(shí)以與原理,掌握定制Linux核的方法;5) 基于Linux操作系統(tǒng),以與XSBase270ARM實(shí)驗(yàn)開發(fā)平臺(tái)一套,把MMC存儲(chǔ)卡掛載目標(biāo)板上并進(jìn)行文件的復(fù)制操作。第二章 課程設(shè)計(jì)平臺(tái)構(gòu)建與流程2.1 嵌入式系統(tǒng)開發(fā)平臺(tái)構(gòu)建1) 裝有Linux操作系統(tǒng)

4、的PC機(jī)一臺(tái);2) XSBase270 ARM實(shí)驗(yàn)開發(fā)平臺(tái)一套3) MMC存儲(chǔ)卡一塊2.2 課程設(shè)計(jì)流程1)Bootloader移植與下載2)Linux核移植與下載3) 功能模塊程序設(shè)計(jì)與交叉編譯4)根文件系統(tǒng)建立與文件系統(tǒng)下載2.3 課程設(shè)計(jì)硬件結(jié)構(gòu)與工作原理1)目標(biāo)板的MMC卡硬件接口目標(biāo)板的MMC/SD卡的硬件接口如圖1.1所示,根據(jù)PXA27x的MMC/SD/SDIO控制器的信號(hào)功能以與PXA27x的GPIO的功能分配,命令控制線MMCMD與GPIO112相連,此時(shí)引腳GPIO112必須配置成轉(zhuǎn)換功能1(Alternate Function 1)的輸入或輸出方式(具體參考PXA27X開

5、發(fā)手冊(cè)),時(shí)鐘端MMCLK利用了通用IO口GPIO32轉(zhuǎn)換功能1輸出方式,4位總線MMDAT0到MMDAT3分別與GPIO111、GPIO110、GPIO109和GPIO92相連,都時(shí)使用了通用IO口的轉(zhuǎn)換功能1的輸入或輸出方式。圖1.2為MMC/SD卡的供電電路圖。圖1.1 目標(biāo)板的MMC/SD卡的硬件接口圖1.2 MMC/SD卡的供電電路圖2) PXA270的MMC/SD/SDIO控制器 PXA270的MMC/SD/SDIO控制器在訪問PXA270處理器的軟件與MMC存儲(chǔ)堆和支持MMC、SD與SDIO通信協(xié)議之間充當(dāng)聯(lián)結(jié)作用。PXA27x的MMC控制器協(xié)議規(guī)遵守多媒體卡系統(tǒng)規(guī)V3.2(Mu

6、ltiMediaCard System SpecificationVersion 3.2);MMC/SD/SDIO控制器采用標(biāo)準(zhǔn)的MMC傳輸協(xié)議或串行通信接口SPI協(xié)議模式。訪問PXA270的軟件使用MMC傳輸協(xié)議或SPI模式作為與MMC控制器通信的協(xié)議。目標(biāo)板的SD驅(qū)動(dòng)程序采用了MMC通信傳輸協(xié)議。3)MMC卡的通信協(xié)議主機(jī)與MMC卡的所有通信都是由主機(jī)發(fā)起,主機(jī)發(fā)出廣播和點(diǎn)對(duì)點(diǎn)兩種類型通信命令,在廣播通信命令中,主機(jī)發(fā)出的命令被所有的卡接受,只有部分命令需要響應(yīng);而在點(diǎn)對(duì)點(diǎn)通信命令中,命令被發(fā)送到具體地址的卡中,并由該卡對(duì)所接受的命令做出響應(yīng)。第三章 Bootloader移植與下載3.1

7、源代碼安裝先將D:emdorEELiod_V4_SDK目錄下的Linux-2.4復(fù)制到虛擬機(jī)里root的主文件夾中,然后用如下指令進(jìn)行解壓:利用上述命令解壓后,bootloader源代碼解壓到當(dāng)前目錄中Boot-XSBase270文件夾中。3.2 源代碼分析移植與編譯在解壓的目錄里進(jìn)行make 編譯。rootlocalhost BootLoader$ cd Boot-XSBase270rootubuntu:Boot-XSBase270# make clean rootlocalhost Boot-XSBase270$make編譯完成后, 在當(dāng)前目錄下會(huì)生成bootloader 映象文件boot

8、。3.3 下載打開實(shí)驗(yàn)臺(tái)電源,啟動(dòng)H-JTAG 和H-Flasher,在H-Flasher 中裝載配置文件pxa270.hfc,點(diǎn)擊Programming中的Check,Scr File 選擇D:emdorEELiod_V4_SDK Linux-2.4images中的boot 文件,點(diǎn)擊Program,燒寫成功后點(diǎn)擊 Verify 校驗(yàn)。第四章 Linux核移植與下載4.1 Linux核源代碼安裝核解壓4.2 Linux核源代碼分析與移植Linux提供三個(gè)不同的命令進(jìn)行Linux的配置,效果完全一樣:make config 控制臺(tái)命令行方式配置命令make menuconfig 文本菜單方式配

9、置命令make xconfig X窗口圖形界面方式配置命令其他部分命令:Make mrproper 命令清除所有的舊的配置和舊的編譯目標(biāo)文件等。Make dep 命令搜索Linux編譯輸出與源代碼之間的依賴關(guān)系、并生成依賴文件。Make clean 清除以前構(gòu)造核時(shí)生成的所有目標(biāo)文件、模塊文件和臨時(shí)文件。Make zImage 編譯Linux核,生成壓縮的核映像文件。4.3 Linux核編譯與下載1)核解壓2)核配置Linux針對(duì)MMC/SD核配置的步驟:(1) 在主菜單下選擇Loadable module support -* Enable Loadable moduLe Support利用

10、模塊可將不常用的設(shè)備驅(qū)動(dòng)或功能作為模塊放在核外部,必要時(shí)動(dòng)態(tài)地調(diào)用。操作結(jié)束后從存中刪除,這樣可以有效地使用存,同時(shí)也可減小了核的大小。模塊可以自行編譯并具有獨(dú)立的功能,即使需要改變模塊的功能,也不用對(duì)整個(gè)核進(jìn)行修改。文件系統(tǒng),設(shè)備驅(qū)動(dòng),二進(jìn)制格式等很多功能都支持模塊。一定要選擇*。(按空格鍵) Set version information on all Symbols for modules利用這個(gè)功能能夠讓核使用其它核版本模塊或沒有包含在此 kernel 的特殊的模塊。一般選擇N。* Kernel module Loader這個(gè)設(shè)置使kernel 對(duì)模塊處于常備狀態(tài)。在不使用Insmod

11、 或rmmod 命令情況下,kernel 程序自動(dòng)將需要執(zhí)行的模塊調(diào)用到存中,一定時(shí)間不使用該模塊時(shí)自動(dòng)將其從存刪除,一般要選擇*。(2) 再回到主菜單下選擇General setup 選擇“Support for hot-pluggable devices” , 出現(xiàn)“MMC/SD device drivers”:點(diǎn)擊“MMC/SD device drivers”,進(jìn)入下一頁選擇:用向下的箭頭,選擇Load an Alternae Configuration File 選項(xiàng),輸入配置文件名archarmdefconfigsxsbase270,退出并保存。2)配置完成后,重新編譯核,需要輸入以

12、下指令:生成的zImage存放路徑為:將zImage拷貝到tftpboot文件夾下:3)核燒寫重新打開一個(gè)終端,輸入命令:rootubuntu:# minicom然后重啟開發(fā)板電源,看到 Boot 啟動(dòng)信息后按任意鍵啟動(dòng)Boot 的 Operation Menu,我們需要用這個(gè)boot 嵌工具下載核。然后再提示信息 Please enter your selection 后面輸入2,獲取本地IP 地址:可以看到Operation Menu 菜單上方顯示:My ip address is 0,則表示板載Linux 與Ubuntu 服務(wù)器連接成功。輸入 3,下載核文件 ZIm

13、age(在Ubuntu 的文件系統(tǒng)的/tftpboot/目錄中)下載成功后選擇4,燒寫核。第五章 課程設(shè)計(jì)功能模塊驅(qū)動(dòng)程序設(shè)計(jì)5.1 MMC/SD卡模塊注冊(cè)初始化:static int _devinit mmc_pxa_module_init( void ) int ret = -ENODEV;#ifdef CONFIG_ARCH_RAMSESRAMSES_MMC_ON();udelay(1000);#endifhost = mmc_register( MMC_REG_TYPE_HOST, &pxa_mmc_controller_tmpl_rec,sizeof( pxa_mmc_hostdat

14、a_rec_t ) );/register the SD device if ( !host ) MMC_DEBUG( MMC_DEBUG_LEVEL0, failed to register with MMC coren );goto error;ret = 0;error:return ret;5.2設(shè)備文件操作接口定義static mmc_controller_tmpl_rec_t pxa_mmc_controller_tmpl_rec = owner:THIS_MODULE,name:PXA250,block_size_max:PXA_MMC_BLKSZ_MAX,nob_max:PXA

15、_MMC_NOB_MAX,probe:pxa_mmc_probe,init:pxa_mmc_init,remove:_devexit_p( pxa_mmc_remove ),update_acq:pxa_mmc_update_acq,init_card_stack:pxa_mmc_init_card_stack,check_card_stack:pxa_mmc_check_card_stack,setup_card:pxa_mmc_setup_card,stream_read:pxa_mmc_stream_read,read_block:pxa_mmc_read_block,read_mblo

16、ck:pxa_mmc_read_mblock,stream_write:pxa_mmc_stream_write,write_block:pxa_mmc_write_block,write_mblock:pxa_mmc_write_mblock;5.3 MMC接口初始化static int pxa_mmc_init( mmc_controller_t ctrlr )int ret = -ENODEV;pxa_mmc_hostdata_t hostdata = (pxa_mmc_hostdata_t)ctrlr-host_data;/* 1. allocate buffer */hostdata

17、-iobuf.iodata = kmalloc( PXA_MMC_IODATA_SIZE, GFP_ATOMIC );/2Kif ( !hostdata-iobuf.iodata ) ret = -ENOMEM;goto error;/* 2. initialize iobuf */hostdata-iobuf.blksz = PXA_MMC_BLKSZ_MAX;/* current block size in bytes 1024* /hostdata-iobuf.bufsz = PXA_MMC_IODATA_SIZE;/* buffer size for each transfer */h

18、ostdata-iobuf.nob = PXA_MMC_BLOCKS_PER_BUFFER;/* number of blocks */* 3 request irq */if ( request_irq( IRQ_MMC, pxa_mmc_irq, 0, MMC, ctrlr ) ) MMC_ERROR( failed to request IRQ_MMCn );goto error;/* 4 init GPIO about MMC/SD/SDIO*/ init_gpio( );CKEN |= CKEN12_MMC; /* enable MMC unit clock */ret = 0;go

19、to out;error:kfree( hostdata-iobuf.iodata );out:return ret; 5.4 GPIO初始化函數(shù)static void init_gpio(void) GPCR1 |= 0x1;/clear pin32 GPDR1 = GPDR1 | (10);/config pin32 as output GAFR1_L = (GAFR1_L&0xfffffffc) | (2MMCLK /MMDAT0 PIN92 GPSR2 |= 0x10000000;/pin92 configured as an output, set pin level high (o

20、ne). GPDR2 |= 0x10000000;/pin92 as output / GPDR2 = GPDR2 & (128) ; GAFR2_U = (GAFR2_U & 0xfcffffff) | (1MMDAT /MMDAT1 PIN109 GPSR3 |= (113); GPDR3 |= (113); GAFR3_L = (GAFR3_L & 0xf3ffffff) | (126) ; /MMDAT2 PIN110 GPSR3 |= (114); GPDR3 |= (114); GAFR3_L = (GAFR3_L & 0xcfffffff) | (128); /MMDAT3 PI

21、N111 GPSR3 |= (115); GPDR3 |= (115); GAFR3_L = (GAFR3_L & 0x3fffffff) | (130); /MMCMD PIN112 GPSR3 |= 0x00010000; GPDR3 |= 0x00010000; /GPDR3 = GPDR3 & (116); GAFR3_U = (GAFR3_U & 0xfffffffc) | (1host_data;kfree( hostdata-iobuf.iodata ); /* 1) free buffer(s) */free_irq( IRQ_MMC, ctrlr ); /* 1) relea

22、se irq */CKEN &= CKEN12_MMC; /* disable MMC unit clock */5.6讀數(shù)據(jù)塊操作static int pxa_mmc_read_block( mmc_controller_t ctrlr, mmc_data_transfer_req_t transfer )int ret = -ENODEV;u16 argh = 0UL, argl = 0UL;/* send CMD16 (SET_BLOCK_LEN) when requested block size is not the default * for the current card */

23、 if ( transfer-blksz != ctrlr-stack.selected-info.read_bl_len ) argh = transfer-blksz 16;argl = transfer-blksz;if ( (ret = pxa_mmc_stop_bus_clock( ctrlr ) ) goto error;MMC_CMD = CMD(16); /* SET_BLOCK_LEN */MMC_ARGH = argh;MMC_ARGL = argl;MMC_CMDAT = MMC_CMDAT_R1;MMC_DEBUG( MMC_DEBUG_LEVEL3, CMD16(0x

24、%04x%04x)n, argh, argl );if ( (ret = pxa_mmc_complete_cmd( ctrlr, MMC_R1, FALSE ) )goto error; /* CMD17 (READ_SINGLE_BLOCK) */argh = transfer-addr 16;argl = transfer-addr;if ( (ret = pxa_mmc_stop_bus_clock( ctrlr ) )goto error;MMC_CMD = CMD(17); /* READ_SINGLE_BLOCK */MMC_ARGH = argh;MMC_ARGL = argl

25、;MMC_CMDAT=MMC_CMDAT_R1|MMC_CMDAT_READ|MMC_CMDAT_BLOCK|MMC_CMDAT_DATA_EN ;MMC_NOB = 1;MMC_BLKLEN = transfer-blksz;MMC_DEBUG( MMC_DEBUG_LEVEL3, CMD17(0x%04x%04x)n, argh, argl );if ( (ret = pxa_mmc_complete_cmd( ctrlr, MMC_R1, FALSE ) )goto error;/* transfer the data to the caller supplied buffer */if

26、 ( (ret = pxa_mmc_read_buffer( ctrlr, transfer-blksz ) blksz goto error;if ( (ret = pxa_mmc_copy_from_buffer( ctrlr, transfer-type, transfer-buf, ret ) buf += ret;transfer-cnt -= ret;transfer-nob -= 1;pxa_mmc_set_state( ctrlr, PXA_MMC_FSM_END_IO );if ( (ret = pxa_mmc_complete_io( ctrlr, transfer-cmd

27、, transfer-mode ) )goto error;ret = 0; error:return ret;5.7 寫數(shù)據(jù)塊操作static int pxa_mmc_write_block( mmc_controller_t ctrlr, mmc_data_transfer_req_t transfer )int ret = -ENODEV;u16 argh = 0UL, argl = 0UL;/* send CMD16 (SET_BLOCK_LEN) when requested block size is not the default * for the current card *

28、/ if ( transfer-blksz != ctrlr-stack.selected-info.read_bl_len ) argh = transfer-blksz 16;argl = transfer-blksz;if ( (ret = pxa_mmc_stop_bus_clock( ctrlr ) ) goto error;MMC_CMD = CMD(16); /* SET_BLOCK_LEN */MMC_ARGH = argh;MMC_ARGL = argl;MMC_CMDAT = MMC_CMDAT_R1 ;MMC_DEBUG( MMC_DEBUG_LEVEL3, CMD16(

29、0x%04x%04x)n, argh, argl );if ( (ret = pxa_mmc_complete_cmd( ctrlr, MMC_R1, FALSE ) )goto error; /* CMD24 (WRITE_SINGLE_BLOCK) */argh = transfer-addr 16;argl = transfer-addr;if ( (ret = pxa_mmc_stop_bus_clock( ctrlr ) )goto error;MMC_CMD = CMD(24); /* WRITE_BLOCK */MMC_ARGH = argh;MMC_ARGL = argl;MM

30、C_CMDAT=MMC_CMDAT_R1|MMC_CMDAT_WRITE|MMC_CMDAT_BLOCK|MMC_CMDAT_DATA_EN;MMC_NOB = 1;MMC_BLKLEN = transfer-blksz;MMC_DEBUG( MMC_DEBUG_LEVEL3, CMD24(0x%04x%04x)n, argh, argl );if ( (ret = pxa_mmc_complete_cmd( ctrlr, MMC_R1, FALSE ) )goto error;/* transfer the data to the caller supplied buffer */if (

31、(ret = pxa_mmc_copy_to_buffer( ctrlr, transfer-type, transfer-buf, transfer-cnt ) 0 )goto error;if ( (ret = pxa_mmc_write_buffer( ctrlr, ret ) buf += ret;transfer-cnt -= ret;transfer-nob -= 1;pxa_mmc_set_state( ctrlr, PXA_MMC_FSM_END_IO );if ( (ret = pxa_mmc_complete_io( ctrlr, transfer-cmd, transfe

32、r-mode ) )goto error;ret = 0; error:return ret;第六章 根文件系統(tǒng)建立與文件系統(tǒng)下載6.1 根文件系統(tǒng)分析1)EXT文件系統(tǒng)Ext2fs是Linux的標(biāo)準(zhǔn)文件系統(tǒng),它已經(jīng)取代了擴(kuò)展文件系統(tǒng)(或 Extfs)。擴(kuò)展文件系統(tǒng)Extfs支持的文件大小最大為2 GB,支持的最大文件名稱大小為255個(gè)字符,而且它不支持索引節(jié)點(diǎn)(包括數(shù)據(jù)修改時(shí)間標(biāo)記)。2)NFS文件系統(tǒng) NFS是一個(gè)RPC service ,它是由SUN公司開發(fā),并于1984年推出。NFS文件系統(tǒng)能夠使文件實(shí)現(xiàn)共享,它的設(shè)計(jì)是為了在不同的系統(tǒng)之間使用,所以NFS文件系統(tǒng)的通信協(xié)議設(shè)計(jì)與作業(yè)系

33、統(tǒng)無關(guān)。當(dāng)使用者想使用遠(yuǎn)端文件時(shí)只要用“mount”命令就可以把遠(yuǎn)端文件系統(tǒng)掛載在自己的文件系統(tǒng)上,使遠(yuǎn)端的文件在使用上和本地機(jī)器的文件沒有區(qū)別。NFS的具體配置可參考實(shí)驗(yàn)一的網(wǎng)絡(luò)文件系統(tǒng)nfs的配置。3)JFFS2文件系統(tǒng) JFFS文件系統(tǒng)是瑞典Axis通信公司開發(fā)的一種基于Flash的日志文件系統(tǒng),它在設(shè)計(jì)時(shí)充分考慮了Flash的讀寫特性和電池供電的嵌入式系統(tǒng)的特點(diǎn),在這類系統(tǒng)中必需確保在讀取文件時(shí),如果系統(tǒng)突然掉電,其文件的可靠性不受到影響。對(duì)Red Hat的Davie Woodhouse進(jìn)行改進(jìn)后,形成了JFFS2。主要改善了存取策略以提高FLASH的抗疲勞性,同時(shí)也優(yōu)化了碎片整理性能

34、,增加了數(shù)據(jù)壓縮功能。需要注意的是,當(dāng)文件系統(tǒng)已滿或接近滿時(shí),JFFS2會(huì)大大放慢運(yùn)行速度。這是因?yàn)槔占膯栴}。相對(duì)于EXT2fs而言,JFFS2在嵌入式設(shè)備中更受歡迎。6.2 文件系統(tǒng)映像文件生成1)文件系統(tǒng)安裝與busybox 的編譯 將 D:emdorEELiod_V4_SDKLinux-2.4Filesystem 中的容復(fù)制E:share 中,再Ubuntu 中從共享目錄中復(fù)制到/tmp/中,然后將文件系統(tǒng)壓縮包解壓:可以建立一個(gè)小的應(yīng)用程序,將其復(fù)制到文件系統(tǒng)的某個(gè)目錄中。2)制作JFFS2 文件映像確認(rèn)已將將光盤的 filesystem 下的mkfs.jffs2 和mkrootfs.sh 拷貝到buybox 下返回到 busybox 的根目錄下,運(yùn)行

溫馨提示

  • 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)論