联系方式

咨询热线:400-998-6158

点击此处免费预约试听课程»

常见问题
学习资讯
学习资讯

嵌入式创建设备文件详解

嵌入式创建设备文件详解

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-998-6158

相关课程