国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

正點原子【第四期】手把手教你學(xué) Linux之驅(qū)動開發(fā)篇

2023-07-16 01:11 作者:怯默吾聲  | 我要投稿

ARM裸機(jī)開發(fā),基本就是使能對應(yīng)時鐘,設(shè)置管腳復(fù)用,設(shè)置高低電平。

對于linux則是使用linux的各種框架實現(xiàn)功能開發(fā)。

MCU對端口操作,也有固定流程。

使能時鐘

設(shè)置IO復(fù)用

設(shè)置屬性,比如輸入還是輸出

輸出什么,高低電平等等。

而寫linux時,這些功能都是直接調(diào)用。

linux提供了GPIO,I2C,SPI等等的操作函數(shù),設(shè)置屬性,直接調(diào)用,給出讀寫的數(shù)據(jù),地址等等。

但是寫的時候,需要滿足一個驅(qū)動框架。

最終表現(xiàn)為/dev/xxx文件。

對其就有打開,關(guān)閉,讀寫等等。上層應(yīng)用就是使用這些操作來操作設(shè)備。

--------------------------------------------------------------------

字符設(shè)備是不定長的字符(流)讀寫。

塊設(shè)備不按指定的順序訪問,基本絕大多數(shù)存儲設(shè)備都屬于此。

(彈幕中一個很有意思的看法,分類應(yīng)該是有區(qū)分作用,這種可以同時屬于兩個的應(yīng)該是屬性)

--------------------------------------------------------------------------

字符設(shè)備開發(fā):

為了完成開發(fā),需要開發(fā)驅(qū)動 和 一個簡單的應(yīng)用。這樣才能測試。

單片機(jī)中,應(yīng)用驅(qū)動都雜糅在一起。但是linux中是完全分開的。

-----------

在虛擬的內(nèi)存中,用戶空間是0-3G,內(nèi)核空間是3G-4G。

應(yīng)用程序想訪問內(nèi)核資源,只有三種方法,系統(tǒng)調(diào)用,異常和陷入。后面兩個有時也叫硬件中斷和軟件中斷。其中主要就是用系統(tǒng)調(diào)用。

而系統(tǒng)調(diào)用,也不是直接通過調(diào)用,而是通過語言自帶的API函數(shù)來進(jìn)行系統(tǒng)調(diào)用。比如POSIX,API和C的庫函數(shù)等。

比如UNIX類操作系統(tǒng),最長用的一個編程接口就是POSIX。

比如,程序使用open函數(shù),打開一個設(shè)備文件,就是通過C庫調(diào)用。

------------------

應(yīng)用里調(diào)用C庫中的open函數(shù),這個open函數(shù)又調(diào)用系統(tǒng)中的一個可以實現(xiàn)文件打開的函數(shù)。這樣在系統(tǒng)和編程接口中間,加了一層C庫封裝,可以實現(xiàn)一致的編程體驗。

----------------------------------

比如:

__NR_這些就是一些系統(tǒng)調(diào)用函數(shù),那些數(shù)字就是系統(tǒng)調(diào)用號。

實際的調(diào)用方式是“陷入”,也就是軟中斷,進(jìn)入內(nèi)核,然后使用系統(tǒng)調(diào)用號來調(diào)用對應(yīng)的功能。

----------------------------------------------

一切皆文件。應(yīng)用程序調(diào)用open函數(shù)打開一個設(shè)備。比如LED。

對這個文件,有read和write操作。

用write 函數(shù)向/dev/led寫數(shù)據(jù)。比如寫1表示打開,寫0表示關(guān)閉。

關(guān)閉設(shè)備,則是使用close函數(shù)。

--------------------------------------------------

編寫驅(qū)動的時候,需要編寫驅(qū)動對應(yīng)的open,close,write,read函數(shù)。

有一個文件file_operations結(jié)構(gòu)體描述了對于字符設(shè)備的所有操作集合,不過未必需要全部實現(xiàn),常用的就是上面幾個。

驅(qū)動最終是被應(yīng)用調(diào)用。

------------------------------------------------------------

字符設(shè)備驅(qū)動框架:

file_operations結(jié)構(gòu)體 在 /include/linux/fs.h中定義。

可以看到llseek,read,write等指針。




正點原子【第四期】手把手教你學(xué) Linux之驅(qū)動開發(fā)篇的評論 (共 條)

分享到微博請遵守國家法律
富裕县| 鸡东县| 河曲县| 曲靖市| 南乐县| 桦甸市| 资溪县| 祁东县| 浦北县| 大洼县| 太仓市| 丹阳市| 股票| 平陆县| 景德镇市| 黄冈市| 湖北省| 黎城县| 南涧| 额尔古纳市| 新巴尔虎右旗| 西藏| 左贡县| 璧山县| 三明市| 东乌珠穆沁旗| 达孜县| 黄梅县| 罗源县| 迁安市| 麻栗坡县| 安丘市| 通道| 慈利县| 天镇县| 阿拉尔市| 竹溪县| 正蓝旗| 泸溪县| 托克托县| 奉贤区|