LED灯驱动模块加载与卸载代码框架

2023-12-24 00:04:10

一.? 简介

本文来编写 LED灯驱动模块加载与卸载的代码。

二.?LED灯驱动模块加载与卸载代码框架

1.? 创建工程

我的驱动代码存放目录: ubuntu系统 /home/wangtian/zhengdian_Linux/Linux_Drivers 目录下。

进入 /home/wangtian/zhengdian_Linux/Linux_Drivers 目录,创建 2_led文件夹:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers$ mkdir 1_led

进入 2_led目录下,创建 led.c 文件,此文件就是 led 的驱动文件:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ touch led.c

2.? 编写LED驱动框架代码

(1)拷贝 .vscode及其以下文件

注意:.vscode及其以下文件中设置了(NXP官方提供的) Linux内核源码路径。因为驱动可能会调用到 Linux内核中的函数!!!

将前面字符设备驱动实验 1_chrdevbase工程代码中? .vscode 及其以下文件,拷贝到该工程下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ cp -rf ../1_chrdevbase/.vscode/ ./

拷贝完成后,可以在工程下看到如下文件:

(2)编写 LED驱动模块的加载 / 卸载框架

Led 驱动代码需要添加的头文件,可以参考 字符设备驱动实验 1_chrdevbase工程代码。

LED灯驱动模块加载/卸载代码如下(led.c文件中):

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>

//Led驱动模块入口函数
static int __init led_init(void)
{
    printk("led_init!\r\n");
    return 0;
}

//Led驱动模块出口函数
static void __exit led_exit(void)
{
    
    printk("led_exit!\r\n");
}

module_init(led_init); //入口
module_exit(led_exit); //出口

MODULE_LICENSE("GPL"); //模块 licence
MODULE_AUTHOR("lingxuewu"); //模块作者

(3)如何确定 .vscode及其以下文件成功设置好了 指向 Linux内核源码(NXP官方提供的)?

vscode已经打开了 2_led工程,鼠标放在 某个函数名上,同时按下 "Ctrl" 键,确定是否可以跳转到? 函数的定义处,即 我指定的Linux内核源码处(NXP官方提供的)。

如果可以跳转到 我指定的 Linux内核源码处,则说明 .vscode 下所设置的 Linux内核源码路径是有效的,否则,就需要检查所设置的是否正确。

文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135175187
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。