当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 嵌入式学习笔记:创建设备文件详解
嵌入式学习笔记:创建设备文件详解
时间:2018-09-27作者:华清远见

1 自动创建设备文件创建设备文件类

#define class_create(owner, name)

设备可以有多个子设备,class_create这个宏相当于创建一

个子设备的一个父类,通过它来创建多个子设备 owner :模块本身 THIS_MODULE name : name

返回值 : struct class 类型指针, 出错:NULL,成功:有效的struct class指针

创建设备文件

struct device *device_create(struct class *class, struct device *parent,

dev_t devt, void *drvdata, const char

*fmt, ...)

class :通过 class_create 创建的设备文件类指针 parent :父设备,一般NULL

devt :设备号,包含主设备号和次设备号 drvdata :私有数据

fmt :设备文件名

返回值:Returns &struct device pointer on success, or ERR_PTR() on error.

失败时需要用 ERR_PTR 函数判断

销毁设备文件

void device_destroy(struct class *class, dev_t devt)

class :设备文件类指针

devt :设备号,包含主设备号和次设备号

销毁设备文件类

extern void class_destroy(struct class *cls); cls :设备文件类指针

设备类查看

ls /sys/class/xxxxx

ls /dev/xxx

2 区分设备文件 struct inode {

......

dev_ti_rdev; inode结构体保存的设备号

......

void

*i_private; inode 的私有数据

}

ptintk("open device num majour : %d , min min : %d\r\n", MAJOR(pNode->i_rdev), MINOR(pNode->i_rdev)

dmesg | tail -20

3 ioctl

命令码构建,内核使用32位表达了4种信息 dir:读写,size:

ioctl第三个参数时类型所占的字节数

,type(可以做命令的一个分段,类似于使用枚举的错误码分段), nr:命令码

*0xE0000000DIR

*0x80000000DIR = WRITE

*0x40000000DIR = READ

*0x20000000DIR = NONE

* 0x3FFF0000 SIZE (overlaps NONE bit)

* 0x0000FF00 TYPE

* 0x000000FF NR (CMD)

4 互斥锁

# define mutex_init(mutex)

mutex :要初始化的锁,注意传的是 struct mutex 类型指

mutex_lock

mutex_unlock

5 信号量

static inline void sema_init(struct semaphore *sem, int val) sem :信号量结构体指针

val :信号量持有资源个数

down 申请资源,当没有资源时,休眠等待,不可中断 extern void down(struct semaphore *sem)

down_interruptible 申请资源,当没有资源时,休眠等待,可中

extern int __must_check down_interruptible(struct semaphore *sem)

up 释放资源

extern void up(struct semaphore *sem)

6 原子变量

ATOMIC_INIT(0) 初始化

atomic_dec_and_test 减1并测试,为0返回true,否则返回

false

atomic_inc 加1

7 自旋锁

spin_lock_init(&g_SpinLock); 初始化 spin_lock(&g_SpinLock); 加锁 spin_unlock(&g_SpinLock); 解锁


发表评论

全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号