重新开始,做回自我,爱拼的男人最牛!
分类: LINUX
2010-01-28 15:32:11
1. read函数
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
返回值为非负值时表示成功读取的字节数,
2. write函数
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
如果返回值为非负值表示成功写入的字节数
3. copy_to_user 和copy_from_user
unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
注意了:内核态的copy_from_user和copy_to_user及用户态的read和write的第三个参数一定是第二个参数的字节数,或比第二个参数的字节数大
copy_from_user、copy_to_user函数返回不能被复制的字节数(正数),因此,如果完全复制成功,返回值为0
4. 申请中断
request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long irq_flags, const char * devname, void *dev_id)
返回值为0表示申请成功,为负值表示申请失败,返回值为 –EBUSY表示有一个驱动程序已经占用了你要请求的终端信号,request_irq 总是和free_irq 成对出现, void free_irq( unsigned int irq,void *dev_id);
5. kmalloc函数
void *kmalloc(size_t size,int flags);
分配地址成功返回分配的地址值,返回NULL表示分配内存失败。