Linux常用函数总结 您所在的位置:网站首页 Linux的free函数 Linux常用函数总结

Linux常用函数总结

2023-07-26 04:53| 来源: 网络整理| 查看: 265

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_driver

I2C的设备驱动是通过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 实验室设备网 版权所有