1、简单的驱动源码
#include <linux/module.h> //module_init() module_exit()
#include <linux/init.h> //__init __exit
//__init是一个宏定义,#define __init xxx,作用是编译时,将__init修饰的
//函数放入.init.text中,内核启动时会统一加载.init.text段,加载后释放
static int __init chrdev_module_init(void)
{
//printk是内核源码中用来打印信息的函数,KERN_DEBUG是打印级别
printk(KERN_DEBUG "chrdev_module_init");
return 0;
}
static void __exit chrdev_module_exit(void)
{
printk(KERN_DEBUG "chrdev_module_exit");
}
module_init(chrdev_module_init);
module_exit(chrdev_module_exit);
//宏定义
MODULE_LICENSE("GPL") //模块的许可证
MODULE_AUTHOR("xy_L") //模块的作者
MODULE_DESCIPTION("chrdev module") //模块的描述
MODULE_ALIAS("module_test") //模块的别名
2、printk打印级别
#define KERN_EMERG "<0>" /* systemis unusable */
#define KERN_ALERT "<1>" /* actionmust be taken immediately */
#define KERN_CRIT "<2>" /*critical conditions */
#define KERN_ERR "<3>" /* errorconditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normalbut significant */
#define KERN_INFO "<6>" /*informational */
#define KERN_DEBUG "<7>" /*debug-level messages */
3、Makefile
# 开发板的linux内核的源码树目录
KERN_DIR = /root/driver/kernel
obj-m += module_test.o
all:
make -C $(KERN_DIR) M=`pwd` modules
.PHONY: clean
clean:
make -C $(KERN_DIR) M=`pwd` modules clean