亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)轉(zhuǎn)Android驅(qū)動(dòng)開(kāi)發(fā),您準(zhǔn)備好了么?(獲獎(jiǎng)名單已公布-2014-5-22) [打印本頁(yè)]

作者: send_linux    時(shí)間: 2014-04-23 16:45
標(biāo)題: Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)轉(zhuǎn)Android驅(qū)動(dòng)開(kāi)發(fā),您準(zhǔn)備好了么?(獲獎(jiǎng)名單已公布-2014-5-22)
獲獎(jiǎng)名單已公布,詳情請(qǐng)看:http://72891.cn/thread-4139467-1-1.html

Android底層是基于Linux內(nèi)核的,因此要基于Android開(kāi)發(fā)智能手機(jī)或終端,就少不了Linux內(nèi)核與底層驅(qū)動(dòng)的開(kāi)發(fā)。據(jù)了解,這方面的開(kāi)發(fā)人員目前還很缺乏,其中一個(gè)重要的原因就是Linux是一個(gè)與Windows一樣復(fù)雜的軟件系統(tǒng),要理解它,本身不是一件容易的事。但是從另外一個(gè)角度來(lái)看,對(duì)于驅(qū)動(dòng)開(kāi)發(fā)來(lái)說(shuō),設(shè)備模型的理解是根本,毫不夸張得說(shuō),理解了設(shè)備模型,再去看那些五花八門的驅(qū)動(dòng)程序,你會(huì)發(fā)現(xiàn)自己站在了另一個(gè)高度。

本期話題:
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?

活動(dòng)時(shí)間:
2014年4月22日-5月12日

本期嘉賓:
《Android驅(qū)動(dòng)開(kāi)發(fā)權(quán)威指南》圖書作者:楊柳,社區(qū)ID為hongduna
嵌入式開(kāi)發(fā)版斑竹:daniel_kohler

活動(dòng)獎(jiǎng)品:
最佳討論獎(jiǎng):獎(jiǎng)勵(lì)《Android驅(qū)動(dòng)開(kāi)發(fā)權(quán)威指南》一本,共6名

獎(jiǎng)品信息:
Android驅(qū)動(dòng)開(kāi)發(fā)權(quán)威指南   席卷全球的硬件創(chuàng)業(yè)科技浪潮專題

作者: 楊柳   
出版社:機(jī)械工業(yè)出版社
ISBN:9787111451822
上架時(shí)間:2014-3-21
出版日期:2014 年3月
開(kāi)本:16開(kāi)
頁(yè)碼:320

活動(dòng)要求:
1、 要言之有物,不能低于20個(gè)字。
2、 本次話題主要關(guān)注Linux和Android設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的討論,其他問(wèn)題可能不做重點(diǎn)
作者: qingduo04    時(shí)間: 2014-04-23 18:35
路過(guò),支持.............
作者: tc1989tc    時(shí)間: 2014-04-23 20:55
個(gè)人理解linux設(shè)備驅(qū)動(dòng)主要就是熟悉linux內(nèi)核api,多看相關(guān)的設(shè)備驅(qū)動(dòng),然后模仿學(xué)習(xí)。
設(shè)備驅(qū)動(dòng)涉及到內(nèi)核這個(gè)大“進(jìn)程”,所以對(duì)里面的共享訪問(wèn),互斥,多cpu要能理解。
android沒(méi)有接觸過(guò)。。不熟悉
作者: inurl    時(shí)間: 2014-04-24 08:49
支持, 還沒(méi)學(xué)過(guò)andriod,linux的驅(qū)動(dòng)倒是研究過(guò)。
作者: foonsun    時(shí)間: 2014-04-24 13:55
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
粗略看完《linux device driver》the third editon、宋寶華《linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》、宋寶華《精通linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)》。覺(jué)的設(shè)備模型是重點(diǎn),理清設(shè)備模型,就會(huì)發(fā)現(xiàn)驅(qū)動(dòng)均有其規(guī)律可遵循。然后就是實(shí)際工作中主要用到磁盤的盤符驅(qū)動(dòng)。
2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
android內(nèi)核本身就是linux內(nèi)核發(fā)展來(lái),android也有自有的一些驅(qū)動(dòng)類型,但是有l(wèi)inux驅(qū)動(dòng)基礎(chǔ),就不難理解android驅(qū)動(dòng)。

希望能申請(qǐng)到這本書籍啊,
作者: lkkkun    時(shí)間: 2014-04-24 20:05
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
    做Linux驅(qū)動(dòng),我個(gè)人覺(jué)得首先得了解,熟悉驅(qū)動(dòng)模型,總線,進(jìn)程調(diào)度等相關(guān)內(nèi)容,這個(gè)是硬傷,理論知識(shí)豐富了,進(jìn)而學(xué)習(xí)linux 里面牛人的寫的驅(qū)動(dòng)。
這樣就比較容易了。
2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
    Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā),我覺(jué)得本質(zhì)都是一樣的。而且相似度非常高。
如果要轉(zhuǎn)為Android驅(qū)動(dòng),我覺(jué)得可以先了解下Linux驅(qū)動(dòng)與Android驅(qū)動(dòng)的不同,而且轉(zhuǎn)后上手還是非?斓。

作者: T-Bagwell    時(shí)間: 2014-04-24 21:11
本帖最后由 T-Bagwell 于 2014-04-24 21:13 編輯

