freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm的linux網(wǎng)卡驅(qū)動(dòng)程序的開(kāi)發(fā)與設(shè)計(jì)(論文最終完成)-文庫(kù)吧

2025-01-01 13:04 本頁(yè)面


【正文】 網(wǎng)卡驅(qū)動(dòng)的基本要求。 第2章 Linux下設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)的基本知識(shí)在進(jìn)行Linux設(shè)備驅(qū)動(dòng)程序的具體討論之前,有必要對(duì)Linux本身以及網(wǎng)卡設(shè)備等方面做一個(gè)大致的了解和認(rèn)識(shí)。在本章節(jié)中,從介紹Linux的誕生開(kāi)始,由淺入深的進(jìn)入到Linux內(nèi)核,最后過(guò)渡到對(duì)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的介紹。 Linux概述Linux操作系統(tǒng)是UNIX操作系統(tǒng)的一種克隆版本,最早是由芬蘭大學(xué)的學(xué)生Linus Torvalds于1991年開(kāi)始開(kāi)發(fā)的,并于1991年的10月5日第一次正式向外公布,以后借助于互聯(lián)網(wǎng),經(jīng)過(guò)一群遍布于全世界的Internet上的自愿參加的程序員的不懈努力,加上計(jì)算機(jī)公司的支持,Linux的影響和應(yīng)用日益廣泛,發(fā)展成為目前世界上用戶(hù)最多的一種類(lèi)UNIX操作系統(tǒng)。Linux 目前是計(jì)算機(jī)技術(shù)的一大熱點(diǎn)之一,最近幾年在我國(guó)得到迅猛發(fā)展,被廣泛應(yīng)用在嵌入式系統(tǒng)、安全產(chǎn)品、服務(wù)器和桌面應(yīng)用等領(lǐng)域。經(jīng)過(guò)十多年的發(fā)展,到2003年,Linux ,這在Linux發(fā)展史中具有極其重要的作用。今天,在全世界的Internet上的自愿參加的程序員們和計(jì)算機(jī)公司的共同努力下,Linux繼續(xù)飛速的向前發(fā)展。 Linux內(nèi)核簡(jiǎn)介在最開(kāi)始的時(shí)候,Linux系統(tǒng)并沒(méi)有現(xiàn)在所看到的Linux系統(tǒng)的體積這么龐大,各種免費(fèi)開(kāi)放的驅(qū)動(dòng)代碼也還沒(méi)有來(lái)得及加入到系統(tǒng)中,所以,之初的Linux實(shí)際意義上就是Linux內(nèi)核。首先來(lái)分析一下Linux操作系統(tǒng)的體系結(jié)構(gòu),可以從兩個(gè)層次上來(lái)考慮操作系統(tǒng),如下圖 21所示:圖21 GNU/Linux操作系統(tǒng)的基本體系結(jié)構(gòu)圖最上面是用戶(hù)(或應(yīng)用程序)空間。這是用戶(hù)應(yīng)用程序執(zhí)行的地方。用戶(hù)空間之下是內(nèi)核空間,Linux 內(nèi)核正是位于這里。GNU C Library (glibc)也在這里,它提供了連接內(nèi)核的系統(tǒng)調(diào)用接口,還提供了在用戶(hù)空間應(yīng)用程序和內(nèi)核之間進(jìn)行轉(zhuǎn)換的機(jī)制。這點(diǎn)非常重要,因?yàn)閮?nèi)核和用戶(hù)空間的應(yīng)用程序使用的是不同的保護(hù)地址空間,每個(gè)用戶(hù)空間的進(jìn)程都使用自己的虛擬地址空間,而內(nèi)核則占用單獨(dú)的地址空間。實(shí)際上,體系結(jié)構(gòu)可能并不像圖1所示的一樣清晰。例如,處理系統(tǒng)調(diào)用(從用戶(hù)空間切換到內(nèi)核空間)的機(jī)制可能在各個(gè)體系結(jié)構(gòu)上都不相同。Linux系統(tǒng)支持多個(gè)進(jìn)程的并發(fā)運(yùn)行,每個(gè)進(jìn)程都請(qǐng)求系統(tǒng)資源,比如運(yùn)算、內(nèi)存、網(wǎng)絡(luò)連接或其他一些資源等。內(nèi)核負(fù)責(zé)處理所有這些請(qǐng)求,根據(jù)內(nèi)核完成任務(wù)的不同,可以將內(nèi)核劃分成如下圖22的功能模塊:圖22 Linux系統(tǒng)模塊及功能圖 Linux的特性Linux是個(gè)人計(jì)算機(jī)和工作站上的Unix類(lèi)操作系統(tǒng),但是,它絕不僅僅是簡(jiǎn)化的Unix系統(tǒng)。相反,Linux是具有創(chuàng)新意義的Unix類(lèi)操作系統(tǒng)。它不僅繼承了Unix的特征,而且在許多方面超過(guò)了Unix。作為Unix類(lèi)操作系統(tǒng),Linux內(nèi)核具有下列基本特征:Linux內(nèi)核的組織形式為整體式結(jié)構(gòu)。整個(gè)Linux內(nèi)核由很多過(guò)程組成,每個(gè)過(guò)程可以獨(dú)立編譯,然后用連接程序?qū)⑵溥B接在一起成為一個(gè)完整的目標(biāo)程序。從信息隱藏的觀點(diǎn)看,它沒(méi)有任何程度的隱藏,每個(gè)過(guò)程都對(duì)其它過(guò)程都是可見(jiàn)的。這種結(jié)構(gòu)的最大特點(diǎn)是內(nèi)部結(jié)構(gòu)簡(jiǎn)單,子系統(tǒng)間易于訪問(wèn),因此內(nèi)核的工作效率較高。另外,基于過(guò)程的結(jié)構(gòu)也有助于不同的人參與不同過(guò)程的開(kāi)發(fā),從這個(gè)角度來(lái)說(shuō),Linux內(nèi)核又是開(kāi)放式的結(jié)構(gòu),它允許任何人對(duì)其進(jìn)行修正、改進(jìn)和完善。Linux的進(jìn)程調(diào)度方式簡(jiǎn)單而有效??梢哉f(shuō)Linux在追求效率和調(diào)度方式上也是優(yōu)勢(shì)明顯。對(duì)于用戶(hù)進(jìn)程,Linux采用簡(jiǎn)單的動(dòng)態(tài)優(yōu)先級(jí)調(diào)度方式;對(duì)于內(nèi)核中的例程(如設(shè)備驅(qū)動(dòng)程序、中斷服務(wù)程序等)則采用了一種獨(dú)特的機(jī)制—軟中斷機(jī)制,這種機(jī)制保證了內(nèi)核例程的高效運(yùn)行。Linux支持內(nèi)核線程(或稱(chēng)守護(hù)進(jìn)程)。內(nèi)核線程是在后臺(tái)運(yùn)行而又與終端或登錄shell結(jié)合在一起的進(jìn)程。Linux中有許多標(biāo)準(zhǔn)的內(nèi)核線程,其中有一些周期地運(yùn)行來(lái)完成特定的任務(wù)(如swapd),而其余一些則連續(xù)地運(yùn)行,等待處理某些特定的事件(如inetd和lpd)。內(nèi)核線程可以說(shuō)是用戶(hù)進(jìn)程,但和一般的用戶(hù)進(jìn)程又有不同,它象內(nèi)核一樣不被換出,因此運(yùn)行效率較高。Linux支持多種平臺(tái)的虛擬內(nèi)存管理。內(nèi)存管理是和硬件平臺(tái)密切相關(guān)的部分,為了支持不同的硬件平臺(tái)而又保證虛擬存儲(chǔ)管理技術(shù)的通用性,Linux的虛擬內(nèi)存管理為不同的硬件平臺(tái)提供了統(tǒng)一的接口,因此把Linux內(nèi)核移植到一個(gè)新的硬件平臺(tái)并不是一件很困難的事。Linux內(nèi)核另一個(gè)獨(dú)具特色的部分是虛擬文件系統(tǒng)(VFS)。虛擬文件系統(tǒng)不僅為多種邏輯文件系統(tǒng)(如ext2,fat等)提供了統(tǒng)一的接口,而且為各種硬件設(shè)備(作為一種特殊文件)也提供了統(tǒng)一接口。Linux的模塊機(jī)制使得內(nèi)核保持獨(dú)立而又易于擴(kuò)充。模塊機(jī)制可以使內(nèi)核很容易地增加一個(gè)新的模塊(如一個(gè)新的設(shè)備驅(qū)動(dòng)程序),而無(wú)需重新編譯內(nèi)核;同時(shí),模塊機(jī)制還可以把一個(gè)模塊按需添加到內(nèi)核或從內(nèi)核中卸下,這使得我們可以按需要定制自己的內(nèi)核。增加系統(tǒng)調(diào)用以滿足開(kāi)發(fā)者的特殊需求。一般來(lái)說(shuō),系統(tǒng)調(diào)用是操作系統(tǒng)的設(shè)計(jì)者提供給用戶(hù)使用內(nèi)核功能的接口,但Linux開(kāi)放的源代碼也允許你設(shè)計(jì)自己的系統(tǒng)調(diào)用,然后把它加入到內(nèi)核。網(wǎng)絡(luò)部分采用了面向?qū)ο蟮脑O(shè)計(jì)思想,使得Linux內(nèi)核支持多種協(xié)議、多種網(wǎng)卡驅(qū)動(dòng)程序變得更加的容易,為驅(qū)動(dòng)的開(kāi)發(fā)提供了便捷性,減少了工作量,提高了工作效率。 Linux設(shè)備驅(qū)動(dòng)程序概述驅(qū)動(dòng)程序在 Linux內(nèi)核里扮演著特殊的角色。它們是截然不同的黑盒子,使某個(gè)特定硬件響應(yīng)一個(gè)定義好的內(nèi)部編程接口,這些接口隱藏了設(shè)備工作的細(xì)節(jié)。用戶(hù)的活動(dòng)通過(guò)一套標(biāo)準(zhǔn)化的調(diào)用來(lái)執(zhí)行,而這些調(diào)用獨(dú)立于特定的驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序的角色就是將這些調(diào)用映射到作用于實(shí)際硬件設(shè)備相關(guān)的操作上。 這個(gè)編程接口能夠使得驅(qū)動(dòng)程序獨(dú)立于內(nèi)核的其他部分而建立,必要的情況下可在系統(tǒng)運(yùn)行時(shí)“插入”到內(nèi)核。這種模塊化的的特點(diǎn)使得Linux驅(qū)動(dòng)程序的編寫(xiě)非常的簡(jiǎn)單,因此內(nèi)核驅(qū)動(dòng)程序的數(shù)目也增長(zhǎng)及其迅速,目前已經(jīng)有成百上千的驅(qū)動(dòng)程序可以在linux下被使用。 Linux設(shè)備驅(qū)動(dòng)程序分類(lèi)Linux設(shè)備驅(qū)動(dòng)程序在Linux的內(nèi)核源代碼中占有很大的比例,源代碼的長(zhǎng)度日益增加,主要是驅(qū)動(dòng)程序的增加。Linux系統(tǒng)的設(shè)備分為字符設(shè)備(chardevice),塊設(shè)備(blockdevice)和網(wǎng)絡(luò)設(shè)備(networkdevice)三種:字符設(shè)備:字符(char)設(shè)備是個(gè)能夠像字節(jié)流一樣被訪問(wèn)的設(shè)備,由字符設(shè)備的驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)這種特性。字符終端(/dev/console)和串口(/dev/ttys0以及類(lèi)似設(shè)備)就是兩個(gè)字符設(shè)備,他們能夠良好的說(shuō)明“流”這種抽象概念。字符設(shè)備可以通過(guò)文件系統(tǒng)節(jié)點(diǎn)來(lái)訪問(wèn),比如/dev/tty1和/dev/loop0等。這些設(shè)備和普通文件之間的唯一差別在于對(duì)普通文件的訪問(wèn)可以前后移動(dòng)訪問(wèn)位置,而大多數(shù)字符設(shè)備是一個(gè)只能順序訪問(wèn)的數(shù)據(jù)通道。當(dāng)然,也存在具有數(shù)據(jù)特性的字符設(shè)備,訪問(wèn)它們時(shí)可以前后移動(dòng)訪問(wèn)位置。例如,幀抓取器就是這樣一個(gè)設(shè)備,應(yīng)用程序可以用mmap或lseek訪問(wèn)抓取的整個(gè)圖象。塊設(shè)備:如同字符設(shè)備,塊設(shè)備也是通過(guò)位于/dev目錄下的文件系統(tǒng)節(jié)點(diǎn)來(lái)存取。塊設(shè)備上能夠容納文件系統(tǒng)。Linux可以讓?xiě)?yīng)用程序像字符設(shè)備一樣地讀寫(xiě)塊設(shè)備,允許依次傳遞任意多的字節(jié)的數(shù)據(jù)。在內(nèi)核中,和字符驅(qū)動(dòng)程序相比,塊驅(qū)動(dòng)程序具有完全不同的接口,但這些不同對(duì)上層用戶(hù)來(lái)說(shuō)是完全透明的。網(wǎng)絡(luò)接口:任何網(wǎng)絡(luò)事件都是通過(guò)一個(gè)網(wǎng)絡(luò)接口形成的,一個(gè)網(wǎng)絡(luò)接口就是一個(gè)能夠和其他主機(jī)交換數(shù)據(jù)的設(shè)備。通常,接口都是硬件設(shè)備,但也可能是純軟件設(shè)備,比如回環(huán)(loopback)接口。網(wǎng)絡(luò)接口由內(nèi)核中的網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng),負(fù)責(zé)數(shù)據(jù)包的接收和發(fā)送,但它不需要了每項(xiàng)事務(wù)是如何映射到實(shí)際傳送的數(shù)據(jù)包的。許多網(wǎng)絡(luò)連接是面向流的,但網(wǎng)絡(luò)設(shè)備卻圍繞數(shù)據(jù)包的傳輸和接收而設(shè)計(jì)。網(wǎng)絡(luò)驅(qū)動(dòng)程序不需要知道各個(gè)連接的相關(guān)信息,它只要處理數(shù)據(jù)包即可。由于不是面向流的設(shè)備,因此將網(wǎng)絡(luò)接口映射到文件系統(tǒng)中的節(jié)點(diǎn)(比如/dev/tty1)比較困難。Unix訪問(wèn)網(wǎng)絡(luò)接口的方法仍然是給他們分配一個(gè)唯一的名字(比如eth0),但這個(gè)名字在文件系統(tǒng)中不存在對(duì)應(yīng)的節(jié)點(diǎn)。內(nèi)核和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序間的通信,完全不同于內(nèi)核和字符設(shè)備以及塊驅(qū)動(dòng)程序之間的通信,內(nèi)核調(diào)用一套和數(shù)據(jù)傳輸相關(guān)的函數(shù)而不是read、write等。 編寫(xiě)網(wǎng)絡(luò)驅(qū)動(dòng)程序的一些基本概念無(wú)論是什么操作系統(tǒng)的驅(qū)動(dòng)程序,都有一些通用的概念。操作系統(tǒng)提供給驅(qū)動(dòng)程序的支持也大致相同。下面簡(jiǎn)單介紹一下網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的一些基本的也是最重要的概念。發(fā)送和接收:這是一個(gè)網(wǎng)絡(luò)設(shè)備最基本的功能。一塊網(wǎng)卡所做的工作無(wú)非就是數(shù)據(jù)的發(fā)送和接收,所以在驅(qū)動(dòng)程序中必須要告訴系統(tǒng)數(shù)據(jù)的發(fā)送函數(shù)在哪里,系統(tǒng)在有數(shù)據(jù)要發(fā)送時(shí)就會(huì)調(diào)用發(fā)送程序。驅(qū)動(dòng)程序由于是直接操縱硬件的,所以網(wǎng)絡(luò)硬件有數(shù)據(jù)收到時(shí),最先能得到這個(gè)數(shù)據(jù)的就是驅(qū)動(dòng)程序,它負(fù)責(zé)把這些原始數(shù)據(jù)進(jìn)行必要的處理,然后送給系統(tǒng)。這里,操作系統(tǒng)必須要提供兩個(gè)機(jī)制,一個(gè)是找到驅(qū)動(dòng)程序的發(fā)送函數(shù),一個(gè)是驅(qū)動(dòng)程序把收到的數(shù)據(jù)送給系統(tǒng)。中斷:中斷在現(xiàn)代計(jì)算機(jī)結(jié)構(gòu)中占有重要的地位。操作系統(tǒng)必須提供驅(qū)動(dòng)程序響應(yīng)中斷的能力。一般是把一個(gè)中斷處理程序注冊(cè)到系統(tǒng)中去,操作系統(tǒng)在硬件中斷發(fā)生后調(diào)用驅(qū)動(dòng)程序的處理程序。Linux支持中斷的共享,即多個(gè)設(shè)備共享一個(gè)中斷。時(shí)鐘:在實(shí)現(xiàn)驅(qū)動(dòng)程序時(shí),很多地方會(huì)用到時(shí)鐘。如某些協(xié)議里的超時(shí)處理,沒(méi)有中斷機(jī)制的硬件的輪詢(xún)等,操作系統(tǒng)應(yīng)為驅(qū)動(dòng)程序提供定時(shí)機(jī)制,一般是在預(yù)定的時(shí)間過(guò)了以后,系統(tǒng)自動(dòng)回調(diào)注冊(cè)的時(shí)鐘函數(shù)。在網(wǎng)絡(luò)驅(qū)動(dòng)程序中,如果硬件沒(méi)有中斷功能,定時(shí)器可以提供輪詢(xún)(poll)方式對(duì)硬件進(jìn)行存取,或者是實(shí)現(xiàn)某些協(xié)議時(shí)需要的超時(shí)重傳等。第3章 Linux網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)的理論探討網(wǎng)絡(luò)接口是第三類(lèi)標(biāo)準(zhǔn)Linux設(shè)備,網(wǎng)絡(luò)設(shè)備使用特定的內(nèi)核數(shù)據(jù)結(jié)構(gòu)注冊(cè)自身,以備與外界進(jìn)行數(shù)據(jù)交換時(shí)調(diào)用。網(wǎng)絡(luò)驅(qū)動(dòng)程序異步地接收來(lái)自外部世界的數(shù)據(jù)包,并且向內(nèi)核請(qǐng)求把外部獲得的數(shù)據(jù)包發(fā)送給內(nèi)核。內(nèi)核中的網(wǎng)絡(luò)驅(qū)動(dòng)程序接口是為不同模式的操作而精心設(shè)計(jì)的。 Linux下網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)和基本方法網(wǎng)絡(luò)驅(qū)動(dòng)程序能夠完成數(shù)據(jù)的接收和傳輸,依靠的是網(wǎng)絡(luò)驅(qū)動(dòng)程序的數(shù)據(jù)結(jié)構(gòu)以及其對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的設(shè)備方法。 網(wǎng)卡驅(qū)動(dòng)程序設(shè)計(jì)要用到的數(shù)據(jù)結(jié)構(gòu)net_device[1]結(jié)構(gòu)處于網(wǎng)絡(luò)驅(qū)動(dòng)層的非常核心的位置并且值得完全的描述。 它也是我們了解一個(gè)網(wǎng)卡設(shè)備的最好入口點(diǎn)。(1) 全局信息結(jié)構(gòu) net_device 的第一部分是由下面成員組成:char name[IFNAMSIZ];設(shè)備名稱(chēng)。如果名稱(chēng)由驅(qū)動(dòng)程序設(shè)置,會(huì)包含一個(gè)%d格式串, register_netdev 將用一個(gè)數(shù)字來(lái)替換它,使它成為一個(gè)唯一的名子,分配的編號(hào)從0開(kāi)始。unsigned long state;設(shè)備狀態(tài)。這個(gè)成員包括若干個(gè)標(biāo)志。驅(qū)動(dòng)程序在正常情況下不直接操作這些標(biāo)志,相反,內(nèi)核提供了一組工具函數(shù)來(lái)專(zhuān)門(mén)操作該標(biāo)志。struct net_device *next;指向全局列表中下一個(gè)設(shè)備的指針。驅(qū)動(dòng)程序不應(yīng)該修改這個(gè)成員。int (*init)(struct net_device *dev);初始化函數(shù)。如果設(shè)置了這個(gè)指針,這個(gè)函數(shù)被 register_netdev 調(diào)用來(lái)完成對(duì)net_device結(jié)構(gòu)的初始化。大部分現(xiàn)代的網(wǎng)絡(luò)驅(qū)動(dòng)程序不再使用這個(gè)函數(shù)了,相反,它們是在注冊(cè)接口前完成初始化工作的。(2).硬件信息下面的成員包含了相對(duì)簡(jiǎn)單設(shè)備的低層硬件信息。它們是早期 Linux 網(wǎng)絡(luò)特點(diǎn)的延續(xù),大部分現(xiàn)代驅(qū)動(dòng)程序仍然使用它們。unsigned long rmem_end;unsigned long rmem_start;unsigned long mem_end;unsigned long mem_start;設(shè)備的內(nèi)存信息.。這些成員保存了設(shè)備使用的共享內(nèi)存的開(kāi)始地址和結(jié)束地址。如果設(shè)備有不同的接收和發(fā)送內(nèi)存,mem成員由發(fā)送內(nèi)存使用,rmem成員由接收內(nèi)存使用。rmem成員在驅(qū)動(dòng)之外從不被引用。根據(jù)規(guī)定,end成員的設(shè)置要保證end start等于可用的板卡內(nèi)存量。unsigned long base_addr;網(wǎng)絡(luò)接口的I/O基地址。這個(gè)成員由驅(qū)動(dòng)在設(shè)備探測(cè)時(shí)賦值。 Ifconfig命令可用來(lái)顯示或修改當(dāng)前值。base_addr可以在系統(tǒng)啟動(dòng)時(shí)、或者在模塊加載時(shí)在內(nèi)核命令行中顯式賦值。這個(gè)成員和內(nèi)存成員一樣,內(nèi)核不使用它們。unsigned char irq;被賦予的中斷號(hào)。當(dāng)接口被列出時(shí),ifconfig命令打印出devirq的值。這個(gè)值常常在啟動(dòng)或者加載時(shí)設(shè)置,其后可以通過(guò)ifconfig命令修改。unsigned char if_port;指定在多端口設(shè)備中使用哪個(gè)端口。例如,如果這個(gè)設(shè)備同時(shí)支持同軸電纜(IF_PORT_10BASE2)和雙絞線(IF_PORT_100BSAET)以太網(wǎng)連接,就可以使用該變量。完整的已知端口類(lèi)型設(shè)置定義在linux/。unsigned char dma;為設(shè)備分配的DMA通道。這個(gè)成員只對(duì)某些外設(shè)總線有意義,例如 ISA。 除了用于顯示信息(ifconfig命令)之外,它不在設(shè)備驅(qū)動(dòng)自身以外使用。c).接口信息有關(guān)接口的大部分信息由ether_setup函數(shù)正確設(shè)置,或者任何其他對(duì)給定硬件類(lèi)型適合的設(shè)置函數(shù)。以太網(wǎng)卡可以依賴(lài)這個(gè)通用的函數(shù)設(shè)置大部分這些成員,但是flags和dev_addr成員是特定設(shè)備的, 必須在初始化期間顯示賦值。一些非以太網(wǎng)接口可以使用類(lèi)似ether_setup的輔助函數(shù)。deviers/net/ 輸出了一些類(lèi)似的函數(shù),包括下列:void ltalk_setup(struct net_device *dev);設(shè)置一個(gè) LocalTalk 設(shè)備的函數(shù)。void fc_setup(struct net_device *dev);初始化光通道設(shè)備。void fddi_setup(struct n
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1