Linux驱动开发中常用的API(持续更新......)

发布于:2022-10-15 ⋅ 阅读:(646) ⋅ 点赞:(0)

1.printk

打印等级

#define KERN_EMERG   "0"    /* system is unusable */
#define KERN_ALERT   "1"    /* action must be taken immediately */
#define KERN_CRIT    "2"    /* critical conditions */
#define KERN_ERR     "3"    /* error conditions */                               
#define KERN_WARNING     "4"    /* warning conditions */
#define KERN_NOTICE  "5"    /* normal but significant condition */
#define KERN_INFO    "6"    /* informational */
#define KERN_DEBUG   "7"    /* debug-level messages */

其它用法和printf一样,可以利用打印等级区分错误信息

2.module_param
module_param(name, type, perm)	
功能:接收命令行传递的参数
参数:
    @name:变量名
    @type:变量的类型
        /* Standard types are:
 		*	byte, hexint, short, ushort, int, uint, long, ulong
 		*	charp: a character pointer
 		*	bool: a bool, values 0/1, y/n, Y/N.
		*	invbool: the above, only sense-reversed (N = true). */
	@perm:权限   权限的最大值0664,用户与组全部归属于root用户
        
        在 /sys/module/驱动名字/parameters/目录下创建一个名字为 变量名 的文件,此文件的权限为 type
3.MODULE_PARM_DESC
MODULE_PARM_DESC(_parm, desc)
功能:对传递的参数进行描述,可以通过modinfo命令查看这个描述字段
参数:
     @_parm:变量名
     @desc:描述字段
4.EXPORT_SYMBOL_GPL
EXPORT_SYMBOL_GPL(x)
功能:导出符号表
参数:
    @x:函数名/变量名
5.register_chrdev
int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)
	#include <linux/fs.h>
功能:创建字符设备驱动  
参数:
    @major:主设备号 (一次创建256个设备号,主设备号+[0-255])
        major > 0 :静态指定主设备号
        major = 0 :动态申请主设备号 
	@name:驱动的名字
        linux@ubuntu:/dev/input$ cat /proc/devices 
        Character devices:
          1 			mem
          4 			/dev/vc/0
          4 			tty
          4 			ttyS
          5 			/dev/tty
    	  |              |
         主设备号      驱动的名字
	@fops:操作方法结构体
        struct file_operations {
            int (*open) (struct inode *, struct file *);
            ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
			ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
    		int (*release) (struct inode *, struct file *);
        }
返回值:成功取决于第一个参数
    		major > 0 :成功返回0
        	major = 0 :成功返回的是主设备号
    	失败返回错误码
6.unregister_chrdev
#include <linux/fs.h>
void unregister_chrdev(unsigned int major, const char *name)
功能:销毁字符设备驱动
参数:
	@major:主设备号
    @name:驱动的名字
返回值:无
7.copy_to_user
#include <linux/uaccess.h>
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
功能:从内核空间向用户空间拷贝数据(驱动的read函数中)
参数:
    @to:用户空间的地址
	@from:内核空间的地址
	@n:拷贝的字节的个数
返回值:成功返回0,失败返回未拷贝的字节的个数
8.copy_from_user
#include <linux/uaccess.h>
unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
功能:从用户空间向内核空间拷贝数据(驱动的write函数中)
参数:
    @to:内核空间的地址
	@from:用户空间的地址
	@n:拷贝的字节的个数
返回值:成功返回0,失败返回未拷贝的字节的个数
9.ioremap
#include <linux/io.h>
void  *ioremap(unsigned long phy_addr, unsigned long size)
功能:地址映射
参数:
    @phy_addr:虚拟地址
	@size:映射的大小,单位是字节
返回值:成功返回虚拟地址,失败返回NULL
10.iounmap
void iounmap(volatile void  *addr)
功能:取消地址映射
参数:
    @addr:虚拟地址
返回值:无
11.writel
writel(v,r)	
功能:向寄存器中写(32bit) 数据
参数:
    @v:写的值
	@r:寄存器地址
12.readl
readl(r)
功能:读取寄存器中的数据
参数:
    @r:寄存器地址
13.class_create
struct class * class_create(owner, name)
功能:向上层提交目录名
参数:
    @owner:THIS_MODULE (编译器相关的宏)
    @name:目录名  在/sys/class下
返回值:成功返回cls的结构体指针,失败返回错误码指针
eg:
	struct class *cls = class_create(THIS_MODULE,"hello");
	if(IS_ERR(cls)){ //进入if语句就是错误
       	printk("class create error\n");
        return PTR_ERR(cls); //将错误码指针转换为错误码
    }
14.device_create
struct device *device_create(struct class *class, struct device *parent,
			     dev_t devt, void *drvdata, const char *fmt, ...)
功能:向上层提交设备信息
参数:
    @class:cls的指针
	@parent:一般NULL
    @devt:设备号
	@drvdata:写为NULL
    @fmt,...:可变参数,节点名
返回值:成功返回dev的指针,失败返回错误码指针
15.class_destroy
void class_destroy(struct class *cls)
功能:销毁目录
参数:
    @cls:目录的指针
返回值:无
16.device_destroy
void device_destroy(struct class *class, dev_t devt)
功能:销毁设备信息
参数:
    @class:目录的指针
	@devt:设备号
返回值:无
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到