1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
Linux驅(qū)動(dòng)開(kāi)發(fā),其實(shí)吧東西并不是特別多,主要就是了解設(shè)備模型,驅(qū)動(dòng)模型,以及能看懂datasheet,看懂原理圖,基本可以上手
一般是先上電,在根據(jù)datasheet去設(shè)置時(shí)鐘,中斷等,相關(guān)的操作在IC手冊(cè)中都已經(jīng)有很好的描述了
Linux已經(jīng)將框架都寫好了,照著原有的框架套用就可以了。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā),其實(shí)Linux部分我感覺(jué)沒(méi)啥區(qū)別,現(xiàn)在好多android下的優(yōu)勢(shì)的東西都已經(jīng)可以在pc上用了,例如PM之類的。
Android驅(qū)動(dòng)開(kāi)發(fā)在Linux部分差別不大,但是在HAL部分可能就稍顯明顯了,例如camera驅(qū)動(dòng)開(kāi)發(fā),一般是在HAL和Driver之間,有一個(gè)vendor部分,vendor部分其實(shí)可以理解為pc下面直接操作/dev/下面的設(shè)備節(jié)點(diǎn)的東西,camera部分的isp3a方面的操作一般是在這里面操作。其實(shí)好多關(guān)鍵的東西都在這里面;
有些硬件平臺(tái)有點(diǎn)差別,例如異構(gòu)的平臺(tái),有modem部分系統(tǒng)和Linux部分系統(tǒng),好多純粹的硬件操作都是在modem系統(tǒng)部分操作了,Linux只是通過(guò)rpc從對(duì)應(yīng)的內(nèi)存空間取數(shù)據(jù)就可以了。

總結(jié),Android設(shè)備驅(qū)動(dòng)開(kāi)發(fā)與傳統(tǒng)Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā),差別不大,很好上手,做過(guò)了就知道了


作者: hongduna    時(shí)間: 2014-04-24 21:44
版主是正解。Android實(shí)際上是Linux OS上的一個(gè)衍生品。其驅(qū)動(dòng)與Linux驅(qū)動(dòng)有許多相通之處。從源頭看看,導(dǎo)致Android驅(qū)動(dòng)與PC上Linux驅(qū)動(dòng)相異的主要有2個(gè):一是Android是嵌入式系統(tǒng),與PC 臺(tái)式機(jī)系統(tǒng)不同;二是Android OS在Linux內(nèi)核之上遵循Apache License。其中源頭二就使得Android OS在Linux內(nèi)核之上,引入了HAL 層,以支持各設(shè)備驅(qū)動(dòng)廠商與開(kāi)發(fā)者的商業(yè)利益。而源頭一則使得在Android系統(tǒng)中,只會(huì)選擇會(huì)用到的設(shè)備驅(qū)動(dòng)程序,而不像電腦pc中會(huì)有過(guò)多的冗余,因?yàn)锳ndroid作為一個(gè)便攜式移動(dòng)終端,其上運(yùn)行的設(shè)備,在出廠前基本固定死,而不用像PC那樣要支持太多的設(shè)備擴(kuò)展性。

另外正如T-BagWell所述,Androd的由于運(yùn)用場(chǎng)景不一樣,可能更多地會(huì)偏重于GPS、GSensor等便攜式的感應(yīng)器,這些對(duì)于PC Linux是不適合的。當(dāng)然,對(duì)于一個(gè)底層驅(qū)動(dòng)的工程師來(lái)講,本質(zhì)區(qū)別不大,但在向上層提供服務(wù)的實(shí)時(shí)性上應(yīng)有更多考量。

同時(shí),Android作為一個(gè)實(shí)時(shí)性O(shè)S,還定制了一些獨(dú)有的驅(qū)動(dòng),比如Binder等,以實(shí)現(xiàn)輕量級(jí)的進(jìn)程間通信,以支撐C/S應(yīng)用架構(gòu)的快速響應(yīng)。這些都是Android系統(tǒng)引以為豪的。

