最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

手把手教你Linux字符設備驅(qū)動實例

2023-02-13 16:03 作者:補給站Linux內(nèi)核  | 我要投稿

globalmem

看?linux 設備驅(qū)動開發(fā)詳解時,字符設備驅(qū)動一章,寫的測試代碼和應用程序,加上自己的操作,對初學者我覺得非常有幫助。

寫這篇文章的原因是因為我看了我之前發(fā)表的文章,還沒有寫過字符設備相關的,至于里面提到的結構體的作用,有很多詳細的文章說明,我就不做更深的敘述。

代碼在github上,點擊下面閱讀原文可以直達

https://github.com/weiqifa0/globalmem/blob/main/README.md

把這部分放在github上也有好處,后續(xù)可以增加刪除一些東西,以后自己需要使用的時候也方便許多。


我們討論字符設備驅(qū)動,就有必要知道他的結構體和頭文件,像一些后來的封裝什么的,大部分還是脫離不了操作這個結構體里面的東西。


加載內(nèi)核模塊insmod globalmem.ko 錯誤需要的修改。

insmod: can't insert 'globalmem.ko': Device or resource busy


出錯的原因:

模塊使用的是靜態(tài)分配設備號的方式,而這個設備號已經(jīng)被系統(tǒng)中的其他設備所占用。查看未被占用的設備號,需要到pro/devices下面去查看。

查看設備號的方法:

# cat /proc/devices


【文章福利】小編推薦自己的Linux內(nèi)核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ?


編譯內(nèi)核版本

加載模塊之后使用lsmod查看模塊

創(chuàng)建設備文件節(jié)點

使用mknod創(chuàng)建設備節(jié)點的時候,后面跟上的參數(shù)需要跟我們在/proc/devices下面看到的對應,也就是我們在驅(qū)動里面申請的主設備號。

使用命令讀寫設備文件

Linux 下的 echo 和cat 命令是十分有用,這兩個命令可以讓在不寫代碼的情況下就可以完成調(diào)試讀寫設備。

通過代碼來讀寫設備文件

代碼在下面閱讀原文的鏈接里面。

使用傳入?yún)?shù)設置主設備號

內(nèi)核模塊參數(shù)我覺得是一個比較冷門的知識點,冷門的原因是因為我們在做項目的時候很少使用這個參數(shù),但是實際上這個參數(shù)非常有用。

我們可以把內(nèi)核模塊當做main函數(shù),main函數(shù)是可以接收傳參的,內(nèi)核模塊也可以在加載的時候接收傳入的參數(shù)。

如下是把主設備號傳給內(nèi)核模塊,但是需要注意,這個主設備號不能被占用了。

增加自動創(chuàng)建設備節(jié)點的驅(qū)動文件

每次手動創(chuàng)建設備文件節(jié)點總是很麻煩,而且在實際編寫設備驅(qū)動的時候,不會出現(xiàn)自己手動創(chuàng)建設備節(jié)點這種低端的操作。

當然了,聰明的內(nèi)核提供了接口讓我們在注冊驅(qū)動的時候也把設備文件節(jié)點注冊上去。

具體代碼可以查看globalmem2.c里面的代碼。

使用lseek操作文件位置

具體對應的文件是app-main2.c


原文作者:嵌入式Linux


手把手教你Linux字符設備驅(qū)動實例的評論 (共 條)

分享到微博請遵守國家法律
丹东市| 南漳县| 屏山县| 海安县| 常州市| 三原县| 武清区| 绥中县| 墨玉县| 屏南县| 金溪县| 石林| 慈利县| 永福县| 右玉县| 三原县| 雷州市| 孟津县| 政和县| 顺昌县| 绍兴县| 新安县| 临洮县| 大埔县| 池州市| 鲁山县| 麦盖提县| 苏州市| 信阳市| 泰和县| 项城市| 金阳县| 义乌市| 镇沅| 咸丰县| 河池市| 公安县| 南澳县| 武乡县| 岳阳市| 万全县|