【原创】Tiny6410驱动模块的构建、加载和卸载
来源:互联网 发布:矩阵的秩的所有性质 编辑:程序博客网 时间:2024/05/16 09:47
【原创】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 *.korm -rf *.order</span>
原文链接:http://blog.csdn.net/geng823/article/details/37355109
- 【原创】Tiny6410驱动模块的构建、加载和卸载
- tiny6410 驱动模块开机自动加载
- Tiny6410模块不能卸载
- 模块加载和卸载
- 内核模块的加载和卸载
- .ko模块的加载和卸载
- Linux块设备驱动的模块加载与卸载
- linux模块加载和模块卸载时出现的问题
- Linux 设备驱动练习---模块 加载卸载
- 模块加载和卸载函数
- RT3070驱动加载和卸载
- 动态加载驱动和卸载驱动
- 驱动模块的加载
- Linux内核模块的编译、加载和卸载
- Linux内核模块的“加载”和“卸载”函数
- 【原创】Linux驱动入门之以模块方式加载驱动
- 在linux中添加一个模块驱动,并手动加载和卸载
- linux驱动模块的动态加载和静态加载
- Matlab回归说明
- 深入Java集合学习系列:ArrayList的实现原理
- coj 1433 Defend the Bases
- 链表应用——按字母顺序存储并输出某目录下的子文件或子目录名
- java 删除重复文件
- 【原创】Tiny6410驱动模块的构建、加载和卸载
- SystemTimeToFileTime、FileTimeToLocalFileTime、LocalFileTimeToFileTime三函数的跨平台实现
- 整形与字符型之间的相互转换
- Hive权限之审计
- Linux下安装C++开发环境(G++/Eclipse)
- Modelsim仿真查看内部信号
- Linked List part2 : List class
- Mplayer的使用方法
- [leetcode] Max Points on a Line