同時(shí), Android驅(qū)動(dòng)也是門實(shí)踐性很強(qiáng)的技術(shù),有了Linux驅(qū)動(dòng)開(kāi)發(fā)經(jīng)驗(yàn)肯定會(huì)方便許多;有機(jī)會(huì)大家可以也動(dòng)手開(kāi)發(fā)下Android類的驅(qū)動(dòng),并著手為自己所編寫的驅(qū)動(dòng)編寫相應(yīng)的服務(wù),相信大家一定會(huì)感觸更多。學(xué)過(guò)COM的甚至可能體會(huì)到分布式計(jì)算思想也融入其中,深入些的可能也就會(huì)體會(huì)到Android的架構(gòu)之美和Google的野望^_^
作者: chszs    時(shí)間: 2014-04-24 22:39
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
明確基本概念:系統(tǒng)調(diào)用——應(yīng)用程序OS內(nèi)核之間的接口;設(shè)備驅(qū)動(dòng)——OS內(nèi)核和底層硬件之間的接口。
設(shè)備驅(qū)動(dòng)封裝了硬件的細(xì)節(jié),應(yīng)用程序可以像操作普通文件那樣操作硬件設(shè)備。設(shè)備驅(qū)動(dòng)要完成如下功能:
1)設(shè)備的初始化和關(guān)閉
2)從內(nèi)核向設(shè)備文件雙向傳輸數(shù)據(jù)
3)檢測(cè)和處理設(shè)備可能出現(xiàn)的錯(cuò)誤
Linux系統(tǒng)有三類設(shè)備文件類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。字符設(shè)備跟硬件I/O相關(guān);塊設(shè)備會(huì)操作系統(tǒng)內(nèi)存;網(wǎng)絡(luò)設(shè)備跟通信相關(guān)。這在設(shè)備文件的文件屬性中注明。
每個(gè)文件都有兩個(gè)設(shè)備號(hào):一是主設(shè)備號(hào),它標(biāo)識(shí)驅(qū)動(dòng)程序;二是從設(shè)備號(hào),它標(biāo)識(shí)同一設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備。
Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)和傳統(tǒng)應(yīng)用程序的開(kāi)發(fā)有很大不同,以至于兩者的經(jīng)驗(yàn)無(wú)法相互借用。
Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)工作于內(nèi)核態(tài)。
Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)必備的技能有:良好的C語(yǔ)言功底;熟悉硬件;熟悉Linux內(nèi)核源碼;精通多任務(wù)設(shè)計(jì)。
通常使用GNU C來(lái)開(kāi)發(fā)驅(qū)動(dòng)程序。
Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)要注意,程序是沒(méi)有內(nèi)存保護(hù)機(jī)制的,而且內(nèi)核棧非常小。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
Android是Linux OS的衍生版,兩者有很多共通之處。兩者的區(qū)別在于:
1)Android引入了一個(gè)硬件抽象層HAL
HAL是Linux內(nèi)核驅(qū)動(dòng)程序的封裝,向上提供接口,屏蔽了底層的實(shí)現(xiàn)細(xì)節(jié)。
HAL運(yùn)行于用戶空間,而內(nèi)核驅(qū)動(dòng)程序運(yùn)行于內(nèi)核空間。
內(nèi)核驅(qū)動(dòng)層指提供簡(jiǎn)單的硬件訪問(wèn)邏輯,復(fù)雜的功能都放在HAL了。
2)Android應(yīng)用是Java程序,它通過(guò)JNI訪問(wèn)C程序提供的硬件訪問(wèn)服務(wù)。
基本上來(lái)說(shuō),Android驅(qū)動(dòng)開(kāi)發(fā)有如下的步驟:
一是在Android內(nèi)核源碼中編寫硬件驅(qū)動(dòng)程序;
二是在Android系統(tǒng)中填寫C語(yǔ)言可執(zhí)行程序,它用于訪問(wèn)硬件驅(qū)動(dòng)程序;
三是在Android的HAL添加接口模塊訪問(wèn)硬件驅(qū)動(dòng)程序;
四是在Android系統(tǒng)中編寫JNI方法,為應(yīng)用程序框架層提供Java訪問(wèn)硬件的接口;
五是為Android系統(tǒng)的應(yīng)用程序框架層添加硬件服務(wù)接口;
六是用Java開(kāi)發(fā)Android應(yīng)用程序,調(diào)用JNI訪問(wèn)硬件服務(wù),驗(yàn)證接口是否OK。
3)Linux內(nèi)核驅(qū)動(dòng)是開(kāi)源的,Android驅(qū)動(dòng)是閉源的。

Linux驅(qū)動(dòng)開(kāi)發(fā)轉(zhuǎn)向Android驅(qū)動(dòng)開(kāi)發(fā)是很容易的,原理相通,Android驅(qū)動(dòng)開(kāi)發(fā)顯得復(fù)雜了一點(diǎn),但沒(méi)有質(zhì)的差異。而且Android驅(qū)動(dòng)的閉源給廣大驅(qū)動(dòng)開(kāi)發(fā)程序員帶來(lái)了更多的就業(yè)機(jī)會(huì)。
作者: zh53373282    時(shí)間: 2014-04-25 18:16
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
     就Linux驅(qū)動(dòng)開(kāi)發(fā)而言,大家通常講只要了解設(shè)備模型就能比較好的理解設(shè)備驅(qū)動(dòng)。話雖如此,但是如果僅僅是這樣,要想開(kāi)發(fā)驅(qū)動(dòng)程序可能也不太現(xiàn)實(shí)。個(gè)人覺(jué)得更多的內(nèi)核機(jī)制是必不可少的。比如內(nèi)存管理、線程管理、文件系統(tǒng)。 而其他一些小機(jī)制也必須掌握, 中斷、鏈表、隊(duì)列、定時(shí)器……等等。畢竟做驅(qū)動(dòng)開(kāi)發(fā),不是說(shuō)往系統(tǒng)里面注冊(cè)了這個(gè)設(shè)備就完事了,更重要的是要完成設(shè)備所做的工作。
     在開(kāi)發(fā)的過(guò)程中,多看別人的驅(qū)動(dòng)程序是必不可少的,也是學(xué)習(xí)的捷徑;
     所謂磨刀不誤砍柴功,花點(diǎn)時(shí)間學(xué)習(xí)調(diào)試的方法和相關(guān)的工具也是有必要的。
     檢驗(yàn)驅(qū)動(dòng)完善與否的唯一途徑就是測(cè)試, 所以,一個(gè)優(yōu)秀的開(kāi)發(fā)人員,必定是一個(gè)優(yōu)秀的測(cè)試工程師。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
     Linux驅(qū)動(dòng) 主要是針對(duì)Linux操作系統(tǒng),兼容性是其一個(gè)比較重要的評(píng)價(jià)標(biāo)準(zhǔn);而且Linux 版本如此眾多,Linux系統(tǒng)廠商也很多,就主流的 ubuntu、redhat、fedroa等也都有各自的差異,所以能開(kāi)發(fā)一款通用性高的驅(qū)動(dòng)程序也是Linux驅(qū)動(dòng)開(kāi)發(fā)工程師面臨的難題;    而Android的驅(qū)動(dòng)程序雖然基于LINux內(nèi)核,但是內(nèi)核版本通常固定,而且主要針對(duì)某一固定終端設(shè)備,所以只要在該終端上沒(méi)有問(wèn)題就可以了, 也正因?yàn)槿绱,android 驅(qū)動(dòng)開(kāi)發(fā)工程師需要開(kāi)發(fā)的驅(qū)動(dòng)會(huì)比較多,而不像PC linux 驅(qū)動(dòng)那樣,專注于某一個(gè)設(shè)備的驅(qū)動(dòng)。
     關(guān)于如何轉(zhuǎn)換,我覺(jué)得必要的硬件知識(shí)是需要的;另外就是要善于利用網(wǎng)絡(luò)資源。

