1. gzyueqian
      13352868059

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

      更新時(shí)間: 2018-10-19 10:10:18來源: 西安嵌入式培訓(xùn)瀏覽量:3275

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



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

          #define class_create(owner, name)
          設(shè)備可以有多個子設(shè)備,class_create這個宏相當(dāng)于創(chuàng)建一
          個子設(shè)備的一個父類,通過它來創(chuàng)建多個子設(shè)備 owner :模塊本身 THIS_MODULE name : name
          返回值 : struct class 類型指針, 出錯: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è)備號,包含主設(shè)備號和次設(shè)備號 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è)備號,包含主設(shè)備號和次設(shè)備號
          銷毀設(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è)備號
          ......
          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第三個參數(shù)時(shí)類型所占的字節(jié)數(shù)
          ,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 :信號量結(jié)構(gòu)體指針
          val :信號量持有資源個數(shù)
          down 申請資源,當(dāng)沒有資源時(shí),休眠等待,不可中斷 extern void down(struct semaphore *sem)
          down_interruptible 申請資源,當(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并測試,為0返回true,否則返回
          false
          atomic_inc 加1
          7、自旋鎖

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

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

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 熟女一区二区三区国产 | 日韩一区二区跑去四区 | 亚洲男人的天堂色偷免费 | 亚洲欧美日韩天堂一区二区 | 日韩国产亚洲欧美在线 | 日韩精品国产另类专区 |