青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

edog

冰凍熱狗
數據加載中……

一個簡單的Linux驅動程序和Makefile

1、源程序

//hello.c

1.     #include <linux/init.h>   

2.     #include <linux/module.h>   

3.       

4.     MODULE_LICENSE("Dual BSD/GPL");  

5.       

6.     static int hello_init(void)  

7.     {  

8.         printk(KERN_ALERT "hello module!\n");  

9.         return 0;  

10. }  

11.   

12. static void hello_exit(void)  

13. {  

14.     printk(KERN_ALERT "bye module!\n");  

15. }  

16.   

17. module_init(hello_init);  

18. module_exit(hello_exit);  

 

2、驅動程序介紹

一個linux內核模塊主要由如下幾個部分組成:

1module加載函數。

 

當通過insmodmodprobe命令加載內核module時,module的加載函數會自動被內核運行,完成本module的相關初始化工作。

 

module加載函數通過module_init()函數向內核注冊。

 

2module卸載函數。

 

rmmod命令卸載某個模塊時,模塊的卸載函數會自動被內核執行,完成本模塊初始化的相反功能。

 

module卸載函數通過module_exit()函數向內核注冊。

 

3module許可聲明(必須)

 

許可證license聲明描述內核模塊的許可權限,如果不聲明license,模塊被加載時,將,收到內核被污染(kernel tainted)的警告。linux中可接受的license包括“GPL”,“GPL v2”,“Dual BSD/GPL”,“Dual MPL/GPL”等。

 

多數情況下,內核模塊應遵循GPL兼容許可權,2.6內核模塊最常見的是以MODULE_LICENSE("Dual BSD/GPL")語句聲明模塊采用BSD/GPL LICENSE

 

4)模塊參數(可選)

 

5)模塊到處符號(可選)

 

6)模塊作者等信息聲明(可選),如MODULE_AUTHOR(),MODULE_DESCRIPTION(),MODULE_ALIAS()等。

 

編譯得到hello.ko,然后insmod hello.ko加載模塊,rmmod hello.ko 卸載模塊。

 

 

linux內核的整體結構已經非常龐大,而其包含的組件也非常多,有兩種方法把需要的部分都包含在內核中

 

一,把所有功能都編譯進內核,但這回導致兩個問題,生成的內核會特別打,假如要把現在的內核增加或刪除功能,將不得不重新編譯整個內核。

 

二,使用模塊module,上述我們寫的最簡單驅動,就是一個模塊module,可以隨意的增加或刪除。

 

3Makefile文件

怎樣把hello.c源文件編譯成helo.ko內核模塊呢,同樣使用make,但這里的Makefile與一般的應用程序Makefile有所不同,驅動Makfile要指定內核源代碼位置,先看一個簡單的驅動Makefile

1.     obj-m := hello.o  

2.     KERNEL_DIR := /lib/modules/$(shell uname -r)/build  

3.     PWD := $(shell pwd)  

4.     all:  

5.         make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules  

6.     clean:  

7.         rm *.o *.ko *.mod.c  

8.       

9.     .PHONY:clean  

KERNEL_DIR為內核源代碼build目錄,我們知道,內核存放在/usr/src中,/lib/modules其實是連接到這個地方,在shell中執行uname -r會得到正在使用的完整內核版本號,這樣就選擇了適當的內核源碼。

PWD為源文件hello.c所在目錄。

