成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何向 Linux 內核提交驅動

開發
當Linux驅動程序開發到一定階段,向kernel.org提交代碼是一個很好的選擇。對于很多沒有向上游提交過代碼的開發者來說,還是有很多疑問需要解決的。比如,究竟我們向哪里提交驅動程序?提交時我們的代碼應該處于什么狀態?提交的過程又如何呢?

當Linux驅動程序開發到一定階段,向kernel.org提交代碼是一個很好的選擇。對于很多沒有向上游提交過代碼的開發者來說,還是有很多疑問需要解決的。比如,究竟我們向哪里提交驅動程序?提交時我們的代碼應該處于什么狀態?提交的過程又如何呢?

[[143470]]

向哪里提交

Linux staging tree是Greg KH建立的用于提交驅動程序的git倉庫。我們可以把staging tree看作是代碼進入mainline內核之前的一個預科班,新增的驅動程序首先需要放到這里供社區review和測試。Staging tree是 Greg KH于2008年建立的一棵kernel tree,其建立之目的是用來放置一些未充分測試或者因為一些其他原因未能進入內核的新增驅動程序和新增文件系統。

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協議的端口號是9418,因為很多公司的防火墻只會開放80端口,clone代碼倉庫時如果git協議超時,不妨試試 http協議。

關于Linux staging tree更詳細的描述可以參考我前一篇博文《小議Linux staging tree》。

我們的代碼

在我們向上游提交驅動程序之前,需要保證代碼能夠遵循Linux內核的coding style。當然,這個規定并不是強制的,如果您經常閱讀Linux內核代碼,就會發現很多驅動對內核coding style的遵循情況也并不是太好。但一致的代碼風格對代碼的維護大有裨益,所以對作為Linux內核驅動程序員的我們來說,遵循coding style是一個很好的習慣。關于Linux內核的coding style的詳細信息,可以參考Linux內核里的Documentation/CodingStyle文檔,或者我之前的博文《談談為 Linux 內核開發驅動代碼的編碼風格》。

我們在提交驅動之前還需要用靜態代碼檢查工具sparse來檢查一下代碼。

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

sparse的使用方法很簡單,只要在make驅動程序時加上“C=N”的選項即可,其中N的取值是1或者2。當N=1時表示對需要重新編譯的C文件進行代碼檢查,N=2時表示對所有的C文件進行代碼檢查。

對于staging目錄下的驅動來說,我們還需要附上一個TODO文件,用來描述未來的維護計劃。一般情況下,TODO文件可以這樣寫:

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

如何提交

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

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

git format-patch -N

其中,N是整數,用來指定我們把最近N次提交做成N個patch。比如當N=1時,就表示把最近一次提交制作成patch。Git會根據提交的log信息來自動命名patch文件。

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

Log的第一行是一個簡短的描述。本文主要介紹如何向staging tree提交代碼,我們需要在Log首行以“staging:”開頭。Log的最后一行需要提供提交者的email信息,我們可以這樣 寫:“Signed-off-by: wwang <wwang@some.site>”。

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

  1. staging: hello_world: My first commit 
  2. This is my first commit. 
  3. Signed-off-by: wwang <wwang@some.site> 

Patch生成之后,我們需要把它寄給staging tree的維護者,通常是Greg KH本人以及linux內核驅動的開發者列表。這個步驟也可以使用git來幫助我們完成,但首先需要確定系統里已經安裝msmtp和git-email這 兩個包。這里還需提醒一下,如果您的郵件服務器是Exchange,很可能需要NTLM認證,這就要求msmtp支持NTLM。Ubuntu倉庫里的 msmtp默認支持NTLM,可以直接使用,但還有些其他的發行版的軟件倉庫里自帶的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發送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發送出去只是提交驅動程序的第一步,之后還需要不斷的維護與完善,把代碼丟給內核然后就放手不管的做法是不可取的。提交代碼還有一個原則,就是每次提交只做一件事情,這樣才會比較方便內核維護者來review我們的代碼。

責任編輯:王雪燕 來源: wwang
相關推薦

2011-08-16 16:20:33

Linuxkconfigmakefile

2022-10-08 11:57:30

Linux內核架構

2013-05-17 10:19:17

2015-07-20 10:00:28

Linux內核編碼風格

2017-03-23 14:30:13

Linux內核驅動編碼風格

2021-12-15 10:02:25

鴻蒙HarmonyOS應用

2023-05-15 08:58:41

塊設備驅動Linux

2018-10-15 10:10:41

Linux內核補丁

2009-09-14 09:40:48

微軟Linux代碼

2017-08-01 17:34:47

Linux內核驅動文件讀寫

2013-10-31 16:29:10

Linux內核

2023-05-12 07:27:24

Linux內核網絡設備驅動

2012-02-17 10:59:08

Linux Deepi

2023-04-28 08:42:08

Linux內核SPI驅動

2020-01-02 10:04:32

Linux 系統 數據

2015-07-31 10:31:20

Linux 內核編碼規范

2015-07-30 10:51:42

Linux內核Linux

2010-07-19 10:05:52

ibmdwLinux

2013-11-04 15:03:56

LinuxLinux內核

2011-09-05 13:58:29

Sencha Touc控件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费特级黄毛片 | 国产精品一区久久久 | 日韩国产欧美视频 | 国产精品精品视频一区二区三区 | 欧美精品久久久久久 | 午夜爽爽爽男女免费观看 | 久久国产视频播放 | 国产精品一区二区三区在线 | 97日日碰人人模人人澡分享吧 | 欧美综合国产精品久久丁香 | 51ⅴ精品国产91久久久久久 | 国产精品高清一区二区三区 | 国产精品jizz在线观看老狼 | 懂色中文一区二区三区在线视频 | 永久www成人看片 | 欧美精品中文字幕久久二区 | 国产精品久久久久久久久久久久 | aaaaaaa片毛片免费观看 | 国产一级电影在线观看 | 熟女毛片| 国产精品久久久久久中文字 | 伊人电影院av | 电影午夜精品一区二区三区 | 天天操 夜夜操 | a黄视频 | 欧美日韩福利视频 | 国产精品久久久久久福利一牛影视 | 久久综合久 | 欧美黄色性生活视频 | 国产欧美精品一区 | 亚洲欧美日韩精品久久亚洲区 | 日本午夜精品一区二区三区 | 国产精品视频免费播放 | 日韩不卡一区二区三区 | 亚洲网址在线观看 | 国内精品一区二区三区 | 欧美成人一级 | 毛片一区| 国产午夜av片 | 97在线播放| 国产精品成人免费 |