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

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > Linux內核驅動的platform機制

Linux內核驅動的platform機制 時間:2018-07-26      來源:未知

1.模塊(一種特殊的內核代碼寫法,一般編譯成ko文件,用于承載用戶想要動態添加進內核的代碼(不限于驅動))

a.寫法

module_init(模塊構造函數 );

module_init(模塊析構函數 );

b.編譯

標準的Makefile

c.模塊相關工具

insmod/rmmod/lsmod/modinfo/modprobe/depmod

為了自動安裝有依賴關系的模塊,兩個前提: 1.模塊必須都拷貝到/lib/modules/3.14.0; 2.執行depmod

2.字符設備驅動框架

1.認知

a. 無系統編程(裸機編程.bin,hex)--有系統編程(安全,并發,豐富的驅動。。。elf,exe)

b. OS管理了所有驅動,而且各個操作系統管理結構(數據結構)不一定一樣

c. 了解數據結構的意義

d. 回掉

e. 計算機喜歡數字而不是字符串

2.名詞

設備文件: 一個特殊的文件用于抽象設備操作入口,用與隱藏設備號細節(域名-IP)

設備號:設備驅動的代號,主設備號 次設備號

驅動:讓硬件工作起來的軟件(裸機驅動 系統之下的驅動)

驅動框架:平臺(操作系統)對驅動編寫的要求

3.涉及的函數

申請設備號:

強制申請int register_chrdev_region(dev_t first, unsigned int count, char *name)

動態申請int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)//name設備號說明信息(/proc/devices)

釋放設備號:

void unregister_chrdev_region(dev_t first, unsigned int count);

初始化cdev:

void cdev_init(struct cdev *, const struct file_operations *);

注冊cdev:

int cdev_add(struct cdev *, dev_t, unsigned);

移除cdev:

void cdev_del(struct cdev *);

1.長得像驅動

struct cdev myled{

.dev = 250

.fops{

.open = led_on;

.release = led_off;

}

};

2.放到內核中去

寫到module.c

3.加入內核管理驅動的數據結構

cdev_add(&myled, 250, 1);

cdev_del(&myled);

1.內核希望你寫驅動的時候采用總線、設備、驅動分離的方式來寫,而為了分離沒有具體(I2C,SPI,USB...)總線的設備發明了一個虛擬的platform_bus總線

a.platform_device: 注冊設備必要的資源(基地址,引腳,中斷號,波特率,ip,精度。。。)信息

b.platform_driver:實現設備操作做的算法(不包含具體數據,必須先匹配再獲取);

1. Linux系統中以模塊方式組織設備驅動程序,請列舉在一個模塊程序中必不可少的組成部分。 (可以寫個Hello world模塊的程序)__init __exit

2. 請說明一下從零創建一個linux字符設備驅動的步驟?

4. 簡述Linux設備驅動中使用中斷的步驟。

5. 簡述信號量和自旋鎖的異同和使用時的注意事項。

6. 簡述命令 mknod /dev/zero c 1 5 的做用和命令各個部分的含義,并寫出創建一個塊設備節點的命令(把c改成b)。

7. 簡述命令insmod,rmmod,lsmod,depmod,modprobe 的功能。

8. 簡述platform設備基本原理, platform設備最大優勢是什么?

9. 簡述設備驅動程序和普通應用程序的異同點。

10. 簡述mmap機制的作用和使用mmap的好處。

1. #include

#include

#include

static int hello_init(void)

{

printk(KERN_ALERT "Hello world enter!\n");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ ALERT " Hello world exit!\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");

2.

使用alloc_...方法動態注冊設備號;

為cdev申請內存;

初始化設備并添加該設備;

完成file_operations中的相應函數功能;

4. request_irq,申請irq;

free_irq,釋放irq。

5. 信號量和自旋鎖都是解決互斥問題的基本手段,信號量的實現依賴于自旋鎖。使用信號量機制時,進程若不能獲得信號量,進程不會如自旋鎖那樣原地打轉,而是讓進程進入休眠等待狀態。當使用信號量的開銷時間T1大于使用自旋鎖的開銷T2時,宜使用自旋鎖,若T2大于T1,則宜使用信號量。由于信號量所保護的臨界區可能包含引起阻塞的代碼,而自旋鎖則絕對要避免用來保護這樣的代碼。信號量存在于進程上下文,而如果被保護的資源需要在中斷或者軟中斷情況下使用,則只能選擇自旋鎖。

