這次小編就來給大家分享一下嵌入式應(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 申請資源,當(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ù)那就來“撩”我們吧!