为了账号安全,请及时绑定邮箱和手机立即绑定

应用程序中的ioctl函数是如何将参数传递到驱动程序sbc2440_leds_ioctl中的?

应用程序中的ioctl函数是如何将参数传递到驱动程序sbc2440_leds_ioctl中的?

慕村225694 2023-01-13 15:11:07

嵌入式Linux中如何实现应用程序与驱动程序函数接口问题,以GPIO为例
驱动中的函数定义:
static int sbc2440_leds_ioctl(
struct inode *inode, 
struct file *file, 
unsigned int cmd, 
unsigned long arg)
{
switch(cmd) {
case 0:
case 1:
if (arg > 4) {
return -EINVAL;
}
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -EINVAL;
}
}

应用程序中的函数定义:
ioctl(fd, on, led_no);

查看完整描述

2 回答

?
神不在的星期二

TA贡献1699条经验 获得超6个赞

这是linux系统标准驱动架构,通过在内核驱动程序运用标准的模式实现在用户空间的标准IO访问。主要有以下几个部分:
1 对于一个驱动程序要有一个装载函数XX_Init和卸载函数XX_Exit,通过module_init(XX_Init)和module_exit(XX_Exit),这样编译生成的.o(2.4版)或.ko(2.6版)就可以调用insmod加载和调用rmmod卸载了。
2在XX_Init初始化设备中要为设备alloc_chrdev_region获取一个主设备号,并建立一个file_opertions结构的变量将你的XX_open,XX_read,XX_write,XX_ioctl等函数赋值给结构中相应的函数指针,经过对设备的cdev_init注册后,你在用户空间调用open函数就可以打开设备并获取一个fd值,然后通过fd调用ioctl就能映射到你驱动中的XX_ioctl函数。

查看完整回答
反对 回复 2023-01-15
?
ABOUTYOU

TA贡献1570条经验 获得超5个赞

嵌入式Linux中如何实现应用程序与驱动程序函数接口问题,以GPIO为例
驱动中的函数定义:
static int sbc2440_leds_ioctl(
struct inode *inode, 
struct file *file, 
unsigned int cmd, 
unsigned long arg)
{
switch(cmd) {
case 0:
case 1:
if (arg > 4) {
return -EINVAL;
}
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -EINVAL;
}
}

应用程序中的函数定义:
ioctl(fd, on, led_no);
不明白的地方是函数名都不一样,应用程序中的ioctl函数是如何将参数传递到驱动程序sbc2440_leds_ioctl中的?

查看完整回答
反对 回复 2023-01-15

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信