???????????ioctl??????????????ū????????????????????????file_operations???????????????????????????????led??????????IO???????????????????????????????????????????????????????????????????????icctl????IO Control????д??????????????IO??????????????led?????????????IO????????IO??????????ú???????ioctl???????????????????????????ioctl???????б?д??????????????????ioctl??????????????file_operactions?????????????????????????? ??      ????????????
??????????????????????????????????????????????????????
?????????led?????????IO????????????????????????????????????????????????????????????????????С??????led????IO?????????GPB5/GPB6/GPB7/GPB8???? ????????????????P0/P1?????????P0/P1????????????reg51.h???棬???????IO???????????嵽??<arch/regs-gpio.h>???????????????????IO???????????????????IO????????led???
????1 static unsigned long led_table []= {
????2         S3C2410_GPB(5)??
????3         S3C2410_GPB(6)??
????4         S3C2410_GPB(7)??
????5         S3C2410_GPB(8)??
????6 };
???????????????????led?????GPIO?????????????/????????????????????????????led?????????????????????????ЩGPIO??????????????????????????????led???????????IO???ж?????????????????????ü???? ??????????????????led???????????????????
????1 static unsigned int led_cfg_table  []={
????2         S3C2410_GPIO_OUTPUT??
????3         S3C2410_GPIO_OUTPUT??
????4         S3C2410_GPIO_OUTPUT??
????5         S3C2410_GPIO_OUTPUT??
????6 };
?????????????????й?????????????????????????ο??? ???????????question???????????????????????file_operations??????????????????????????????led?????ioctl????????????flie_operations???????????????????????????ioctl?????????????????????????heatnan_leds_ioctl;????????????file_operaction ??????????????????????????????????????????·????????????????????????????????ο?file_operactions????????????????
?????????led??????????????ó??????led??????——>?????????ioctl????——>??????ioctl??????????????——>?????file_operations?н??????????????led?????????——>???????led????????????????heatnan_leds_ioctl??.
???????????????????????
????1 static struct file_operations dev_fops={
????2         .owner = THIS_MODULE??
????3         .ioctl= heatnan_leds_ioctl??
????4 };
???????????????????????дheatnan_leds_ioctl???????????
???????д????????????????????????????????????????????ioctl?????????Σ?ioctl??????????????????????????????????????????????????????豸??????????????????????????????????????????????????????????????????????????
?????????file_operactions?ж????ioctl????????????????????????????????????????????????????????????????????????

 

1 static int heatnan_leds_ioctl(
2         struct inode *inode??
3         struct file *file??
4         unsigned int cmd??
5         unsigned long arg)
6 {
7        if(arg<0||arg>3)
8        {
9            return -EINVAL;
10        }
11        switch(cmd)
12        {
13             case 0:
14             case 1:
15                 {
16                       s3c2410_gpio_setpin(led_table[arg]??!cmd);
17                       return 0;
18                 }
19             default:
20                       return -EINVAL;
21
22        }
23  }