提示:驱动地址传参实验,方便理解传参
驱动-地址传参实验
前言
前面已经了解过驱动传参实验,这里进一步了解驱动地址传参。
参考资料
驱动传参和地址传参简单对比
这里我先把驱动传参和地址传参简单对比写在这里,方便先了解,后面再分析、思考。
| 特性 | 驱动传参 (Driver Parameter Passing) | 地址传参 (Address Passing) |
|---|---|---|
| 传递内容 | 传递驱动程序需要的配置参数或控制信息 | 传递内存地址(指针) |
| 安全性 | 相对较高,参数经过验证 | 风险较高,需谨慎处理指针有效性 |
| 使用场景 | 驱动初始化、配置变更 | 大数据传输、共享内存 |
| 典型实现 | IOCTL、sysfs、模块参数 | 指针传递、DMA缓冲区传递 |
| 数据大小 | 通常较小(简单数据类型或小结构体) | 可处理大数据块 |
实验
在驱动传参里面我们已经写了相关实验程序,其实地址传参和驱动传参基本一致,只是传参类型不一样而已,这里以结构体参数为例。
控制程序 ioctltest.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
#define CMD_TEST0 _IOW('L', 0, int)
struct args // 定义要传递的结构体
{
int a;
int b;
int c;
};
int main(int argc, char *argv[])
{
int fd; // 定义int类型的文件描述符fd
struct args test;
test.a = 100;
test.b = 200;
test.c = 300;
fd = open("/dev/test", O_RDWR, 0777); // 打开test设备节点
if (fd < 0)
{
printf("file open fail\n");
}
ioctl(fd, CMD_TEST0, &test); // 使用ioctl 函数传递结构体变量test地址
close(fd);
}
代码解读
这里我们打开驱动后, ioctl 控制的是

最低0.47元/天 解锁文章
201

被折叠的 条评论
为什么被折叠?



