色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > linux字符設備驅動框架及編寫流程

linux字符設備驅動框架及編寫流程 時間:2018-08-27      來源:未知

流程:

init

{

}

exit

{

}

申請設備號 (動態注冊/靜態注冊) 創建一個字符設備 cdev_alloc

初始化字符設備 cdev_init

設備號和字符設備關聯 cdev_add

銷毀字符設備 cdev_del

解注冊設備號 unregister_chrdev_region

1 設備號

設備號分為主設備號和次設備號主設備號表示一類設備

次設備號表示一類設備中的一個設備

#include #define MINORBITS 20

#define MINORMASK ((1U << MINORBITS) - 1)

#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))

#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))

#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) typedef u_long dev_t;

2 申請設備號

靜態注冊

#include

extern int register_chrdev_region(dev_t, unsigned, const char *);

函數實現在char_dev.c

int register_chrdev_region(dev_t from, unsigned count, const char *name)

from : 設備號 通過 MKDEV 生成count : 子設備個數

name : 設備名

返回值: 成功返回0, 失敗返回負數錯誤碼

動態注冊

#include

extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,

const char *name) dev : 設備號指針

baseminor : 子設備第一個編號count : 子設備個數

name : 設備名

返回值: 成功返回0, 失敗返回負數錯誤碼

注銷設備號

#include

void unregister_chrdev_region(dev_t from, unsigned count) from : 設備號

count: 子設備個數

3 創建字符設備

struct cdev *cdev_alloc(void)

分配一個cdev結構體,使用此結構體描述一個字符設備成功返回一個指針,否則返回NULL

#include

void cdev_del(struct cdev *p) 刪除字符設備結構體#include

void cdev_init(struct cdev *cdev, const struct file_operations

*fops)

初始化一個字符設備

cdev :被初始化的字符設備指針fops :字符設備操作函數指針集

int cdev_add(struct cdev *p, dev_t dev, unsigned count) 講字符設備添加到內核

體指針

p :字符設備結構體指針,cdev_alloc函數成功返回的結構

dev : 設備號 通過動態或靜態成功分配的設備號count :子設備個數

返回值:成功返回0, 出錯返回負數的錯誤碼

4 創建設備文件

sudo mknod /dev/haha0 c 250 0

/dev/haha0 創建的子設備文件名

c 字符設備

250 主設備號

0 次設備號

會在 /dev 下創建一個haha0的一個字符設備文件,主設備號

250,次設備號0

5 數據拷貝

char user *buf : user 指用戶空間的指針

從內核空間向用戶空間拷貝數據

static inline long copy_to_user(void user *to, const void *from, unsigned long n)

to :用戶空間指針( user) from :數據源

n :拷貝的字節數返回值 0 成功

從用戶空間向內核空間拷貝數據

static inline long copy_from_user(void *to, const void user * from, unsigned long n) to :內核buf指針

form:用戶空間數據源指針n : 拷貝字節數

返回值 0 成功

注:字符設備驅動測試步驟:

1 編譯出hello.ko(make)和test 2 sudo insmod hello.ko

3 cat /proc/devices 查看設備號

4 sudo mknod /dev/haha0 c 250 0

5 sudo ./test

如果打印open /dev/haha0 ok 則驅動正常否則驅動有錯,需改正

6 sudo rmmod hello

7 sudo rm -rf /dev/haha0

上一篇:什么是進程,學霸來告訴你

下一篇:TCP網絡編程詳解

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 国产亚洲精品久久久无码 | 中文字幕无码乱人伦 | 亚洲一卡2卡3卡4卡5卡6卡 | 男女男精品免费视频网站 | 亚洲自偷自偷在线成人网站传媒 | 精品亚洲成a人片在线观看少妇 | 蜜臀av999无码精品国产专区 | 狠狠综合久久久久综合网小蛇 | 国产超碰AV人人做人人爽 | 国产欧美综合在线观看第十页 | 99久久精约久久久久久清纯 | 国产嫖妓风韵犹存对白 | 日本WV一本一道久久香蕉 | 成年女人18级毛片毛片免费 | 色久av| 噜噜吧噜噜色95 | 老师黑色丝袜被躁翻了AV | 少妇高潮毛片免费看A片 | 国产成人av网站 | 7788色淫网站免费 | 麻豆亚洲AV成人无码久久精品 | 糖心VLOG精品一区二区三区 | 亚洲美女高潮久久久久 | 性VR片免费视频 | 国精产品W灬源码1688伊在线 | 黑森林av福利网站 | 大地资源网视频观看免费高清 | 少妇爆乳无码专区AV无码 | 老司机精品视频一区二区 | 97亚洲熟妇自偷自拍另类图片 | 中文字幕一二三综合a | 日韩精品成人一区二区三区 | 亚洲AV日韩精品久久久久久 | 永久免费无码国产 | 久久99久久99精品免视看看 | 四虎成人影院在线观看 | 无遮高潮国产免费观看 | 脱了老师内裤猛烈进入的软件 | 久久免费99精品国产自在现线 | 精品一区二区国产在线观看 | 日产又大又黄又爽又猛 |