作者: lininglive    時(shí)間: 2014-04-26 02:40

1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
     Linux驅(qū)動(dòng)的開(kāi)發(fā)主要還是在掌握模型,其實(shí)總結(jié)起來(lái)Linux下有三類驅(qū)動(dòng),字符驅(qū)動(dòng),塊驅(qū)動(dòng),網(wǎng)絡(luò)驅(qū)動(dòng),這個(gè)是根本,但是在有平臺(tái)驅(qū)動(dòng)和總線驅(qū)動(dòng),這種高級(jí)點(diǎn)的概念,現(xiàn)在驅(qū)動(dòng)模型已經(jīng)很成熟了沒(méi)個(gè)類型的驅(qū)動(dòng)都包括兩個(gè)或三個(gè)層次,在實(shí)際寫驅(qū)動(dòng)時(shí),我們只把最下邊的層次做好就行了。但是由于驅(qū)動(dòng)和內(nèi)核聯(lián)系緊密,所以我們對(duì)驅(qū)動(dòng)的層次結(jié)構(gòu)和內(nèi)核的技術(shù)也要有比較好的了解。學(xué)習(xí)linux驅(qū)動(dòng)可以先閱讀下比較經(jīng)典的驅(qū)動(dòng)書籍,同時(shí)多看看代碼,當(dāng)然練習(xí)是必須的。這個(gè)不能省。盡量找些資源,多練習(xí),多嘗試。所有知識(shí)要想消化到自己的肚子里,必須多練習(xí)。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
     傳統(tǒng)Linux 驅(qū)動(dòng)開(kāi)發(fā) 和Android 驅(qū)動(dòng)開(kāi)發(fā)區(qū)別不大,但是由于Android在Liunx驅(qū)動(dòng)之上又做了一次封裝,所以區(qū)別的部分關(guān)鍵在這里。這個(gè)封裝是android的秘密所在,
它被包含在framework里分為兩個(gè)部分 -- HAL 和 JNI 。
     如果你有時(shí)間研究下就會(huì)發(fā)現(xiàn),HAL 其實(shí)就是類似Linux下應(yīng)用的結(jié)構(gòu),只不過(guò)是換了個(gè)名稱,結(jié)構(gòu)上稍微有些不一樣,但是實(shí)質(zhì)是一樣 比如打開(kāi)設(shè)備文件,有open、close、ioctrl 等典型方法。
     JNI 是java native interface,也就是Java 和 C 的橋梁,有了它就可以再java程序中調(diào)用c的代碼了,其實(shí)它也是HAL 的又一層封裝。有固定的模式。

作者: send_linux    時(shí)間: 2014-04-26 10:05
lininglive 發(fā)表于 2014-04-26 02:40
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
     Linux驅(qū)動(dòng)的開(kāi)發(fā)主要還是在掌握模型,其實(shí)總結(jié)起來(lái)Linux下有三類驅(qū) ...


感謝參與,這都是半夜干活的主啊,呵呵
作者: hongduna    時(shí)間: 2014-04-26 10:53
呵呵,可能大家白天都忙吧,只有晚上才得有空。很高興能在這里與各位Linux與Android資深專家們們一起討論。

看來(lái)大家共同認(rèn)可HAL是Android與Linux的驅(qū)動(dòng)的第一大區(qū)別。
誠(chéng)如樓上lininglive所述,在HAL會(huì)有許多關(guān)于基于標(biāo)準(zhǔn)Linux驅(qū)動(dòng) VFS的訪問(wèn)操作,這是必須的。但大家仍然把HAL理解為驅(qū)動(dòng)的一般,是因?yàn)槠渫ㄟ^(guò)底層驅(qū)動(dòng)收集了I/O數(shù)據(jù),在HAL往往還需要做一起處理,再向上層應(yīng)用提供相應(yīng)的服務(wù)。一個(gè)典型的例子就是3D顯示引擎,圖像數(shù)據(jù)在通過(guò)顯卡(Android里應(yīng)是顯示控制器)輸出之前,繁雜而費(fèi)時(shí)的三維圖像運(yùn)算工作就可以放在HAL中實(shí)現(xiàn)。這應(yīng)是HAL更核心的價(jià)值所在,有效地保護(hù)了開(kāi)發(fā)廠商的核心利益,又不會(huì)太混淆應(yīng)用和其它開(kāi)發(fā)者的視聽(tīng)。

如有偏頗,請(qǐng)大家拍磚。

作者: jimmy-_-lixw    時(shí)間: 2014-04-26 12:10
Android 開(kāi)發(fā)是目前最有前景的行業(yè)。支持Android 系統(tǒng)發(fā)展。
作者: 流氓無(wú)產(chǎn)者    時(shí)間: 2014-04-28 09:26
這個(gè)話題不錯(cuò),但是可能差異還是不大吧
作者: Vinge    時(shí)間: 2014-04-28 09:37
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
     從玩單片機(jī)轉(zhuǎn)過(guò)來(lái)的人。感覺(jué)linux驅(qū)動(dòng)就是把對(duì)硬件的操作套入linux的驅(qū)動(dòng)模型了。這事參考著同類型的源碼做過(guò)一兩次就感覺(jué)沒(méi)有什么難度了。但linux的驅(qū)動(dòng)-總線模型還是挺復(fù)雜的,還好網(wǎng)上資料多。慢慢學(xué)習(xí)吧。
