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