溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux 嵌入式驅(qū)動(dòng)開發(fā)hello world的示例分析

發(fā)布時(shí)間:2021-10-22 10:30:50 來源:億速云 閱讀:158 作者:柒染 欄目:互聯(lián)網(wǎng)科技

Linux 嵌入式驅(qū)動(dòng)開發(fā)hello world的示例分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

1、代碼編寫,只有一個(gè)文件,內(nèi)容如下

文件名為: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、兩個(gè)頭文件是必須的,不要問為什么

B、mini2440_hello_module_init() 驅(qū)動(dòng)加載函數(shù),也是必須的

C、mini2440_hello_module_cleanup()驅(qū)動(dòng)卸載函數(shù),也是必須的

D、module_init(mini2440_hello_module_init) 你想讓你的驅(qū)動(dòng)運(yùn)行起來,就必須有這個(gè)

E、module_exit(mini2440_hello_module_cleanup) 和 module_init 的意義剛好相反

B、MODULE_LICENSE("GPL"); 用于聲明模塊的許可證

2、驅(qū)動(dòng)安裝

驅(qū)動(dòng)程序的安裝有兩種方式,第一種是模塊方式,第二種是直接編譯進(jìn)內(nèi)核

       這里我就講講如何修改相應(yīng)的配置文件,增加內(nèi)核的配置菜單選項(xiàng)吧。這里涉及到兩個(gè)文件一個(gè)是makefile和kconfig,makefile的作用就是編譯,具體的來說就是寫好一個(gè)程序你就必須寫好它的makefile文件。kconfig的作用就是使得寫好的驅(qū)動(dòng)能增加到圖形配置菜單中,簡(jiǎn)單來說,就是你想在內(nèi)核配置菜單中看到你的內(nèi)核選項(xiàng),你就必須修改kconfig文件。

      ,下面我們就來講講如何修改makefile文件以及kconfig文件吧。假如我們寫好了一個(gè)驅(qū)動(dòng)程序,然后呢放在了drivers/char目錄下,而且文件名為mini2440_hello_module.c。首先,我們先修改同目錄下的makefile文件吧,如何修改呢?很多時(shí)候一打開一看怎么密密麻麻的呢,其實(shí)沒關(guān)系的,你沒看到嗎?大部分的格式其實(shí)是一摸一樣的,這就簡(jiǎn)單了,我們也依葫蘆畫瓢吧,我們加這一句: obj-$(CONFIG_MINI2440_HELLO)  += mini2440_hello_module.o

對(duì)于這個(gè)語句是什么意思,我也不想在這里說的太詳細(xì)了,最右邊那個(gè)是我們的驅(qū)動(dòng)文件的文件名,至于右邊那個(gè)CONFIG是必須的,而那個(gè)MINI2440_HELLO呢,是我們等一下在Kconfig文件中要用到的。接著我們修改同目錄下的Kconfig文件,找到menu“Character devices”在這下面開始添加吧,添加的內(nèi)容如下:

config MINI2440_HELLO
	tristate "MINI2440 BOARD HELLO TEST"
	depends on ARCH_S3C2440
	default m if ARCH_S3C2440
	help
	  MINI2440 Board First module test.

在這里我也簡(jiǎn)單講解一下上面這幾條語句吧,最上面的config是必須的,這是它的格式這樣說吧。下面一句呢,是它在內(nèi)核配置單上顯示的文字了,下面的那句是它的依賴,也就是說只有ARCH_S3C2440配置好了,我們才能配置這一驅(qū)動(dòng)。最后的是它的幫助信息,以后你按照它的格式照著寫就好了。懂了吧! 

     接著就是照著之前講的如何編譯內(nèi)核編譯一下內(nèi)核了。輸入:make menuconfig,將剛剛的模塊選擇為M吧,然后編譯內(nèi)核,把內(nèi)核鏡像燒進(jìn)開發(fā)板。最后使用命令make SUBDIR=drivers/char/

modules再編譯。得到mini2440_hello_module.ko這個(gè)就是我們要的驅(qū)動(dòng)模塊了,我們把它加到開發(fā)板,加載的方式有很多種,我一般是用串口加進(jìn)開發(fā)板的。在開發(fā)板的lib目錄下輸入rz即可下載了。  

  ok,假如你已經(jīng)成功下載驅(qū)動(dòng)模塊到開發(fā)板了,這時(shí)候你需要做的是加載驅(qū)動(dòng)模塊了,為了形象生動(dòng)點(diǎn),我就截圖了吧:

注意:在執(zhí)行make menuconfig,圖形化界面中

Device Drivers -->....Character devices -->

下可能不會(huì)出現(xiàn)

MINI2440 BOARD HELLO TEST

選項(xiàng),

需要進(jìn)行以下動(dòng)作,則會(huì)出現(xiàn)此選項(xiàng)

 #make menuconfig命令進(jìn)入內(nèi)核配置界面,進(jìn)入到“System Type”選項(xiàng)配置菜單,將S3C2440 Machines選項(xiàng)下做如下選擇:只選擇SMDK2440和SMDK2440 withS3C2440 CPU module兩個(gè)選項(xiàng)。

Linux 嵌入式驅(qū)動(dòng)開發(fā)hello world的示例分析

Linux操作系統(tǒng)中模塊操作相關(guān)命令解釋
lsmod  查看已經(jīng)安裝好的模塊, 也可以查看/proc/modules文件的內(nèi)容. 實(shí)際上,lsmod讀命令就是通過查看/proc/modules的內(nèi)容來顯示模塊信息的.
modinfo 顯示模塊信息
modprobe  不需要指定路徑,它會(huì)到默認(rèn)路徑下尋找模塊。模塊也存在依賴性問題: 比如你要加載msdos.ko, 需要先加載fat.ko. modprobe查看/lib/module/version/modules.dep得知模塊的依賴關(guān)系
rmmod 卸載模塊,但是內(nèi)核會(huì)認(rèn)為卸載模塊不安全,可以添加命令強(qiáng)制卸載。
depmod 檢查系統(tǒng)中模塊之間的依賴關(guān)系,并把依賴關(guān)系信息存于/lib/modules/2.6.18-1.2798/modules.dep中。 一般加載模塊后,要命令行下先執(zhí)行 depmod -a后,在系統(tǒng)加載模塊時(shí)候會(huì)查看modules.dep中模塊依賴及路徑信息,這樣子才可以成功加載需要模塊。
insmod 加載模塊,需要指定完整的路徑和模塊名字。

注:本人遇到的問題

模塊需要上傳到:

/lib/modules/2.6.32.2

下,rmmod命令才會(huì)起作用,【2.6.32.2】為linux kernel版本號(hào)

如圖

Linux 嵌入式驅(qū)動(dòng)開發(fā)hello world的示例分析

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI