本文来编写 LED灯驱动模块加载与卸载的代码。
我的驱动代码存放目录: 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
注意:.vscode及其以下文件中设置了(NXP官方提供的) Linux内核源码路径。因为驱动可能会调用到 Linux内核中的函数!!!
将前面字符设备驱动实验 1_chrdevbase工程代码中? .vscode 及其以下文件,拷贝到该工程下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ cp -rf ../1_chrdevbase/.vscode/ ./
拷贝完成后,可以在工程下看到如下文件:
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"); //模块作者
vscode已经打开了 2_led工程,鼠标放在 某个函数名上,同时按下 "Ctrl" 键,确定是否可以跳转到? 函数的定义处,即 我指定的Linux内核源码处(NXP官方提供的)。
如果可以跳转到 我指定的 Linux内核源码处,则说明 .vscode 下所设置的 Linux内核源码路径是有效的,否则,就需要检查所设置的是否正确。