嵌入式技术分享

Embedded Technology Sharing

嵌入式Linux字符设备驱动——1设备模块加载及卸载

《嵌入式Linux字符设备驱动——1设备模块加载及卸载》

嵌入式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设备模块的加载及卸载内容。

如果文章对您有帮助,欢迎移至上方按钮打赏博主;

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注