• 招生咨询热线:4008-569-579 
  • 手机版
    用手机扫描二维码直达商品手机版
招生咨询热线
4008-569-579
机构主页 > 培训资料 > 嵌入式学习路线笔记:教你怎么创建设备文件详解
机构主页 > 培训资料>嵌入式学习路线笔记:教你怎么创建设备文件详解

嵌入式学习路线笔记:教你怎么创建设备文件详解

来源:广州达内教育        时间:2023-05-30        热度:77℃        返回列表

    这次小编就来给大家分享一下嵌入式应用技术里面该怎么创建设备文件,大家若是读完本篇文章后还有不清楚的地方可以咨询我们。



    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 : %drn", 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); 解锁

    想要了解更多的嵌入式应用技术那就来“撩”我们吧!

电话咨询

电话咨询

咨询电话:
4008-569-579
回到顶部

回到顶部