????????????????????????????????????°???????????????????????????????????????????????????????????????????????????C?????????????????????????????????????????????hold?????????????Щ?????????????????о??????????
???????????????漰??linux???????????????????????????????????????????led???????????????linux???????arm?????????????????????????????????????鵽??????????????????????????? ?????????к???豸???????????????????
????led????????????????????????????????????????????????????????′??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Ч????
???????????????????led????????д??
???????????linux?????豸?????????????????????????????????????????????£???linux??????????????????????linux??????????????????linux????淶??linux???豸?????????????????豸/???豸/?????豸?????????????豸????????????????????????????豸?????????????????????????led???????豸?鵽?????豸?????????????????????????????????????????豸???????????????豸????汾??????У?????????????! ?????????????????豸???????????豸?????????????????
?????????led????????????????????豸?????????????????????????????????и?????????ɡ???????????
????stop???????YY??????????豸????????????????????????????????????????include?£??????????miscdivice.h??
????1 struct miscdevice  {
????2         int minor;
????3         const char *name;
????4         const struct file_operations *fops;
????5         struct list_head list;
????6         struct device *parent;
????7         struct device *this_device;
????8         const char *nodename;
????9         mode_t mode;
????10 };
?????e???????????淶????????譴???????????????????????????????????????豸????壬???????????????е???????????????????? f u c k
??????????????????????飬?????????????????minor????????????????????????豸??????????????????豸????????豸??????ù??????豸??????????豸???????????????????豸????????????minor?????????д????????????????????????????????????????
?????????????????????????linux?????з??????????????????????????????? ???Χ?????file_operations????????????????????о??????file_operatios??????塣
????file_operations?????????????linux?н??????豸????????????????????????????????????????????????????????????????????????????????????????????read/write??????????????????????????????в??????????wow???????????????????????????????ū??????????????????????????????????????????????????????????????????????????????????е??λ???????linux???????е??λ???????????????????????????????????????ò?????о???linux??????????????????????
????????file_operations??????????????????? ???????????????ū????????????д????????so??let‘s go??
??????????????include/linux/fs.h??????????????壺

 

1 struct file_operations {
2         struct module *owner;
3         loff_t (*llseek) (struct file *?? loff_t?? int);
4         ssize_t (*read) (struct file *?? char __user *?? size_t?? loff_t *);
5         ssize_t (*write) (struct file *?? const char __user *?? size_t?? loff_t *);
6         ssize_t (*aio_read) (struct kiocb *?? const struct iovec *?? unsigned long?? loff_t);
7         ssize_t (*aio_write) (struct kiocb *?? const struct iovec *?? unsigned long?? loff_t);
8         int (*readdir) (struct file *?? void *?? filldir_t);
9         unsigned int (*poll) (struct file *?? struct poll_table_struct *);
10         int (*ioctl) (struct inode *?? struct file *?? unsigned int?? unsigned long);
11         long (*unlocked_ioctl) (struct file *?? unsigned int?? unsigned long);
12         long (*compat_ioctl) (struct file *?? unsigned int?? unsigned long);
13         int (*mmap) (struct file *?? struct vm_area_struct *);
14         int (*open) (struct inode *?? struct file *);
15         int (*flush) (struct file *?? fl_owner_t id);
16         int (*release) (struct inode *?? struct file *);
17         int (*fsync) (struct file *?? struct dentry *?? int datasync);
18         int (*aio_fsync) (struct kiocb *?? int datasync);
19         int (*fasync) (int?? struct file *?? int);
20         int (*lock) (struct file *?? int?? struct file_lock *);
21         ssize_t (*sendpage) (struct file *?? struct page *?? int?? size_t?? loff_t *?? int);
22         unsigned long (*get_unmapped_area)(struct file *?? unsigned long?? unsigned long?? unsigned long?? unsigned long);
23          int (*check_flags)(int);
24         int (*flock) (struct file *?? int?? struct file_lock *);
25         ssize_t (*splice_write)(struct pipe_inode_info *?? struct file *?? loff_t *?? size_t?? unsigned int);
26         ssize_t (*splice_read)(struct file *?? loff_t *?? struct pipe_inode_info *?? size_t?? unsigned int);
27         int (*setlease)(struct file *?? long?? struct file_lock **);
28 };

????????????????????????????????????????????????????????????????????????????????????????????????????????????о????????ower??ioctl????????????ower????????????????????飬??ioctl?????????