最简单Linux驱动模块
Linux 头文件位置
- 在原码目录下的include/linux/module.h
- 所有的代码必须遵循GPL协议
- 添加GPL遵循协议
#defind MODULE_LICENSE(_license) #defind MODULE_AUTHOR(_author)
- #include <linux/init.h>
- 入口函数:module_init(x)
- 出口函数:module_exit(x)
无配置文件
最小驱动
- 头文件
- 申明模块信息
- 模块驱动入口,出口
- 功能区
源码:mini_linux.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("xubaipei")
module_init(hello_init);
module_exit(hello_exit);
static int hello_init(void)
{
printk(KERN_EMERG "HELLO_WORD init enter~\n");
return 0;
}
static int hello_exit(void)
{
// 紧急权限打印,超级终端中查看
printk(KERN_EMERG "HELLO_WORD exit enter~\n");
return 0;
}
源码:makefile
#! bin/bash
//目标文件
obj-m +=mini_linux_module.o
#源码目录
KDIR := /home/xubaipei/android4.0_iTop4412_Kernel_3.0
#当前目录变量
PWD ?= $(shell_pwd)
all:
make -C $(KDIR) M= $(PWD) modules
clean:
rm -rf *.o
实验运行环境 (最小lInux 系统)
加载模块,查看模块,卸载模块
- insmod 加载模块
- lsmod 查看模块命令
- rmmod 卸载模块命令
操作
1.开发板运行最小linux 系统,将KO 温江拷贝到最小linux 系统
2.挂载u 盘
mount /dev/sda1 /mnt/udisk/
3.insmod lsmod rmmod
insmod /mnt/udisk/mini_linux_module.ko
#cat /proc/modules
lsmod
rmmod mini_linux_module