猿问

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

嵌入式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);

慕村225694
浏览 146回答 2
2回答

神不在的星期二

这是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函数。

ABOUTYOU

嵌入式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中的?
随时随地看视频慕课网APP
我要回答