Linux常用函数总结

Linux常用函数:

1.alloc_chrdev_region

是一个函数语句,头文件是<linux/fs.h>,可以动态分配设备编号。

该函数需要传递给它指定的第一个次设备号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_MODULE
  • name: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:存放返回的设备号;

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值