Linux 嵌入式驅動開發:hello world

一、代碼編寫,只有一個文件,內容以下java

文件名爲:mini2440_hello_module.clinux

#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() 驅動加載函數,也是必須的spa

C、mini2440_hello_module_cleanup()驅動卸載函數,也是必須的操作系統

D、module_init(mini2440_hello_module_init) 你想讓你的驅動運行起來,就必須有這個命令行

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

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

二、驅動安裝
rem

驅動程序的安裝有兩種方式,第一種是模塊方式,第二種是直接編譯進內核

       這裏我就講講如何修改相應的配置文件,增長內核的配置菜單選項吧。這裏涉及到兩個文件一個是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版本號

如圖