Linux设备驱动(1)模块的相关概念
2016-05-08 09:33
423 查看
最简单的内核模块
#include<linux/init.h> #include<linux/module.h> static int __init hello_init(void) //内核初始化函数 { printk("hello world!\n"); //打印函数,和prinft类似 return 0; } static void __exit hello_exit(void)//内核清除函数 { printk("good bye!\n"); } module_init(hello_init); //指定初始化函数 module_exit(hello_exit); //指定清除函数 MODULE_LICENSE("GPL"); //指定代码使用的许可证 MODULE_AUTHOR("laowu"); //指定作者 MODULE_VERSION("1.0"); //指定代码修订号
内核模块的makefile
obj-m := hello.o KDIR:=~/linux-2.6 make -C $(KDIR) M=`pwd` modules
obj-m := hello.o说明有一个内核模块需要从hello.o构造,生成的模块名称是hello.ko.
如果hello.ko是由两个源文件生成,例如file1.c file2.c,则应该如下编写
obj-m := hello.ko
hello-objs := file1.o file2.0
make -C $(KDIR) M=
pwdmodules
首先改变目录到-C指定的位置(即内核源代码目录),其中保存有内核的顶层makefile文件, M=选项,让该makefile在构造modules目标之前返回到模块源代码目录
内核的插入
insmod hello.ko内核参数
module_param函数使用方法:module_param(name, type, perm)
name:内核参数的名称,自己定义;
type:内核参数的类型,常见的类型byte、short、int、long、ulong、bool 、charp(字符指针);
perm:内核参数的权限S_IRUGO(对模块参数具有读权限)。其实权限和文件的 权限差不多
内核加载模块时传递参数的方法:
使用命令:insmod xxx.ko a=1
模块加载后,并且他的权限不为0,就可在/sys/module/xxx/parameter目录下 找到对应的模块参数。
导出符号表
使用EXPORT_SYMBOL将函数导出,供其他模块使用;在”/proc/kallsyms”文件中对应这符号表,它记录了函数的符号和函数在内存所在的地址。相关文章推荐
- 设置每CPU环境
- Linux应用环境实战02:打造属于自己的Vim
- 第四章:用户和组管理
- Linux下常用的C/C++开源Socket库
- linux下C++开发工具
- Linux C++学习之路
- Linux多线程编程
- Linux进程编程基础介绍
- Linux基础介绍
- 每天一个Linux命令(10)cp命令
- page_address_init 函数
- tick_init 函数
- linux下 lvm 磁盘扩容
- linux------虚拟机的桥接模式和NAT模式的区别
- Linux TroubleShooting
- Linux的常用操作命令
- Linux 下的复制cp命令
- linux下如何用GDB调试c++程序
- mvware虚拟机安装ubuntu
- 开源新闻速递:Linux 内核 4.6 即将发布