您好,登錄后才能下訂單哦!
Linux 嵌入式驅動開發hello world的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1、代碼編寫,只有一個文件,內容如下
文件名為:mini2440_hello_module.c
#include <linux/kernel.h> #include <linux/module.h> static int __init mini2440_hello_module_init(void) { printk("Hello, Mini2440 module is installed !\n"); return 0; } static void __exit mini2440_hello_module_cleanup(void) { printk("Good-bye, Mini2440 module was removed!\n"); } module_init(mini2440_hello_module_init); module_exit(mini2440_hello_module_cleanup); MODULE_LICENSE("GPL");
注解:
A、兩個頭文件是必須的,不要問為什么
B、mini2440_hello_module_init() 驅動加載函數,也是必須的
C、mini2440_hello_module_cleanup()驅動卸載函數,也是必須的
D、module_init(mini2440_hello_module_init) 你想讓你的驅動運行起來,就必須有這個
E、module_exit(mini2440_hello_module_cleanup) 和 module_init 的意義剛好相反
B、MODULE_LICENSE("GPL"); 用于聲明模塊的許可證
2、驅動安裝
驅動程序的安裝有兩種方式,第一種是模塊方式,第二種是直接編譯進內核
這里我就講講如何修改相應的配置文件,增加內核的配置菜單選項吧。這里涉及到兩個文件一個是makefile和kconfig,makefile的作用就是編譯,具體的來說就是寫好一個程序你就必須寫好它的makefile文件。kconfig的作用就是使得寫好的驅動能增加到圖形配置菜單中,簡單來說,就是你想在內核配置菜單中看到你的內核選項,你就必須修改kconfig文件。
,下面我們就來講講如何修改makefile文件以及kconfig文件吧。假如我們寫好了一個驅動程序,然后呢放在了drivers/char目錄下,而且文件名為mini2440_hello_module.c。首先,我們先修改同目錄下的makefile文件吧,如何修改呢?很多時候一打開一看怎么密密麻麻的呢,其實沒關系的,你沒看到嗎?大部分的格式其實是一摸一樣的,這就簡單了,我們也依葫蘆畫瓢吧,我們加這一句: obj-$(CONFIG_MINI2440_HELLO) += mini2440_hello_module.o
對于這個語句是什么意思,我也不想在這里說的太詳細了,最右邊那個是我們的驅動文件的文件名,至于右邊那個CONFIG是必須的,而那個MINI2440_HELLO呢,是我們等一下在Kconfig文件中要用到的。接著我們修改同目錄下的Kconfig文件,找到menu“Character devices”在這下面開始添加吧,添加的內容如下:
config MINI2440_HELLO tristate "MINI2440 BOARD HELLO TEST" depends on ARCH_S3C2440 default m if ARCH_S3C2440 help MINI2440 Board First module test.
在這里我也簡單講解一下上面這幾條語句吧,最上面的config是必須的,這是它的格式這樣說吧。下面一句呢,是它在內核配置單上顯示的文字了,下面的那句是它的依賴,也就是說只有ARCH_S3C2440配置好了,我們才能配置這一驅動。最后的是它的幫助信息,以后你按照它的格式照著寫就好了。懂了吧!
接著就是照著之前講的如何編譯內核編譯一下內核了。輸入:make menuconfig,將剛剛的模塊選擇為M吧,然后編譯內核,把內核鏡像燒進開發板。最后使用命令make SUBDIR=drivers/char/
modules再編譯。得到mini2440_hello_module.ko這個就是我們要的驅動模塊了,我們把它加到開發板,加載的方式有很多種,我一般是用串口加進開發板的。在開發板的lib目錄下輸入rz即可下載了。
ok,假如你已經成功下載驅動模塊到開發板了,這時候你需要做的是加載驅動模塊了,為了形象生動點,我就截圖了吧:
注意:在執行make menuconfig,圖形化界面中
Device Drivers -->....Character devices -->
下可能不會出現
MINI2440 BOARD HELLO TEST
選項,
需要進行以下動作,則會出現此選項
#make menuconfig命令進入內核配置界面,進入到“System Type”選項配置菜單,將S3C2440 Machines選項下做如下選擇:只選擇SMDK2440和SMDK2440 withS3C2440 CPU module兩個選項。
Linux操作系統中模塊操作相關命令解釋
lsmod 查看已經安裝好的模塊, 也可以查看/proc/modules文件的內容. 實際上,lsmod讀命令就是通過查看/proc/modules的內容來顯示模塊信息的.
modinfo 顯示模塊信息
modprobe 不需要指定路徑,它會到默認路徑下尋找模塊。模塊也存在依賴性問題: 比如你要加載msdos.ko, 需要先加載fat.ko. modprobe查看/lib/module/version/modules.dep得知模塊的依賴關系
rmmod 卸載模塊,但是內核會認為卸載模塊不安全,可以添加命令強制卸載。
depmod 檢查系統中模塊之間的依賴關系,并把依賴關系信息存于/lib/modules/2.6.18-1.2798/modules.dep中。 一般加載模塊后,要命令行下先執行 depmod -a后,在系統加載模塊時候會查看modules.dep中模塊依賴及路徑信息,這樣子才可以成功加載需要模塊。
insmod 加載模塊,需要指定完整的路徑和模塊名字。
注:本人遇到的問題
模塊需要上傳到:
/lib/modules/2.6.32.2
下,rmmod命令才會起作用,【2.6.32.2】為linux kernel版本號
如圖
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。