日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何向Linux內(nèi)核提交驅(qū)動(dòng)

當(dāng)Linux驅(qū)動(dòng)程序開(kāi)發(fā)到一定階段,向kernel.org提交代碼是一個(gè)很好的選擇。對(duì)于很多沒(méi)有向上游提交過(guò)代碼的開(kāi)發(fā)者來(lái)說(shuō),還是有很多疑問(wèn)需要解決的。比如,究竟我們向哪里提交驅(qū)動(dòng)程序?提交時(shí)我們的代碼應(yīng)該處于什么狀態(tài)?提交的過(guò)程又如何呢?

向哪里提交

Linux staging tree是Greg KH建立的用于提交驅(qū)動(dòng)程序的git倉(cāng)庫(kù)。我們可以把staging tree看作是代碼進(jìn)入mainline內(nèi)核之前的一個(gè)預(yù)科班,新增的驅(qū)動(dòng)程序首先需要放到這里供社區(qū)review和測(cè)試。Staging tree是 Greg KH于2008年建立的一棵kernel tree,其建立之目的是用來(lái)放置一些未充分測(cè)試或者因?yàn)橐恍┢渌蛭茨苓M(jìn)入內(nèi)核的新增驅(qū)動(dòng)程序和新增文件系統(tǒng)。

Linux staging tree的URL是” git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git “或者” http://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git “。這里需要注意的是,git協(xié)議的端口號(hào)是9418,因?yàn)楹芏喙镜姆阑饓χ粫?huì)開(kāi)放80端口,clone代碼倉(cāng)庫(kù)時(shí)如果git協(xié)議超時(shí),不妨試試 http協(xié)議。

關(guān)于Linux staging tree更詳細(xì)的描述可以參考我前一篇博文《小議Linux staging tree》。

我們的代碼

在我們向上游提交驅(qū)動(dòng)程序之前,需要保證代碼能夠遵循Linux內(nèi)核的coding style。當(dāng)然,這個(gè)規(guī)定并不是強(qiáng)制的,如果您經(jīng)常閱讀Linux內(nèi)核代碼,就會(huì)發(fā)現(xiàn)很多驅(qū)動(dòng)對(duì)內(nèi)核coding style的遵循情況也并不是太好。但一致的代碼風(fēng)格對(duì)代碼的維護(hù)大有裨益,所以對(duì)作為L(zhǎng)inux內(nèi)核驅(qū)動(dòng)程序員的我們來(lái)說(shuō),遵循coding style是一個(gè)很好的習(xí)慣。關(guān)于Linux內(nèi)核的coding style的詳細(xì)信息,可以參考Linux內(nèi)核里的Documentation/CodingStyle文檔,或者我之前的博文《談?wù)劄?Linux 內(nèi)核開(kāi)發(fā)驅(qū)動(dòng)代碼的編碼風(fēng)格》。

我們?cè)谔峤或?qū)動(dòng)之前還需要用靜態(tài)代碼檢查工具sparse來(lái)檢查一下代碼。

sparse的源代碼可以從“git://git.kernel.org/pub/scm/devel/sparse/sparse.git”獲 得,得到代碼之后,執(zhí)行”make; make install”來(lái)編譯生成可執(zhí)行程序。默認(rèn)情況下,sparse程序會(huì)被放到目錄“~/bin”下面,如果您不喜歡這個(gè)位置,可以修改Makefile 來(lái)設(shè)定路徑。需要注意的是,使用sparse之前,PATH環(huán)境變量要設(shè)置正確。

sparse的使用方法很簡(jiǎn)單,只要在make驅(qū)動(dòng)程序時(shí)加上“C=N”的選項(xiàng)即可,其中N的取值是1或者2。當(dāng)N=1時(shí)表示對(duì)需要重新編譯的C文件進(jìn)行代碼檢查,N=2時(shí)表示對(duì)所有的C文件進(jìn)行代碼檢查。

