IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)操作系統(tǒng)LINUX → Linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程

Linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  驅(qū)動(dòng)程序編寫基本流程:

  1.首先是一些版本信息,沒什么用,但是不能少

  #define __NO_VERSION__

  #include

  #include

  char kernel_version[] = UTS_RELEASE;

  2.為了把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來,需要一個(gè)非常關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):struct file_operations。file_operations結(jié)構(gòu)的每一個(gè)成員的名字都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)用。用戶進(jìn)程利用系統(tǒng)調(diào)用在對(duì)設(shè)備文件進(jìn)行諸如read/write操作時(shí),系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。這是linux的設(shè)備驅(qū)動(dòng)程序工作的基本原理。編寫設(shè)備驅(qū)動(dòng)程序的主要工作就是編寫子函數(shù),并填充file_operations的各個(gè)域

  3.簡(jiǎn)單驅(qū)動(dòng)程序的編寫(test.c):

  a.包含一些基本的頭文件。

  b.編寫一些功能函數(shù),比如read(),write()等。這些函數(shù)被調(diào)用時(shí)系統(tǒng)進(jìn)入和心態(tài)。

  c.定義struct file_operations結(jié)構(gòu)的對(duì)象,填充結(jié)構(gòu)體。結(jié)構(gòu)體中功能的順序不能改變,若一些功能沒有實(shí)現(xiàn)就用NULL填充,已經(jīng)實(shí)現(xiàn)的功能如read()、write()分別添加到對(duì)應(yīng)的位置。這步實(shí)現(xiàn)的是函數(shù)的注冊(cè)。到這里驅(qū)動(dòng)程序的主體可以說是寫好了。現(xiàn)在需要把驅(qū)動(dòng)程序嵌入內(nèi)核。

  d.注冊(cè)設(shè)備驅(qū)動(dòng)程序,使用register_chrdev注冊(cè)字符型設(shè)備。函數(shù)原型為:

  int register_chrdev(0, "test_name", &test_file_operations)

  函數(shù)返回主設(shè)備號(hào),若注冊(cè)成功返回值大于0。

  第一個(gè)參數(shù):主設(shè)備號(hào)。第二個(gè)參數(shù):注冊(cè)的設(shè)備名。第三個(gè)參數(shù):結(jié)構(gòu)體名(設(shè)備相關(guān)操作方式,驅(qū)動(dòng)程序?qū)嶋H執(zhí)行操作的函數(shù)的指針)。

  這個(gè)函數(shù)由int init_module(void)函數(shù)調(diào)用,這個(gè)函數(shù)在系統(tǒng)啟動(dòng)時(shí)注冊(cè)到內(nèi)核時(shí)調(diào)用。

  e.在用rmmod卸載模塊時(shí),cleanup_module函數(shù)被調(diào)用,它釋放字符設(shè)備test在系統(tǒng)字符設(shè)備表中占有的表項(xiàng)。

  void cleanup_module(void)

  {

  unregister_chrdev(test_major, "test");

  }

  到這里test.c基本就編寫完成了。一個(gè)簡(jiǎn)單的字符設(shè)備可以說寫好了。

  4.編譯

  $ gcc -O2 -DMODULE -D__KERNEL__ -c test.o test.c

  得到文件test.o就是一個(gè)設(shè)備驅(qū)動(dòng)程序。

  如果設(shè)備驅(qū)動(dòng)程序有多個(gè)文件,把每個(gè)文件按上面的命令行編譯,然后

  ld -r file1.o file2.o -o modulename

  驅(qū)動(dòng)程序已經(jīng)編譯好了,現(xiàn)在把它安裝到系統(tǒng)中去。

  $ insmod -f test.o

  安裝成功在/proc/devices文件中就可以看到設(shè)備test,并可以看到主設(shè)備號(hào)。要卸載運(yùn)行:

  $ rmmod test

  5.創(chuàng)建設(shè)備節(jié)點(diǎn)

  mkmod /dev/test c major minor

  c是指字符設(shè)備,major是主設(shè)備號(hào),minor是從設(shè)備號(hào),一般可以設(shè)置為0

  以上就是linux驅(qū)動(dòng)編寫的基本過程了,可能有遺漏的地方,這個(gè)我只是按我理解的整理的。具體問題還要在實(shí)踐中再進(jìn)行研究。

關(guān)鍵詞標(biāo)簽:Linux字符設(shè)備驅(qū)動(dòng)程序

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

    人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載