新字符设备驱动框架代码搭建

2023-12-28 17:33:18

一.? 简介

前面一篇文章简单了解了,新字符设备驱动框架涉及的函数。文章地址如下:

新字符设备驱动所涉及的函数-CSDN博客

本文来使用 新字符设备驱动框架来实现字符设备的注册与卸载。

二.? 新的字符设备驱动框架搭建

1.? 创建工程

首先,创建文件夹。这里我的驱动代码都放在 ubuntu系统 /home/wangtian/zhengdian_Linux目录下,进入 /Linux_Drivers 目录下,创建文件夹为? 3_newchrled:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers$ mkdir 3_newchrled

将 2_led工程下的 .vscode及其以下文件,拷贝到 3_newchrled 文件夹下(.vscode及其以下文件中配置了 所调用的 Linux内核源码路径):

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

将 2_led工程下的 Makefile文件拷贝到 该工程下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ cp ../2_led/Makefile ./

更改 Makefile文件中涉及编译目标名 obj-m的所指向的名:

obj-m := newchrled.o

通过 vscode打开 3_newchrled 文件夹。在 3_newchrled文件夹下创建 newchrled.c 文件。

可以参考 2_led实验的代码,在 newchrled.c加入 头文件, 寄存器的物理地址,映射后的虚拟地址指针,以及 led的开关灯宏:

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

//寄存器的物理地址
#define  CCM_CCGR1_BASE          (0X020C406C)
#define  SW_MUX_GPIO1_IO03_BASE  (0X020E0068)
#define  SW_PAD_GPIO1_IO03_BASE  (0X020E02F4)
#define  GPIO1_GDIR_BASE         (0X0209C004)
#define  GPIO1_DR_BASE           (0X0209C000)

//地址映射后寄存器的虚拟地址指针
static void __iomem *  IMX6ULL_CCM_CCGR1;
static void __iomem *  IMX6ULL_SW_MUX_GPIO1_IO03;
static void __iomem *  IMX6ULL_SW_PAD_GPIO01_IO03;
static void __iomem *  IMX6ULL_GDIR;
static void __iomem *  IMX6ULL_DR;

#define  LED_OFF      0 //关闭Led灯
#define  LED_ON       1  //打开Led灯

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