2010年10月26日 星期二

Linux Device Driver的基本架構

每一種OS都會有驅動程式, 而驅動程式主要是做為應用程式要使用各種系統的週邊元件的一中間橋樑, kernel接收及管理應用程式的需求, 並將其需求轉送給驅動程式, 而kernel將會處理多工的問題, 為了讓各種驅動程式好撰寫, 所以每一種OS將會規定驅動程式的寫法, 就好像C語言也有規定應用程式的寫法, 而在linux的OS中規定驅動程式的寫法如下:
  • 目前都是使用C語言來撰寫驅動程式
  • 程式務必include & include
  • 每一個程式都會有一個進入點, 或者第一個指令的地方, linux device driver的進入點如下:
static int __init your_driver_name_init(void)
{
return 0;
}
module_init(your_driver_name_init);

其進入點的名字你可以隨意取一個名字, 但是其原型的宣告方式必須是固定的, 請參考上面的範例程式, 最後必須使用一個巨集指令module_init()來宣告其為程式進入點。
  • Linux的驅動程式可以是static link至kernel, 也可以是動態的方式, linux稱做module, 若是static的方式則必須要有完整的kernel source code, 並且在編譯時會將整個kernel source code編譯過, 而module的方式則不用, 只需要kernel的include檔即, 但是不管是static或者module其進入點宣告方式都一樣
  • 離開或者是下載驅動程式時的進入點宣告如下 :
static void __exit your_driver_name_exit(void)
{
}
module_exit(your_driver_name_exit);

這和進入點一樣, 名字可以隨意取, 但是原型宣告則必須固定, 並且使用module_exit()巨集指令來確定離開驅動式的進入點。

以上是Linux的驅動程式的基本概念。

沒有留言:

張貼留言