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

歡迎光臨散文網(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ā)篇的評論 (共 條)

分享到微博請遵守國家法律
佳木斯市| 图木舒克市| 五大连池市| 静海县| 多伦县| 哈巴河县| 屯留县| 长海县| 靖江市| 新野县| 罗甸县| 永和县| 昔阳县| 扎赉特旗| 农安县| 扎兰屯市| 沁源县| 丰顺县| 高青县| 通城县| 商河县| 浦城县| 九江县| 潍坊市| 安泽县| 洛扎县| 息烽县| 新野县| 广德县| 怀安县| 子洲县| 鄂州市| 阜城县| 屯昌县| 汪清县| 民勤县| 上饶市| 凉山| 沅陵县| 万全县| 清徐县|