【原创】Tiny6410驱动模块的构建、加载和卸载


【原创】Tiny6410驱动模块的构建、加载和卸载


准备工作

在构建模块驱动之前首先要编译与Tiny6410中完全对应的内核源码,生成zImage。首次编译内核会比较慢,之后就会比较快,若只是构建模块驱动,编译一次即可。

编译Tiny6410参考连接: 【原创】Ubuntu12.04下交叉编译Linux内核到Tiny6410

在对应内核正确编译完成后,找到模块驱动源码,在我的Ubuntu12.04中,路径pwd为/home/yang/tarpackage/mini6410/linux-2.6.38/drivers/char,其中/home/yang/tarpackage/mini6410/linux-2.6.38/为内核源码位置,此源码是友善之臂提供,已配置好,唯一要做的就是在源码目录下将config_linux_mini6410复制为.config,然后就可以编译内核。当然,也可以在源码目录下通过命令make menuconfig根据自己的需要进行配置。

比如,我要测试源码中的下面几个文件对应的模块驱动,如下图,那么我首先就要运行命令make menuconfig,通过配置界面取消掉对应的模块驱动,然后在源码目录下执行make zImage命令,编译出新的内核,生成的zImage在目录/home/yang/tarpackage/mini6410/linux-2.6.38/arch/arm/boot 下,然后把此zImage复制到用来烧写系统的SD卡中,即覆盖掉卡中原有的zImage,然后重新烧写Tiny6410开发板,完成之后即可。

然后进入目录/home/yang/kernel_drive下,建立为每一个想要构建的驱动模块建一个目录。将/home/yang/tarpackage/mini6410/linux-2.6.38/drivers/char中驱动源码拷贝到对应目录中,我的驱动子目录如下图:



开始构建驱动模块

以hello_module中的驱动为例,有两个文件,一个驱动文件hello_module.c,一个Makefile文件。如下图。源码见附录。

在hello_module目录中,执行make即可,会生成驱动文件,以.ko为后缀,如下图:


正确执行后结果目录中所有文件如下图,其中hello_module.ko即是驱动模块。执行make clean 可清除生成的文件。


然后用一种方法将hello_module.ko拷贝到新烧写系统的开发板中,进入hello_module.ko所在目录。

加载驱动模块

insmod  hello_module.ko  此命令可加载hello_module.ko

modprobe  hello_module  此命令也可加载hello_module.ko,命令中不带后缀.ko,此命令可自动分析模块的依赖关系。

说明:如果是用串口控制操作开饭,加载成功后即可看到输出信息  Hello,geng world。

           如果是用键盘直接操作开发板,在开发板显示屏上看不到输出信息,不过可以通过命令dmesg | tail看到信息Hello,geng world。

另外可以用命令lsmod来查看当前都加载了哪些模块。

卸载驱动模块

rmmod  hello_module 此命令可卸载hello_module.ko,命令中不带后缀.ko

modprobe  -r  hello_module  此命令也可加卸载hello_module.ko,命令中不带后缀.ko

说明:如果是用串口控制操作开饭,卸载成功后即可看到输出信息  Goodbye,geng world。

           如果是用键盘直接操作开发板,在开发板显示屏上看不到输出信息,不过可以通过命令dmesg | tail看到信息Goodbye,geng world。

另外可以用命令lsmod来查看当前还剩下哪些加载的模块。

附录源码

hello_module.c

<span style="font-size:18px;">#include <linux/module.h>
#include <linux/init.h>

static int __init hello_init(void)
{
	printk(KERN_ALERT "Hello, geng world\n");
	return 0;
}

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

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("+++Geng+++"); </span>
Makefile

<span style="font-size:18px;">#此Makefile可做为通用的Makefile文件,使用时只需修改对应的目标文件和KDIR即可


obj-m :=hello_module.o              #目标文件
#module-objs := file1.o file.o      #当模块有多个文件组成时,添加本句

#内核路径,根据实际情况换成自己的内核路径,嵌入式的换成嵌入式,PC机的指定PC机路径
KDIR :=/home/yang/tarpackage/mini6410/linux-2.6.38   
#上面的路径是为6410开发板设置的,要保证make之前内核已经正确编译过
#KDIR :=/usr/src/linux-headers-$(shell uname -r)               
#上面路径为我的ubuntu12.04设置的,ubuntu版本可以通过uname -r查看,同样要在make前先编译对应内核

PWD := $(shell pwd)                 #模块源文件路径

all:
	$(MAKE)  -C  $(KDIR)  SUBDIRS=$(PWD)  modules
	@rm -rf *.mod.*
	@rm -rf .*.cmd
	@rm -rf *.o
	@rm -rf Module.*
clean:
	rm -rf *.ko
	rm -rf *.order</span>

原文链接http://blog.csdn.net/geng823/article/details/37355109

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值