make -C (大寫C make會進入KERNEL_DIR目錄執行此目錄下的Makefile,然后在返回PWD目錄執行自己寫的Makefile

4、在終端中make

1.     [root@localhost driver]# make  

2.     make -C /lib/modules/2.6.9-89.ELsmp/build SUBDIRS=/root/linux/driver modules  

3.     make[1]: Entering directory `/usr/src/kernels/2.6.9-89.EL-smp-i686'  

4.       CC [M]  /root/linux/driver/hello.o  

5.       Building modules, stage 2.  

6.       MODPOST  

7.       CC      /root/linux/driver/hello.mod.o  

8.       LD [M]  /root/linux/driver/hello.ko  

9.     make[1]: Leaving directory `/usr/src/kernels/2.6.9-89.EL-smp-i686'

這樣hello.ko驅動模塊就產生好了。

 

5insmod加載

1.      [root@localhost driver]# insmod hello.ko

6lsmod查看模塊

lsmod一下就會看到hello模塊的存在了,并且在系統的日志/var/log/messages中會記錄模塊的輸出,也就是

1.     printk(KERN_ALERT "hello module!\n");  

輸出的hello module

1.     <pre name="code" class="plain">[root@localhost driver]#tail -1 /var/log/messages  

2.     Oct 13 11:27:07 localhost kernel: hello module! 

7rmmod helle 卸載hello.ko

 

posted on 2013-10-18 22:18 冰凍熱狗 閱讀(9908) 評論(0)  編輯 收藏 引用 所屬分類: Linux設備驅動開發


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品国产三级国产专播精品人| 亚洲免费中文| 午夜伦欧美伦电影理论片| 亚洲高清久久| 亚洲欧美中文日韩v在线观看| 亚洲经典自拍| 久久人人爽国产| 亚洲一区二区三区在线视频| 欧美11—12娇小xxxx| 久久婷婷久久| 国产欧美日韩视频| 亚洲图片激情小说| 在线亚洲一区二区| 欧美岛国激情| 亚洲国产精品久久久久秋霞不卡| 国产午夜精品理论片a级探花| 99精品国产福利在线观看免费| 在线观看亚洲a| 久久精品国产综合精品| 久久精品国产69国产精品亚洲| 国产精品日韩欧美一区二区三区 | 亚洲人成绝费网站色www| 欧美一级电影久久| 久久国产精品99国产| 国产精品系列在线播放| 在线一区欧美| 欧美亚洲一区二区在线观看| 国产精品海角社区在线观看| 一区二区三区日韩精品视频| 亚洲在线观看免费视频| 欧美视频不卡| 亚洲一区免费网站| 午夜在线观看免费一区| 国产日韩欧美精品| 欧美一区在线直播| 久久人91精品久久久久久不卡 | 国产精品久久777777毛茸茸| 一个色综合av| 午夜精品美女久久久久av福利| 国产精品久久久久久亚洲调教| 亚洲影视在线播放| 欧美一区二区高清在线观看| 国产亚洲一区二区三区| 久久精品论坛| 亚洲高清久久久| 一本色道久久综合精品竹菊| 国产精品毛片va一区二区三区| 亚洲欧美日韩在线| 噜噜噜在线观看免费视频日韩| 亚洲国产欧美一区二区三区丁香婷| 欧美国产三区| 亚洲一级二级| 欧美成人精品在线| 在线亚洲观看| 黄网动漫久久久| 欧美二区在线| 亚洲一级二级在线| 欧美大色视频| 亚洲自拍都市欧美小说| 国内精品久久久久国产盗摄免费观看完整版| 久久久久综合网| 日韩视频永久免费观看| 性色av一区二区三区在线观看| 一区免费观看| 欧美午夜久久| 久久综合狠狠综合久久综合88 | 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲一品av免费观看| 激情久久久久久久久久久久久久久久| 欧美黄色精品| 久久国产精品久久久久久电车 | 欧美电影免费观看网站| 亚洲在线一区| 亚洲国内高清视频| 国产美女精品视频| 欧美二区在线播放| 久久国产精彩视频| 一本色道久久综合一区| 欧美大片在线影院| 久久精品一区中文字幕| 一区二区欧美在线| 在线视频国产日韩| 国产亚洲一区二区三区在线观看 | 欧美激情精品久久久久久黑人| 亚洲欧美国产77777| 亚洲欧洲日夜超级视频| 国产一区二区日韩精品欧美精品| 欧美日韩在线播放三区| 美女精品在线观看| 久久精品免视看| 亚洲综合精品| 在线亚洲成人| 一本大道av伊人久久综合| 欧美国产第一页| 久久手机精品视频| 亚洲欧洲一区二区三区久久| 亚洲国产欧洲综合997久久| 国产老女人精品毛片久久| 欧美电影在线播放| 久久久久91| 欧美中日韩免费视频| 亚洲一级电影| 亚洲视频中文| 宅男精品导航| 这里只有视频精品| 亚洲久久在线| 亚洲大片在线| 欧美成人在线免费观看| 久久精品国产一区二区三| 亚洲欧美视频一区| 亚洲欧美日韩国产综合| 亚洲欧美国产日韩中文字幕| 亚洲女同性videos| 亚洲伊人网站| 性刺激综合网| 久久精品国产免费看久久精品| 欧美中文字幕| 久久久久久久高潮| 久久青草久久| 欧美激情第一页xxx| 欧美激情一级片一区二区| 亚洲国产精品成人精品| 亚洲精品久久久久久久久久久久 | 99精品99久久久久久宅男| 99国产精品自拍| 亚洲男人天堂2024| 久久xxxx| 欧美大片va欧美在线播放| 欧美日韩中文在线| 国产精品午夜春色av| 国产一区二区三区的电影 | 欧美在线不卡视频| 久久久久天天天天| 亚洲高清资源| 日韩网站在线观看| 亚洲欧美日韩成人| 免费观看成人www动漫视频| 欧美日韩岛国| 国产女主播一区二区三区| 在线看视频不卡| 中文av一区特黄| 久久精品国产亚洲精品| 久热综合在线亚洲精品| 亚洲精品一区二区三区福利| 亚洲综合成人婷婷小说| 蜜臀久久99精品久久久画质超高清 | 欧美日韩亚洲一区二区三区在线| 国产精品一区在线观看| 亚洲国产第一| 性欧美暴力猛交另类hd| 欧美激情亚洲| 欧美亚洲三区| 欧美激情精品久久久久久| 国产精品一区二区在线| 亚洲欧洲一区二区天堂久久 | 亚洲神马久久| 久久综合国产精品| 国产精品狼人久久影院观看方式| 亚洲国产精品久久久久秋霞不卡| 亚洲综合精品一区二区| 欧美成人久久| 欧美亚洲综合另类| 欧美丝袜一区二区三区| 亚洲国产天堂久久国产91| 久久精品成人| 亚洲手机在线| 欧美激情一二三区| 亚洲成人在线网站| 欧美在线三级| 亚洲婷婷免费| 欧美日韩国产一区精品一区 | 在线观看欧美视频| 欧美一区二区日韩| 9人人澡人人爽人人精品| 美女国内精品自产拍在线播放| 国产一二三精品| 亚洲淫性视频| 亚洲美女黄网| 欧美精品一区二区高清在线观看| 国外成人免费视频| 性色一区二区三区| 亚洲一级网站| 国产精品福利影院| 亚洲网友自拍| 99re视频这里只有精品| 欧美人与禽性xxxxx杂性| 99国产精品久久| 91久久一区二区| 欧美另类变人与禽xxxxx| 亚洲精品一区中文| 亚洲精品乱码久久久久久黑人 | 亚洲国产综合91精品麻豆| 久久综合伊人77777蜜臀| 久久久国产午夜精品| 激情久久影院| 欧美 日韩 国产一区二区在线视频| 久久精品一区四区| 亚洲国产老妈| 亚洲激情社区| 欧美三区视频|