08_驱动编写(ko文件生成与使用)
1、驱动源码
#include <linux/module.h>
#include <linux/init.h>static int __init test_init(void)
{printk("wo shi dalao\n");return 0; //返回0表示成功, 返回负数退出加载模块, 如返1,2,3等正数,会有警告但还是会加载
}
//__init 把test_init的函数代码放入统一的初始化段里,当内核把驱动初始化完后, 释放此函数的代码指令空间static void __exit test_exit(void)
{printk("sb baibai\n");
}
//__exit 指定此函数只在驱动卸载时使用, 用完后释放module_init(test_init); //指定test_init为模块初始化函数
module_exit(test_exit); //指定test_exit为模块退出时执行的卸载函数MODULE_LICENSE("GPL"); //指定所支持的协议
MODULE_AUTHOR("lk");
MODULE_DESCRIPTION("描述");
MODULE_VERSION("000");
2、makefile编写
obj-m += lk_test.oKDIR := /home/obt/workspace/kernel #这里是你kernel的源码路径(kernel必须要与你板子的一样)
export ARCH := arm
export CROSS_COMPILE := arm-linux-gnueabihf- #交叉编译工具链(记得安装或者指定绝对路径)all:make -C $(KDIR) modules M=`pwd` .PHONY : clean
clean:make -C $(KDIR) modules clean M=`pwd`
3、加载与卸载ko模块