Lazy loaded image
驱动编程 - GPIO
Words 772Read Time 2 min
2024-9-4

一、 介绍

1.1 常用概念

 

1.2 是什么

 

1.3 怎么编写驱动程序?

  • 确定主设备号,也可以让内核分配
  • 定义自己的 file_operations 结构体
  • 实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构体
  • 把 file_operations 结构体告诉内核:register_chrdev
  • 谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数
  • 有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev
  • 其他完善:提供设备信息,自动创建设备节点:class_create,device_create
 
 
 
include/linux/fs.h
struct file{
 
}
 
int open(const char *pathname, int flags, mode_t mode); 打开句柄,在内核里面都有一个“struct file”与之对应

二、常用功能API

2.1 设置引脚状态

void eio_pin_set_status(eio_pin_t * const me, bool status)
调用HAL库,设置 GPIO 状态
参数
描述
me
this 指针,指定不同实例化对象
status
状态
支持的引脚状态如下:
 
 
 
GPIO 操作方法
 
 

函数 ioremap 使用方法

ioremap 是 Linux 内核中用于将物理内存地址映射到内核虚拟地址空间的函数。它主要用于以下场景:
  1. 设备驱动程序中访问硬件寄存器
  1. 访问非标准内存区域,如设备内存或特殊用途的内存
  1. 在内核空间中创建临时映射
  1. 使用 ioremap 可以让内核代码以一种统一和安全的方式访问物理内存,而不需要直接操作物理地址。这有助于提高代码的可移植性和安全性。
在使用完映射的内存后,应该使用 iounmap 函数来释放映射。这是良好的编程实践,可以防止内存泄漏。
ioremap 是 Linux 内核中用于将物理内存地址映射到内核虚拟地址空间的函数。以下是 ioremap 的基本使用方法:
参数说明:
  • phys_addr:要映射的物理地址
  • size:要映射的内存大小
返回值:映射后的虚拟地址指针
使用步骤:
  1. 调用 ioremap 函数,将物理地址映射到虚拟地址
  1. 使用返回的虚拟地址指针访问内存
  1. 完成操作后,使用 iounmap 函数释放映射
示例:
注意:使用 ioremap 时要确保只映射必要的内存区域,并在不再需要时promptly释放映射,以避免内存泄漏。
 
上一篇
模板设计模式:让你的代码结构更清晰
下一篇
Guide to Linux System

Comments
Loading...