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

增加如下字段,如图所示:

2384e0f0691b5d6b06c61d63d1cf5fd4.png

保存退出,这时在

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 菜单中看到刚才所添加的选项了,按下空格键将会选择为,此意为要把该选项编译为模块方式;再按下空格会变为,意为要把该选项编译到内核中,在此我们选择,如图:

afe571d2fc73eba583222c1468856b5e.png 第4步:编辑linux-2.6.32.2/drivers/char/Makefile 通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini2440_hello_module.c 编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开 linux-2.6.32.2/drivers/char/Makefile,如图添加并保存退出:

6759f05d7b5de2923c9005a7ae066f46.png

第5步:编译驱动模块

这时回到linux-2.6.32.2 源代码根目录位置

/opt/FriendlyARM/mini2440/linux-2.6.32.2

#make modules

就可以生成我们所需要的内核模块文件mini2440_hello_module.ko 了,如图:

62ce0fb77292542d11522a244bfc600c.png

至此,我们已经完成了模块驱动的编译。

第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值