對(duì)于staging目錄下的驅(qū)動(dòng)來(lái)說(shuō),我們還需要附上一個(gè)TODO文件,用來(lái)描述未來(lái)的維護(hù)計(jì)劃。一般情況下,TODO文件可以這樣寫(xiě):

TODO:
- support more features
- use kernel coding style
- checkpatch.pl fixes

如何提交

我們可以通過(guò)patch的形式把驅(qū)動(dòng)程序提交給staging tree。提交之前,需要首先把staging tree clone到本地,然后基于當(dāng)前的工作目錄制作patch。

Git提供了制作格式化的patch的功能,命令如下:

git format-patch -N

其中,N是整數(shù),用來(lái)指定我們把最近N次提交做成N個(gè)patch。比如當(dāng)N=1時(shí),就表示把最近一次提交制作成patch。Git會(huì)根據(jù)提交的log信息來(lái)自動(dòng)命名patch文件。

這里需要注意的是,每次提交的log的描述要遵循一定的格式。

Log的第一行是一個(gè)簡(jiǎn)短的描述。本文主要介紹如何向staging tree提交代碼,我們需要在Log首行以“staging:”開(kāi)頭。Log的最后一行需要提供提交者的email信息,我們可以這樣 寫(xiě):“Signed-off-by: wwang ”。

舉個(gè)例子,假定我們的staging driver命名為hello_world,log的格式可以參考如下:

 
 
  1. staging: hello_world: My first commit 
  2. This is my first commit. 
  3. Signed-off-by: wwang  

Patch生成之后,我們需要把它寄給staging tree的維護(hù)者,通常是Greg KH本人以及l(fā)inux內(nèi)核驅(qū)動(dòng)的開(kāi)發(fā)者列表。這個(gè)步驟也可以使用git來(lái)幫助我們完成,但首先需要確定系統(tǒng)里已經(jīng)安裝msmtp和git-email這 兩個(gè)包。這里還需提醒一下,如果您的郵件服務(wù)器是Exchange,很可能需要NTLM認(rèn)證,這就要求msmtp支持NTLM。Ubuntu倉(cāng)庫(kù)里的 msmtp默認(rèn)支持NTLM,可以直接使用,但還有些其他的發(fā)行版的軟件倉(cāng)庫(kù)里自帶的msmtp并不支持NTLM(如Arch Linux),這種情況就需要自己編譯了。

msmtp安裝好之后,需要配置”~/.msmtprc”文件。以Gmail為例,”.msmtprc”可以這樣配置:

 
 
  1. # Set default values for all following accounts. 
  2. defaults 
  3. logfile ~/.msmtp.log 
  4.  
  5. # gmail 
  6. account gmail 
  7. protocol smtp 
  8. host smtp.gmail.com 
  9. from my@gmail.com 
  10. user my@gmail.com 
  11. password mypasswd 
  12. port 587 
  13. auth on 
  14. tls on 
  15. tls_trust_file /etc/ssl/certs/ca-certificates.crt 
  16. syslog LOG_MAIL 
  17.  
  18. # Set a default account 
  19. account default : gmail 

用git發(fā)送patch的命令如下:

 
 
  1. git send-email   /  
  2.   --smtp-server /usr/bin/msmtp  /  
  3.   --from my@gmail.com  / 
  4.   --to gregkh@suse.de  /  
  5.   --to devel@linuxdriverproject.org  /  
  6.   --to linux-kernel@vger.kernel.org  /  
  7.   ./my.patch 

將patch發(fā)送出去只是提交驅(qū)動(dòng)程序的第一步,之后還需要不斷的維護(hù)與完善,把代碼丟給內(nèi)核然后就放手不管的做法是不可取的。提交代碼還有一個(gè)原則,就是每次提交只做一件事情,這樣才會(huì)比較方便內(nèi)核維護(hù)者來(lái)review我們的代碼。


當(dāng)前題目:如何向Linux內(nèi)核提交驅(qū)動(dòng)
當(dāng)前鏈接:http://m.5511xx.com/article/copheop.html