作者: lininglive    時(shí)間: 2014-04-28 11:38
回復(fù) 12# send_linux
感謝 樓主 關(guān)注! 也許是加班的習(xí)慣養(yǎng)成吧!總覺(jué)的夜深人靜的時(shí)候,才能安靜的做點(diǎn)事情!我也是android新手!請(qǐng)大家多指教!

   
作者: henry_wu001    時(shí)間: 2014-04-29 10:45
linux 驅(qū)動(dòng)和android驅(qū)動(dòng)都接觸過(guò),可是都沒(méi)深入。

linux驅(qū)動(dòng)大部分是參考和模仿現(xiàn)有驅(qū)動(dòng),因?yàn)轵?qū)動(dòng)那個(gè)套路就在那里;
android的驅(qū)動(dòng)在linux kernel層的修改是有限的,adb bind log等幾塊;對(duì)具體設(shè)備的驅(qū)動(dòng)到是基于linux驅(qū)動(dòng)上,對(duì)設(shè)備調(diào)用api的實(shí)現(xiàn)。比如gps的驅(qū)動(dòng),在linux層可能是個(gè)串口或usb設(shè)備的驅(qū)動(dòng),但在android hal層它給的是一個(gè).h的接口,實(shí)現(xiàn)了這些接口,就完成了驅(qū)動(dòng)。ril也是類似的。
作者: andycrusoe    時(shí)間: 2014-04-29 12:00
本帖最后由 andycrusoe 于 2014-04-29 12:15 編輯

1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
linux驅(qū)動(dòng)學(xué)習(xí)分為三個(gè)部分
1)硬件部分40%,要求有一定的硬件基礎(chǔ),能看懂原理圖,能使用基本的示波器,萬(wàn)用表,邏輯分析儀等等。各種不同硬件接口的時(shí)序,走線等等,如串口,camera,網(wǎng)口。新硬件,datasheet要認(rèn)真看,注意看重點(diǎn)。
2)協(xié)議部分20%,硬件工作一般按照一定的時(shí)序操作,I2C,SPI常見(jiàn),復(fù)雜的USB邏輯分層,不同的硬件不同,需要經(jīng)驗(yàn)積累,看文檔
3)linux驅(qū)動(dòng)框架部分40%,字符設(shè)備,塊設(shè)備,網(wǎng)絡(luò)設(shè)備三大塊。細(xì)節(jié)有同步,中斷上下文,SMP的不同,poll,platform,tty,proc,sys,同步異步。把驅(qū)動(dòng)框架掌握好了后,就有術(shù)了,有內(nèi)功,一般的驅(qū)動(dòng)修改不成問(wèn)題,從頭開(kāi)始寫驅(qū)動(dòng)至少還得花3倍以上精力吧。

做驅(qū)動(dòng)不易,linux驅(qū)動(dòng)框架,內(nèi)核基礎(chǔ)一定得有,這是一個(gè)大難點(diǎn),需要很長(zhǎng)時(shí)間入門,基本的linux驅(qū)動(dòng)框架,函數(shù)接口熟悉一遍就需要不少時(shí)間。這是一個(gè)非常陡峭的山坡,一定要突擊時(shí)間一次性的上去,否則一段時(shí)間不看就忘了,又掉下來(lái),下次學(xué)習(xí)又需要從頭開(kāi)始,學(xué)習(xí)的過(guò)程中做好筆記,要把書越看越薄。主意理解linux把一切都看出文件的思想,說(shuō)到底,最好都是實(shí)現(xiàn)各種file operations,申請(qǐng),初始化,注冊(cè),使用,釋放,注銷,基本就這個(gè)流程,各個(gè)框架函數(shù)不一樣,封裝層次也有差別,加上一些內(nèi)核其它方法,定時(shí)器,工作隊(duì)列,線程,鎖等,就能完成非常多的工作了

個(gè)人建議學(xué)習(xí)驅(qū)動(dòng)有一定的數(shù)電模電基礎(chǔ),最好做過(guò)單片機(jī),那個(gè)郭天華的十天學(xué)習(xí)單片機(jī)不錯(cuò)。然后從linux的內(nèi)核編程學(xué)起,學(xué)習(xí)linux驅(qū)動(dòng)框架,linux device driver入門不錯(cuò),宋寶華的書不適合新手,當(dāng)手冊(cè)查還行。然后實(shí)踐,大量的調(diào)試,各個(gè)硬件,總線協(xié)議,慢慢積累經(jīng)驗(yàn)。

做驅(qū)動(dòng)的最好有應(yīng)用層開(kāi)發(fā)經(jīng)驗(yàn),知道應(yīng)用層需要什么。驅(qū)動(dòng)是底層硬件和應(yīng)用層的溝通交互人,要把底層給上層屏蔽掉。所以C語(yǔ)言基礎(chǔ)很重要,要扎實(shí)的C功底,一定的面向?qū)ο笏枷,還有GNU C對(duì)標(biāo)準(zhǔn)C的擴(kuò)展需要了解,各種宏的使用也很重要,新手對(duì)各種宏容易暈。

