???????????????????????Щ????s3c2410_gpio_setpin????????????????????????????????????????????
?????????????Щ????????????linux????arm??????????????????Щ??????????????????????????????????????????????????????д?????cool??????????????????δ??????????????????????Ч????????????ó?????C++??C?????У????????C++??Ч???????и????????????????ò?????????????????????????????????????????????????????????С??????Ч????????????????????????????????????????
?????????????????????????????????????????ioctl????????????heatnan_leds.ioctl?????????led??
???????????Щ??????????????????????????????????豸???????Щ?б????????????
????×××××××××××××××××××???????????????la??linux?????????о???????@
????????????????led???????????????????????д???????????????????????????????????????????????????????????????д?????ó???о???
????1 #include<linux/kernel.h>
????2 #include<linux/module.h>
????3 #include<linux/miscdevice.h>
????4 #include<linux/gpio.h>
????5 #include<linux/fs.h>
????6 #include<linux/init.h>
????7 #include<mach/regs-gpio.h>
????8 #include<mach/hardware.h>
????9
????10 #define DEVICE_NAME "heat_leds"
????11
????12
????13 static unsigned long led_table []= {
????14         S3C2410_GPB(5)??
????15         S3C2410_GPB(6)??
????16         S3C2410_GPB(7)??
????17         S3C2410_GPB(8)??
????18 };
????19 static unsigned int led_cfg_table  []={
????20         S3C2410_GPIO_OUTPUT??
????21         S3C2410_GPIO_OUTPUT??
????22         S3C2410_GPIO_OUTPUT??
????23         S3C2410_GPIO_OUTPUT??
????24 };
????25 static int heatnan_leds_ioctl(
????26         struct inode *inode??
????27         struct file *file??
????28         unsigned int cmd??
????29         unsigned long arg)
????30 {
????31        if(arg<0||arg>3)
????32        {
????33            return -EINVAL;
????34        }
????35        switch(cmd)
????36        {
????37             case 0:
????38             case 1:
????39                 {
????40                       s3c2410_gpio_setpin(led_table[arg]??!cmd);
????41                       return 0;
????42                 }
????43             default:
????44                       return -EINVAL;
????45
????46        }
????47 }
????48 static struct file_operations dev_fops={
????49         .owner = THIS_MODULE??
????50         .ioctl= heatnan_leds_ioctl??
????51 };
????52 static struct miscdevice misc={
????53         .minor=MISC_DYNAMIC_MINOR??
????54         .name=DEVICE_NAME??
????55         .fops=&dev_fops??
????56 };
????57 static int __init led_init(void)
????58 {
????59         int ret;
????60         int i;
????61         for(i=0;i<4;i++)
????62         {
????63                 s3c2410_gpio_cfgpin(led_table[i]??led_cfg_table[i]);
????64                 s3c2410_gpio_cfgpin(led_table[i]??0);
????65         }
????66         ret=misc_register(&misc);
????67         printk(DEVICE_NAME" initialized ");
????68         return ret;
????69 }
????70 static void __exit led_exit(void)
????71 {
????72         misc_deregister(&misc);
????73 }
????74 module_init(led_init);
????75 module_exit(led_exit);
????76 MODULE_LICENSE("GPL");
????????tmdд?????????????????????????鵽?????????????????????????????????????????????黯??????ū????????????
???????
??????????????????????????????????????lsmod??dev???????????????????У????????????????????
????????????????????????????????????led???????????led?????????led?????????????????????????????????????????????????
????????ж???????????????????????????????????????????????????μ??е????????????????
??????????????Щ???????????????????????????????
??????????????????????????????ū??????????????????????????????????????????????????飬?????л??
????????????иУ?
????1 ?????????????????о?????linux???е????????????????????????????????linux??????????????????????????????????д??????????????ν??
????2 ?о????????????????????裬????????????????????linux?????????????????linux?????????????????????????????????????????????????????????????????о??????????????????????????
????3 ????linux????????????????????????????????????????????????????????????????????