Linux常用函数总结 | 您所在的位置:网站首页 › Linux的free函数 › Linux常用函数总结 |
Linux常用函数:
1.alloc_chrdev_region
是一个函数语句,头文件是,可以动态分配设备编号。 该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。 int alloc_chrdev_region(dev_t *dev,unsigned int -firstminor,unsigned int -count,char *name); 2.class_create宏创建一个class #define class_create(owner, name) owner:一般设置为THIS_MODULEname:kobject对象的名字 3.cdev_init把用户自己定义的file_operations结构体存放到cdev机构体里的file_operaions的设备驱动接口中 cdev_init(struct cdev *cdev, const struct file_operations *fops) 4.of_get_next_child函数用迭代的查找子节点,函数原型如下 struct device_node *of_get_next_child(const struct device_node *node, struct device_node *prev) 5.platform_device_register()平台设备注册 resources结构体描述驱动的硬件资源 start:资源的开始值end:资源的结束值flasg:资源的类型 IORESOURCE_MEM:内存地址IORESOURCE_IO:IO端口IORESOURCE_DMA:DMA传输IORESOURCE_IRQ:中断 5.of_iomap()—reg属性内存映射将reg属性值的物理地址转化为虚拟地址 void __iomem *of_iomap(struct device_node *np, int index)参数: np:device_node表示的节点index:通常情况下reg属性包含多段,index 用于指定映射那一段,标号从0开始。 6.copy_from_user–拷贝数据include/linux/uaccess.h 从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0. copy_from_user(void *to, const void __user *from, unsigned long n)参数: *to:将数据拷贝到内核的地址 *from 需要拷贝数据的用户空间地址 n 拷贝数据的长度(字节) 返回值: 失败:没有被拷贝的字节数 成功:0 7.copy_to_user将读取到的数据拷贝到用户空间 copy_to_user(void __user *to, const void *from, unsigned long n)To 目标地址,这个地址是用户空间的地址; From 源地址,这个地址是内核空间的地址; N 将要拷贝的数据的字节数。 8.readl()/ writel()—虚拟地址读写 虚拟地址读写 readl()/ writel() //过时 void iowrite32(u32 b, void __iomem *addr) //写入一个双字(32bit) unsigned int ioread32(void __iomem *addr) //读取一个双字(32bit) 9.device_create()—在class下添加kobject对象include/linux/device.h device_create()函数 struct device *device_create(struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...)class:新构建的class parent:新kobject对象的上一层节点,一般为NULL dev_t:属性文件记录该设备号 drvdata:私有数据,一般为NULL fmt:变参参数,一般用来设置kobject对象的名字 10.kstrtouint—字符串转整形函数kstrtouint函数定义在文件kstrtox.c中,原形如下: int kstrtouint(const char *s, unsigned int base, unsigned int *res)s是输入字符串,base可以是10(10进制)或16(16进制),或者是0自动识别,res存放转换后的整形值. 当没有错误时返回值是0; 例: kstrtoint(receive_data, 16, &write_data); 11.i2c_add_driverI2C的设备驱动是通过i2c_add_driver(&my_driver)向i2c-core注册的,my_driver中的核心是detach和attach函数,在attach中通过probe探测到总线上的设备并把设备和 驱动建立连接以完成设备的初始化。 i2c_add_driver(&my_driver) 12.register_chrdev_region() register_chrdev_region(dev_t first,unsigned int count,char *name)First :要分配的设备编号范围的初始值(次设备号常设为0); Count:连续编号范围. Name:编号相关联的设备名称. (/proc/devices) 13.alloc_chrdev_region动态分配: Int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);Firstminor : 通常为0; *dev:存放返回的设备号; |
CopyRight 2018-2019 实验室设备网 版权所有 |