嵌入式Linux字符设备驱动开发流程——以LED为例
1.设备模块加载及卸载
2.静态申请设备号
3.动态申请设备号
4.注册字符类设备
5.生成字符设备节点
6.完善字符类设备驱动
7.根据完善后的模板编写相关设备驱动
前言
留空
头文件
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
入口函数及出口函数
static __init int leds_init(void)
{
int ret = 0;
printk("leds chrdev init is ok %d\n", ret);
return ret;
}
static __exit void leds_exit(void)
{
printk( "leds chrdev exit is ok\n");
}
加载及释放
module_init(leds_init);
module_exit(leds_exit);
模块许可证声明
MODULE_LICENSE("GPL");
程序模板
#include <linux/module.h> //模块头文件
#include <linux/kernel.h> //内核头文件
#include <linux/init.h> //内核初始化
static __init int leds_init(void)
{
int ret = 0;
printk("leds chrdev init is ok %d\n", ret);
return ret;
}
static __exit void leds_exit(void)
{
printk( "leds chrdev exit is ok\n");
}
module_init(leds_init);
module_exit(leds_exit);
MODULE_LICENSE("GPL");
编写Makefile
obj-m += leds.o
KERN_DIR := /home/cheng/iTOP4412/iTop4412_Kernel_3.0
PWD ?= $(shell pwd)
all:
make -C $(KERN_DIR) M=$(PWD) modules
clean:
make -C $(KERN_DIR) M=$(PWD) modules clean
rm -rf modules.order
编译
make
加载编译后的模块
insmod leds.ko
查看模块已加载的模块
lsmod
卸载模块
rmmod hello
若卸载报如下错误
rmmod: can't change directory to '/lib/modules': No such file or directory
需要在lib目录新建一个./modules/3.0.15文件夹,再次卸载即可
mkdir /lib/modules/3.0.15
或在系统启动脚本/etc/rcS中添加
mkdir -p /lib/modules/$(uname -r)
结束语
以上则为嵌入式Linux设备模块的加载及卸载内容。
如果文章对您有帮助,欢迎移至上方按钮打赏博主;