最簡單的嵌入式Linux驅動程式模組

來源:互聯網
上載者:User

注意:開發Arm平台的驅動,需要Arm平台的源碼樹;
注意:ARM平台的linux核心源碼需要先編譯,否則無法編譯驅動;
一、第一種編譯驅動方式,共6步
第1步:建立源碼樹

解壓安裝Linux 核心原始碼在工作目錄/opt/FriendlyARM/mini2440 中執行:
#cd /opt/FriendlyARM/mini2440
#tar xvzf /tmp/linux/linux-2.6.32.2-mini2440-20100106.tar.gz
將建立產生linux-2.6.32.2 目錄,裡麵包含了完整的Linux-2.6.32.2 核心原始碼說明:20100106 是我們的發行更新日期標誌,請以光碟片中實際日期尾綴為準。

第2步:編輯驅動源檔案mini2440_hello_module.c
該檔案所在目錄:/opt/FriendlyARM/mini2440/linux-2.6.32.2/drivers/char/
*********************************************************************************************
#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");
*********************************************************************************************

第3步:編輯設定檔linux-2.6.32.2/drivers/char/Kconfig

增加如下欄位,:

儲存退出,這時在linux-2.6.32.2目錄“/opt/FriendlyARM/mini2440/linux-2.6.32.2"位置運行一下
#cp config_mini2440_t35 .config     ;t35後面有個空格,然後有個“.”開頭的config
#make menuconfig
就可以在Device Drivers---> Character devices 菜單中看到剛才所添加的選項了,按下空格鍵將會選擇為<M>,此意為要把該選項編譯為模組方式;再按下空格會變為<*>,意為要把該選項編譯到核心中,在此我們選擇<M>,

第4步:編輯linux-2.6.32.2/drivers/char/Makefile
通過上一步,我們雖然可以在配置核心的時候進行選擇,但實際上此時執行編譯核心還是不能把mini2440_hello_module.c 編譯進去的,還需要在Makefile 中把核心配置選項和真正的原始碼聯絡起來,開啟 linux-2.6.32.2/drivers/char/Makefile,添加並儲存退出:

第5步:編譯驅動模組
這時回到linux-2.6.32.2 原始碼根目錄位置/opt/FriendlyARM/mini2440/linux-2.6.32.2
#make modules
就可以產生我們所需要的核心模組檔案mini2440_hello_module.ko 了,

至此,我們已經完成了模組驅動的編譯。

第6步:載入驅動模組
將把編譯出的mini2440_hello_module.ko下載到板子中,並把它移動到/lib/modules/2.6.29.4-FriendlyARM目錄,然後在板子中現在執行
#modprobe mini2440_hello_module
可以看到該模組已經被裝載了(注意:使用modprobe 命令載入模組不需要加“ko”尾綴),再執行以下命令,可以看到該模組被卸載
#rmmod mini2440_hello_module
注意:要能夠正常卸載模組,必須把模組放入開發板的/lib/modules/2.6.29.4-FriendlyARM 目錄
注意:核心有時會升級更新,如果核心版本已經改變,請依照具體的核心版本重建立立一個模組存放目錄,在此為/lib/modules/2.6.29.4-FriendlyARM。

二、第二種編譯驅動方式

核驅動模組的結構hello.c


#include <linux/init.h>
#include <linux/module.h> 

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, World!\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

 

MODULE_LICENSE("Dual BSD/GPL");


源檔案hello.c同目錄下一個簡單的Makefile檔案:

KERNELDIR = /opt/FriendlyARM/mini2440/linux-2.6.32.2

PWD := $(shell
pwd)

INSTALLDIR =
/lib/modules/2.6.29.4-FriendlyARM

CROSS_COMPILE    =
arm-linux-

CC    = $(CROSS_COMPILE)gcc

obj-m := hello.o

.PHONY: modules modules_install clean

modules:

$(MAKE) -C
$(KERNELDIR) M=$(PWD) modules

modules_install:

cp hello.ko $(INSTALLDIR)

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.