Pengshuowang 2021-11-08 22:37 采纳率: 0%
浏览 15
已结题

Linux中用户空间ioctl传递的cmd参数不对。

1.用户空间调用ioctl函数传递cmd参数代码如下

 printf("In the app program the LED_ON is:%d\n",LED_ON);
    printf("In the app program the LED_OFF is:%d\n",LED_OFF);
    sleep(1);
    for (i = 0;i < 3;i++) {
        ioctl(fd,LED_ON);
        sleep(1);
        ioctl(fd,LED_OFF);
        sleep(1);
    }

2.内核空间ioctl解析函数如下

static int char_cdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
    
    printk(KERN_INFO "cmd is:%d\n",cmd);
    printk(KERN_INFO "LED_ON is:%d\n",LED_ON);
    printk(KERN_INFO "LED_OFF is:%d\n",LED_OFF);

    if (_IOC_TYPE(cmd)!=LED_IOC_MAGIC) {
        return -ENOTTY;
    }
    if (_IOC_NR(cmd) > LED_IOCTL_MAXNR) {
        return -ENOTTY;
    }

    switch(cmd) {
        case LED_ON:
            gpio_set_value(GPIO_LED_PIN_NUM,0);
            printk(KERN_INFO DEVICE_NAME "LED_ON\n");
            break;
        case LED_OFF:
            gpio_set_value(GPIO_LED_PIN_NUM,1);
            printk(KERN_INFO DEVICE_NAME "LED_OFF\n");
            break;
        default:
            gpio_set_value(GPIO_LED_PIN_NUM,1);
            break;
    }
    printk(KERN_INFO DEVICE_NAME " ioctl method!\n");
    return 0;
 }

3.运行结果如下,cmd传递到内核变成了0,但是应用程序中传递的命令是11776和11777,在内核空间打印命令也是11776和11777,唯有cmd的参数不对

[root@EPC-M6G2C driver]# ./driver_test_app
LED_ERR opened!
In the app program the LED_ON is:11776
In the app program the LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
cmd is:0
LED_ON is:11776
LED_OFF is:11777
Control led end!LED_ERR closed!
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月16日
    • 创建了问题 11月8日

    悬赏问题

    • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
    • ¥100 解决数据不连续出现问题
    • ¥15 clousx6整点报时指令怎么写
    • ¥30 远程帮我安装软件及库文件
    • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
    • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
    • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
    • ¥15 Android studio 无法定位adb是什么问题?
    • ¥15 C#连接不上服务器,
    • ¥15 angular项目错误