當我透過ADB在開發版上下指令: 為何arg printk出來是很大的數目,而不是2呢?
C:\>adb shell "ioctl /dev/led_demo 1 2"
sending ioctl 0x1 0x00 0x00 0x00 0x00
ioctl 0x1 failed, -1
開發版Terminal:
[ 684.325000] led_open
[ 684.325000] led_ioctl
[ 684.325000] input arg:1097490464
[ 684.325000] input cmd:1
[ 684.325000] parameter is no valid.
Source code如下:
static long led_ioctl (struct file *fops, unsigned int cmd, unsigned long arg)
{
printk("led_ioctl\n");
//struct led_demo_dev * led_dev = (struct led_demo_dev *)fops->private_data;
printk("input arg:%d\n",arg);
printk("input cmd:%d\n",cmd);
if((arg < 1) || (arg > 4))
{
printk(KERN_ALERT"parameter is no valid.\n");
return -EINVAL;
}
switch (cmd)
{
case 0://LED_OFF:
writel(readl(GPM4DAT) | (0x1<<(arg-1)), GPM4DAT);
break;
case 1://LED_ON:
writel(readl(GPM4DAT) & ~(0x1<<(arg-1)), GPM4DAT);
break;
default:
return -EINVAL;