6. mknod,該命令用于創建設備節點。/dev/zero 表示設備節點創建的目錄和名字,c 代表創建的設備節點為字符設備節點,1 代表主設備號,5 代表此設備號。

創建塊設備節點的命令:mknod /dev/blockdev b 253 0

7.insmod:加載驅動模塊到內核;

Rmmod:從內核刪除驅動模塊;

Lsmod:查看當前內核包含哪些模塊

8.原理:

第一:定義一個platform_driver結構體,對probe和remove函數指針進行初始化,對driver里面的成員.owner,.name進行初始化;

第二:在模塊的初始化函數中調用platform_drive_registe()初始化這個驅動,在卸載模塊中調用platfrom_driver_unregister()注銷這個驅動;

第三:將驅動中實用的設備資源信息通過傳遞進來的platform_device結構體指針獲取。

第四:平臺設備添加,一種是:用platform_device手動編碼;另一種是在設備樹中添加一個節點。

匹配過程:一種是:如果是平臺設備與平臺驅動的匹配以名字匹配,平臺總線將會遍歷

對方,如果名字相同,則調用平臺驅動的probe函數,并且將匹配上的平臺設備的結構體指針傳給設備函數;另一種是:去匹配設備樹中的設備節點里面的兼容屬性的值,配上則調用平臺驅動的probe函數,并且將匹配上的平臺設備的結構體指針傳給設備函數。

優勢:

platform機制將本身的資源注冊進內核,由內核統一管理,在驅動程序中使用這些資源時通過platform_device提供的標準接口進行申請并使用。這樣提高了驅動和資源管理的獨立性,并且擁有較好的可移植性和安全性

9.異同點:

驅動運行于內核,應用程序再用戶空間;應用程序能調用C庫;應用程序順序執行,驅動被動的接受調用;應用程序的棧很大,驅動很小,通常4K;應用程序可以做浮點運算,驅動中很少做浮點運算。

10. 原理:mmap將一個文件或者其它對象映射進內存。文件被映射到多個頁上,如果文件的大小不是所有頁的大小之和,最后一個頁不被使用的空間將會清零。

作用:讓用戶程序直接訪問設備內存,在要求高性能的應用當中比較常用。應用程序使用的動態庫映射到這個區域;應用程序調用mmap,將設備物理地址和這個區域的虛擬內存進行映射;

上一篇:變量存儲類型 動態內存分配詳解

下一篇:樹的基本概念

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

回到頂部

主站蜘蛛池模板: 被多个强壮的黑人灌满精 | 自怕偷自怕亚洲精品 | 麻豆国产成人AV在线播放欲色 | 我趁老师睡觉偷偷的脱她内裤 | 午夜精品乱人伦小说区 | 久久久无码精品无码国产人妻丝瓜 | 久久久久无码精品国产情侣 | 精品无码久久久久久午夜福利 | 亚洲精品乱码久久久久久不卡 | 亚洲国产va精品久久久不卡综合 | 激情人妻绿帽王八系列 | 天天爽夜夜爽夜夜爽 | 日韩午夜伦伦午夜伦老司机 | 国产又色又爽又黄的视频在线观看 | 国产精品久久久影视青草 | 桃乃木香奈视频在线播放 | 在线不卡AV片免费观看 | 久久久久久无码精品无码国产人妻丝瓜 | 日本三级日产三级国产三级 | 亚洲中文字幕无码一区 | yw尤物av无码| 激情影院内射美女 | 中文字幕AV一区乱码 | 欧xxxx | 精品亚洲A∨无码一区二区三区 | 狠狠色噜噜狠狠狠狠777米奇 | 最新欧美一区二区 | 大胸美女被吃奶爽死视频 | 中文字幕日韩综合 | 激情五月开心综合亚洲 | 午夜中文字幕hd无码无删减 | 内射老妇女BBWXOGOD | 欧美日本免费无码永久 | 国产成人精品综合在线观看 | 成人区人妻精品一区二区三区 | 成人欧美一区二区三区A片 VIDEOS1080P内射少妇 | 在线观看高清黄网站免费 | 成人无码区免费A片视频国产解说 | 免费观看在线a级毛片 | 久久99精品久久久久久久不卡 | 自拍偷区亚洲综合美利坚 |