《linux設備驅動詳解》學習筆記(一)---開始寫驅動程序

 1、Hello World驅動程序

疑惑:在加載進內核時,肯定會調用hello_init()函數的,可printk()函數並沒有終端輸出my first driver字符串,而且在卸載模塊的時候,也沒有輸出Goodbye,my driver字符串

解答:這是因爲優先級問題,程序並不是沒輸出,只是不輸出在終端上,而是輸出在系統日誌上,如果用dmesg命令查看就可以看出了。

 

2、簡單字符驅動程序

疑惑:從寫代碼到測試代碼的步驟流程是咋樣的?

解答:
第一步:編寫驅動程序源代碼
第二步:編寫makefile文件,用來將驅動程序源代碼編譯爲.ko模塊文件
第三步:用insmod命令加在模塊
第四步:用mknod命令創建設備文件
第五步:編寫簡單的C文件測試驅動程序

 

疑惑:編譯過程中,出現錯誤:implicit declaration of function 'kmolloc'或'implicit declaration of function 'kfree'

解答:將mm.h頭文件改爲slab.h頭文件

 

疑惑:加載模塊時,出現錯誤:Device or resource busy

解答:說明你驅動程序使用了靜態分配設備號,並且該設備號已經被使用,可以用命令cat /proc/devices查看已使用的設備詳情,然後選擇一個沒被使用的設備號來分配,或改爲動態分配

 

疑惑:在/proc/devices已經看到了自己的設備驅動了,可在/dev目錄下卻看不到自己的設備驅動

解答:使用mknod命令在/dev目錄下將爲自己的設備驅動創建驅動設備文件

 

疑惑:運行檢測程序時,出現錯誤:Permission denied

解答:說明你的驅動設備文件權限太苛刻,用chmod你的驅動設備文件的權限改爲crwxrwxrwx,那就絕對可以了

 

疑惑:如何瞭解自己寫的驅動的各種屬性以及相關記錄

解答:

1、/proc/devices:此文件中記錄着當前的所有模塊,可以看出主設備號,設備名字以及設備種類(lsmod命令可查看)
2、/dev:此文件夾中存放着當前所有設備的設備文件,對設備的各種操作即對該目錄下的各個設備文件操作
3、/var/log/messages:此文件記錄着進程日誌,可通過查看它來對驅動程序進行調試(dmesg命令可查看)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章