字符驱动的API总结

由设备号获取主次设备号:

MAJOR(dev_t dev)

MINOR(dev_t dev)

字符驱动的常用的API:

void cdev_init(struct cdev *, struct file_operations *)

struct cdev * cdev_alloc(void)

void cdev_put(struct cdev *p)

int cdev_add(struct cdev * , dev_t, unsigned)

void cdev_del(struct cdev *)

分配设备号的API:

int register_chrdev_region(dev_t from, unsigned count, const char *name)

int alloc_chrdev_region(dev_t* dev, unsigned baseminor, unsigned count, const char * name)

删除设备号的API":

void unregister_chardev_region(dev_t from, unsigned count)

用户空间到内核空间的转换问题:

copy_to_user():内核空间到用户空间

copy_from_user():从用户空间到内核空间

如果复制简单的类型的时候,需要用

get_user(val, (int *)arg) :从用户空间获取数据,arg是用户空间的地址

put_user(val, (int *)arg):输出数据到用户空间, arg是用户空间的地址

内核空间在访问用户空间之前,必须进行检查,确保是用户空间的地址;检查的方式:access_ok(type, addr, size)

关于IOCONTRL的内容就不在次赘述,比较简单。

猜你喜欢

转载自blog.csdn.net/sinat_35346588/article/details/82811805