驅(qū)動(dòng)的進(jìn)階BSP開(kāi)發(fā),需要匯編知識(shí)了,一般ARM平臺(tái)的多,arm thumb指令,匯編、C混合編程。靜態(tài)映射很重要,做過(guò)一個(gè)平臺(tái)后,差不多就找到感覺(jué)了。Uboot,linux kernel移植有了基礎(chǔ),看點(diǎn)資料就不難了。
linux內(nèi)核社區(qū)的開(kāi)發(fā)可以看看,了解一下,還有各個(gè)平臺(tái)的一些開(kāi)發(fā)平臺(tái),git源等,多關(guān)注,很可能你在調(diào)試的bug上面已經(jīng)有patch了

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
android和linux底層都是linux 內(nèi)核,android對(duì)內(nèi)核改動(dòng)了一些,還把一些內(nèi)核驅(qū)動(dòng)功能移到hal層,個(gè)人理解差不多就是應(yīng)用層的驅(qū)動(dòng),類似于應(yīng)用層的I2C,SPI驅(qū)動(dòng),底層驅(qū)動(dòng)提供接口,hal層提供業(yè)務(wù)邏輯。
有l(wèi)inux驅(qū)動(dòng)基礎(chǔ)轉(zhuǎn)android還是很快會(huì)上手的,補(bǔ)一下android開(kāi)發(fā)基礎(chǔ)知識(shí),java語(yǔ)言學(xué)習(xí)一下,再學(xué)一下jni,四大組件也可以看一看。
做android就需要了解android了,轉(zhuǎn)向android驅(qū)動(dòng)最好有一定的java基礎(chǔ),JNI,NDK編程需要了解。底層是C驅(qū)動(dòng),然后java通過(guò)JNI調(diào)用接口在上層使用。android的四大組件,不同于純linux開(kāi)發(fā)的地方也需要了解。android只是個(gè)人興趣學(xué)習(xí),沒(méi)多深入,

以上是個(gè)人看法,歡迎交流。做驅(qū)動(dòng)一定要心里有譜,硬件,協(xié)議,驅(qū)動(dòng),內(nèi)核,應(yīng)用層,心里有數(shù)據(jù)流的每一個(gè)過(guò)程,能分析出來(lái)問(wèn)題在哪里。還有可能是電子器件損壞,焊接問(wèn)題,原理圖設(shè)計(jì)問(wèn)題,pcb封裝問(wèn)題,走線干擾問(wèn)題,做多了,可能會(huì)遇到,不知道各位又遇到什么其它罕見(jiàn)的問(wèn)題沒(méi)。你得懷疑每一個(gè)值得懷疑的地方,然后慢慢排查,這里不要推卸責(zé)任,交流溝通很重要,定位了問(wèn)題,就成功了一半,切忌相互推諉,要溝通。

    寫了不少,很多很簡(jiǎn)略,展開(kāi)可能就非常長(zhǎng)了。歡迎有經(jīng)驗(yàn)的交流,共同進(jìn)步
作者: AoyamaRyo    時(shí)間: 2014-04-29 13:14
回復(fù) 13# hongduna


    贊
作者: axlrose    時(shí)間: 2014-04-29 15:08
android底層驅(qū)動(dòng)方面跟標(biāo)準(zhǔn)嵌入式linux開(kāi)發(fā)沒(méi)多大區(qū)別,一般從標(biāo)準(zhǔn)嵌入式linux內(nèi)核移植過(guò)來(lái)的驅(qū)動(dòng),注意添加系統(tǒng)掛起等這些操作
bootloader像uboot在上面添加了fastboot

比較明顯的就是進(jìn)程通訊方式改為了Binder來(lái)通訊, 上層也大量使用了匿名內(nèi)存共享方式, 不過(guò)還沒(méi)深入學(xué)習(xí)

作者: hongduna    時(shí)間: 2014-04-29 21:58
相當(dāng)不錯(cuò),感覺(jué)這個(gè)話題里的都是圈子里的人。觀點(diǎn)都是可圈可點(diǎn),讓我受益頗多。

從大家的字里行間,可以看到都是技術(shù)迷,而且技術(shù)上的全局觀很強(qiáng)。我也能感受到大家都認(rèn)可Android驅(qū)動(dòng)是門有前景且實(shí)踐性很強(qiáng)的手藝。

我們能否起個(gè)更貼近實(shí)戰(zhàn)的話題,比如“統(tǒng)一Camera驅(qū)動(dòng)”,以一個(gè)驅(qū)動(dòng)支持多款Sensor,這個(gè)大家工作是否有碰到?
作者: nesger    時(shí)間: 2014-04-29 22:54
作為一名在校大學(xué)生,我還沒(méi)有進(jìn)行實(shí)際的linux設(shè)備開(kāi)發(fā),現(xiàn)在正在看linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解第二版,因此對(duì)于該問(wèn)題不是很了解,不過(guò)android驅(qū)動(dòng)應(yīng)該和linux驅(qū)動(dòng)差不多,因?yàn)閍ndroid是基于linux內(nèi)核的,只是增加了想binder、ashmem等機(jī)制而已
作者: liuweni    時(shí)間: 2014-04-30 10:25
我們可以把a(bǔ)ndroid看做是和QT平臺(tái)一個(gè)層面的東西。

Linux的一個(gè)基本架構(gòu)是硬件->內(nèi)核->用戶態(tài)app

Android的架構(gòu)是硬件->Linux 內(nèi)核->Android底層適配->android framework -> Android App

