• 招生咨詢熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢熱線
4008-569-579
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料 > 嵌入式學(xué)習(xí)路線筆記:教你怎么創(chuàng)建設(shè)備文件詳解
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料>嵌入式學(xué)習(xí)路線筆記:教你怎么創(chuàng)建設(shè)備文件詳解

嵌入式學(xué)習(xí)路線筆記:教你怎么創(chuàng)建設(shè)備文件詳解

來源:廣州達(dá)內(nèi)教育        時(shí)間:2023-05-30        熱度:41℃        返回列表

    這次小編就來給大家分享一下嵌入式應(yīng)用技術(shù)里面該怎么創(chuàng)建設(shè)備文件,大家若是讀完本篇文章后還有不清楚的地方可以咨詢我們。



    1、自動(dòng)創(chuàng)建設(shè)備文件創(chuàng)建設(shè)備文件類

    #define class_create(owner, name)

    設(shè)備可以有多個(gè)子設(shè)備,class_create這個(gè)宏相當(dāng)于創(chuàng)建一

    個(gè)子設(shè)備的一個(gè)父類,通過它來創(chuàng)建多個(gè)子設(shè)備 owner :模塊本身 THIS_MODULE name : name

    返回值 : struct class 類型指針, 出錯(cuò):NULL,成功:有效的struct class指針

    創(chuàng)建設(shè)備文件

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

    dev_t devt, void *drvdata, const char

    *fmt, ...)

    class :通過 class_create 創(chuàng)建的設(shè)備文件類指針 parent :父設(shè)備,一般NULL

    devt :設(shè)備號(hào),包含主設(shè)備號(hào)和次設(shè)備號(hào) drvdata :私有數(shù)據(jù)

    fmt :設(shè)備文件名

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

    失敗時(shí)需要用 ERR_PTR 函數(shù)判斷

    銷毀設(shè)備文件

    void device_destroy(struct class *class, dev_t devt)

    class :設(shè)備文件類指針

    devt :設(shè)備號(hào),包含主設(shè)備號(hào)和次設(shè)備號(hào)

    銷毀設(shè)備文件類

    extern void class_destroy(struct class *cls); cls :設(shè)備文件類指針

    設(shè)備類查看

    ls /sys/class/xxxxx

    ls /dev/xxx

    2、區(qū)分設(shè)備文件 struct inode {

    ......

    dev_ti_rdev; inode結(jié)構(gòu)體保存的設(shè)備號(hào)

    ......

    void

    *i_private; inode 的私有數(shù)據(jù)

    }

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

    dmesg | tail -20

    3、ioctl

    命令碼構(gòu)建,內(nèi)核使用32位表達(dá)了4種信息 dir:讀寫,size:

    ioctl第三個(gè)參數(shù)時(shí)類型所占的字節(jié)數(shù)

    ,type(可以做命令的一個(gè)分段,類似于使用枚舉的錯(cuò)誤碼分段), 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、信號(hào)量

    static inline void sema_init(struct semaphore *sem, int val) sem :信號(hào)量結(jié)構(gòu)體指針

    val :信號(hào)量持有資源個(gè)數(shù)

    down 申請(qǐng)資源,當(dāng)沒有資源時(shí),休眠等待,不可中斷 extern void down(struct semaphore *sem)

    down_interruptible 申請(qǐng)資源,當(dāng)沒有資源時(shí),休眠等待,可中斷

    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并測(cè)試,為0返回true,否則返回

    false

    atomic_inc 加1

    7、自旋鎖

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

    想要了解更多的嵌入式應(yīng)用技術(shù)那就來“撩”我們吧!

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部