mini2440:最简单的嵌入式linux驱动程序模块,mini2440:最简单的嵌入式Linux驱动程序模块 解决找不到mini2440……sample...
原文:http://myswirl.blog.163.com/blog/static/5131864220109143331356/
注意:開發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
#include
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 菜單中看到剛才所添加的選項了,按下空格鍵將會選擇為,此意為要把該選項編譯為模塊方式;再按下空格會變為,意為要把該選項編譯到內核中,在此我們選擇,如圖:
第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#includestaticinthello_init(void){printk(KERN_ALERT"Hello, World!\n");return0;}staticvoidhello_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
總結
以上是生活随笔為你收集整理的mini2440:最简单的嵌入式linux驱动程序模块,mini2440:最简单的嵌入式Linux驱动程序模块 解决找不到mini2440……sample...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux怎么看是否安装kde桌面,ub
- 下一篇: 飞信linux下载文件,OpenFeti