從Linux內(nèi)核這個(gè)層面來(lái)講,android和Linux的硬件驅(qū)動(dòng)都是差不多的。
但是Android framework可能會(huì)根據(jù)硬件的不同,調(diào)整一些運(yùn)行時(shí)方式,比如圖形加速,可以采用opengl純軟件方式,也可以采用硬件方式。
所以,在Android底層會(huì)對(duì)目標(biāo)硬件有一個(gè)適配的過(guò)程。這個(gè)是傳統(tǒng)的Linux內(nèi)核所不具有的。
作者: zs7451320    時(shí)間: 2014-04-30 10:53
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
Linux驅(qū)動(dòng)開(kāi)發(fā),其實(shí)吧東西并不是特別多,主要就是了解設(shè)備模型,驅(qū)動(dòng)模型,以及能看懂datasheet,看懂原理圖,基本可以上手
一般是先上電,在根據(jù)datasheet去設(shè)置時(shí)鐘,中斷等,相關(guān)的操作在IC手冊(cè)中都已經(jīng)有很好的描述了
Linux已經(jīng)將框架都寫好了,照著原有的框架套用就可以了。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā),其實(shí)Linux部分我感覺(jué)沒(méi)啥區(qū)別,現(xiàn)在好多android下的優(yōu)勢(shì)的東西都已經(jīng)可以在pc上用了,例如PM之類的。
Android驅(qū)動(dòng)開(kāi)發(fā)在Linux部分差別不大,但是在HAL部分可能就稍顯明顯了,例如camera驅(qū)動(dòng)開(kāi)發(fā),一般是在HAL和Driver之間,有一個(gè)vendor部分,vendor部分其實(shí)可以理解為pc下面直接操作/dev/下面的設(shè)備節(jié)點(diǎn)的東西,camera部分的isp3a方面的操作一般是在這里面操作。其實(shí)好多關(guān)鍵的東西都在這里面;
有些硬件平臺(tái)有點(diǎn)差別,例如異構(gòu)的平臺(tái),有modem部分系統(tǒng)和Linux部分系統(tǒng),好多純粹的硬件操作都是在modem系統(tǒng)部分操作了,Linux只是通過(guò)rpc從對(duì)應(yīng)的內(nèi)存空間取數(shù)據(jù)就可以了。

總結(jié),Android設(shè)備驅(qū)動(dòng)開(kāi)發(fā)與傳統(tǒng)Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā),差別不大.
作者: hongduna    時(shí)間: 2014-04-30 22:28
Android設(shè)備驅(qū)動(dòng)脫胎于于Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā),因此懂Linux設(shè)備驅(qū)動(dòng),再轉(zhuǎn)Android驅(qū)動(dòng)會(huì)方便很多。這就好比數(shù)學(xué)好的話,學(xué)物理也會(huì)占很大便宜是一個(gè)道理。

另外,有網(wǎng)友將Android與QT相比。我也認(rèn)同它們確實(shí)是一個(gè)層的東西。但QT沒(méi)有能像Android一樣的發(fā)揚(yáng)光大,有沒(méi)有得到Google之類大公司支持,和時(shí)間窗口的原因,是否也有自身的原因,比如架構(gòu)的設(shè)計(jì)上有所欠考慮、開(kāi)發(fā)者、原廠和用戶幾方間的利益協(xié)調(diào)不夠通暢等。

本人有幸經(jīng)歷過(guò)QT-》Windows Mobile-》Android的智能手機(jī)系統(tǒng)的變遷,可以看到時(shí)代是在進(jìn)步的,技術(shù)也是進(jìn)步的。老的知識(shí)我們沒(méi)有必要貶低,新知識(shí)我們也沒(méi)有必要過(guò)于排斥,新老之間更多的是融合,因而鑄就了新技術(shù)與新系統(tǒng)的強(qiáng)大。如果不是基于Windows COM組件思想,google估計(jì)也不敢動(dòng)借Android構(gòu)建一個(gè)移動(dòng)虛擬帝國(guó)的夢(mèng)想。
作者: cxsvip    時(shí)間: 2014-05-05 09:00
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
沒(méi)有完整開(kāi)發(fā)過(guò)硬件驅(qū)動(dòng),做過(guò)加密卡驅(qū)動(dòng)二次開(kāi)發(fā),由于加密卡功能通常是通用,無(wú)法拿過(guò)來(lái)直接用,通常都需要針對(duì)不同使用場(chǎng)景進(jìn)行二次開(kāi)發(fā),
舉個(gè)例子,剛接觸加密卡時(shí),曾拿到過(guò)一塊S廠商的卡,當(dāng)時(shí)天真的認(rèn)為,我只要在自己的上下文中調(diào)用加密卡驅(qū)動(dòng)就OK了,神馬性能都不是問(wèn)題,
結(jié)果發(fā)現(xiàn),大流量情況下性能確實(shí)上去了,但小流量情況下性能很差,分析代碼發(fā)現(xiàn)原來(lái)硬件回調(diào)采用InterruptCoalescing方式,且值設(shè)置很大,
廠商還沒(méi)提供對(duì)外接口修改這個(gè)值,沒(méi)辦法只能修改驅(qū)動(dòng)部分代碼,最終解決這個(gè)問(wèn)題。

2、傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
沒(méi)做過(guò)Android驅(qū)動(dòng)開(kāi)發(fā),但我覺(jué)得越底層,應(yīng)該是平臺(tái)無(wú)關(guān)的,轉(zhuǎn)應(yīng)該不是大問(wèn)題。
能想到的一個(gè)問(wèn)題是Android驅(qū)動(dòng)相較于linux應(yīng)該更關(guān)心耗電問(wèn)題,上面那個(gè)例子如果將InterruptCoalescing設(shè)置很小,應(yīng)該會(huì)非常的耗電。
作者: foxzenith    時(shí)間: 2014-05-05 15:17
android底層還是用的linux內(nèi)核,只是中間加了個(gè)delvik JAVA虛擬機(jī),我認(rèn)為對(duì)于上層應(yīng)用開(kāi)發(fā)android是java+xml,linux一般是c,而對(duì)于底層,則都是基于C吧。了解內(nèi)核源碼樹添加驅(qū)動(dòng)和內(nèi)核模塊驅(qū)動(dòng)的方法。差別在哪,還想細(xì)看您的書。
作者: CUTianrui007    時(shí)間: 2014-05-05 17:29
本帖最后由 CUTianrui007 于 2014-05-05 17:30 編輯

