驱动-地址传参实验-ioctl

提示:驱动地址传参实验,方便理解传参


前言

前面已经了解过驱动传参实验,这里进一步了解驱动地址传参。

参考资料

驱动-传参实验-ioctl

驱动传参和地址传参简单对比

这里我先把驱动传参和地址传参简单对比写在这里,方便先了解,后面再分析、思考。

特性 驱动传参 (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 控制的是

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值