1:您的Linux驅(qū)動(dòng)開(kāi)發(fā)經(jīng)驗(yàn)之談
驅(qū)動(dòng)作為內(nèi)核模塊之一,安全性和穩(wěn)定性要求特別高,要開(kāi)發(fā)人員對(duì)內(nèi)核有很深入的了解,對(duì)OS的基本機(jī)制要特別熟悉,比如內(nèi)核進(jìn)程模型,進(jìn)程間通信方式,內(nèi)存管理基本原理?梢哉f(shuō),OS內(nèi)核是驅(qū)動(dòng)程序開(kāi)發(fā)的第一關(guān),另外一關(guān)就是驅(qū)動(dòng)程序模型。驅(qū)動(dòng)程序模型是開(kāi)發(fā)驅(qū)動(dòng)程序基本要求。比如,你要精通kobject,kset等結(jié)構(gòu)體,并深入理解其成員的意義,要明白,這些結(jié)構(gòu)體對(duì)象如何和內(nèi)核其它模塊交互。
還有就是要熟悉硬件了,這個(gè)無(wú)論是做什么驅(qū)動(dòng)開(kāi)發(fā),都是必須的。
還有一點(diǎn),就是總線及協(xié)議了,幾乎可以說(shuō),只要關(guān)系到硬件,總是會(huì)有總線和協(xié)議的,對(duì)二者的深入理解那可是理解硬件,OS的橋梁啊,不可不關(guān)注。



2:傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
從傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)到Android驅(qū)動(dòng)開(kāi)發(fā),其基本原理相似,在我看來(lái),是由復(fù)雜到簡(jiǎn)單了。當(dāng)然了,作為Android還是有其特色的。這個(gè)要求開(kāi)發(fā)人員了解Andorid系統(tǒng)本身,比如Android中的一些很特別的機(jī)制(Binder通信)。
還有就是,Android作為嵌入式系統(tǒng),資源是很有限制的,在Android中要注重節(jié)省資源。
作者: zgj224    時(shí)間: 2014-05-05 22:30
回復(fù) 1# send_linux


    支持,很不錯(cuò)哦。。。。。。
作者: send_linux    時(shí)間: 2014-05-05 22:31
zgj224 發(fā)表于 2014-05-05 22:30
回復(fù) 1# send_linux


實(shí)際行動(dòng)支持哦,趕緊分享,哈哈
作者: hongduna    時(shí)間: 2014-05-06 21:25
1、您的Linux驅(qū)動(dòng)開(kāi)發(fā)的經(jīng)驗(yàn)之談
    這里很多過(guò)來(lái)人分享了自己的經(jīng)驗(yàn)。有一點(diǎn)大家都應(yīng)有認(rèn)同點(diǎn):動(dòng)手實(shí)踐。作為一個(gè)軟件開(kāi)發(fā)學(xué)習(xí)者,在拿到一本相應(yīng)的書的時(shí)候,最好能把書中所講的例子重寫一遍。在代碼編寫與編譯調(diào)試的過(guò)程,一定會(huì)讓你受益匪淺。

2:傳統(tǒng)的Linux驅(qū)動(dòng)開(kāi)發(fā)和Android驅(qū)動(dòng)開(kāi)發(fā)有何區(qū)別,如何轉(zhuǎn)為后者?
    做Android驅(qū)動(dòng)開(kāi)發(fā),如能遵循Android驅(qū)動(dòng)訪問(wèn)的框架,為訪問(wèn)內(nèi)核驅(qū)動(dòng)實(shí)現(xiàn)demo。會(huì)讓大家對(duì)Android的框架美感體會(huì)頗多。為此你除了要寫內(nèi)核層的驅(qū)動(dòng),可能還要寫HAL,JNI,為訪問(wèn)該驅(qū)動(dòng)開(kāi)發(fā)一系統(tǒng)service... ...,這時(shí)你對(duì)Android中AIDL等一些曾經(jīng)可能似是而非東西,有了更深的理解。
作者: conceptcon    時(shí)間: 2014-05-07 18:24
"Linux內(nèi)核與底層驅(qū)動(dòng)的開(kāi)發(fā)。據(jù)了解,這方面的開(kāi)發(fā)人員目前還很缺乏,"
哪里缺乏啊,到處都是,,,,,,,,,,哪有需求,一大堆搞驅(qū)動(dòng)的找不著搞驅(qū)動(dòng)的工作,,,,,,
沒(méi)有必要來(lái)區(qū)分 什么 android驅(qū)動(dòng)和linux驅(qū)動(dòng)吧,,,,這不是外行愛(ài)做的事???????????
作者: willinux    時(shí)間: 2014-05-08 13:58
好帖子啊,先 mark 一下!
作者: ligyf    時(shí)間: 2014-05-12 10:17
講得很棒,學(xué)習(xí)了回復(fù) 19# andycrusoe


   
作者: hongduna    時(shí)間: 2014-05-15 22:09
最近一周忙瘋了。大家怎樣,還有在關(guān)注Android驅(qū)動(dòng)開(kāi)發(fā)的嗎?是不是現(xiàn)在驅(qū)動(dòng)開(kāi)發(fā)越來(lái)越簡(jiǎn)單?大家有這種感覺(jué)么?
作者: andycrusoe    時(shí)間: 2014-05-20 16:15
這個(gè)送書的活動(dòng)到底搞不搞?
作者: send_linux    時(shí)間: 2014-05-20 21:34
andycrusoe 發(fā)表于 2014-05-20 16:15
這個(gè)送書的活動(dòng)到底搞不搞?


這兩天會(huì)公布出來(lái)的,謝謝您的提醒
作者: 注冊(cè)看下    時(shí)間: 2014-06-23 11:41
請(qǐng)教做andriod驅(qū)動(dòng)需要用到binder嗎 ?或者說(shuō)andriod驅(qū)動(dòng)跟linux驅(qū)動(dòng)多大區(qū)別?麻煩路過(guò)的了解到說(shuō)說(shuō),謝謝




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2