成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 設(shè)備和驅(qū)動(dòng)的相遇

系統(tǒng) Linux
所謂設(shè)備信息集合,就是根據(jù)不同的外設(shè)尋找各自的外設(shè)信息,我們知道一個(gè)完整的開發(fā)板有 CPU 和各種控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等),CPU 和控制器可以統(tǒng)稱為 SOC,除此之外還有各種外設(shè) IP,如 LCD、HDMI、SD、CAMERA 等。

 [[355454]]

本文轉(zhuǎn)載自微信公眾號(hào)「人人都是極客」,作者布道師Peter 。轉(zhuǎn)載本文請(qǐng)聯(lián)系人人都是極客公眾號(hào)。  

一個(gè)開發(fā)板

這一節(jié)結(jié)合設(shè)備信息集合的詳細(xì)講解來認(rèn)識(shí)一下設(shè)備和驅(qū)動(dòng)是如何綁定的。所謂設(shè)備信息集合,就是根據(jù)不同的外設(shè)尋找各自的外設(shè)信息,我們知道一個(gè)完整的開發(fā)板有 CPU 和各種控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等),CPU 和控制器可以統(tǒng)稱為 SOC,除此之外還有各種外設(shè) IP,如 LCD、HDMI、SD、CAMERA 等,如下圖:

我們看到一個(gè)開發(fā)板有很多的設(shè)備,這些設(shè)備是如何一層一層展開的呢?設(shè)備和驅(qū)動(dòng)又是如何綁定的呢?我們帶著這些疑問進(jìn)入本節(jié)的主題。

各級(jí)設(shè)備的展開

內(nèi)核啟動(dòng)的時(shí)候是一層一層展開地去尋找設(shè)備,設(shè)備樹之所以叫設(shè)備樹也是因?yàn)樵O(shè)備在內(nèi)核中的結(jié)構(gòu)就像樹一樣,從根部一層一層的向外展開,為了更形象的理解來看一張圖:

大的圓圈中就是我們常說的 soc,里面包括 CPU 和各種控制器 A、B、I2C、SPI,soc 外面接了外設(shè) E 和 F。IP 外設(shè)有具體的總線,如 I2C 總線、SPI 總線,對(duì)應(yīng)的 I2C 設(shè)備和 SPI 設(shè)備就掛在各自的總線上,但是在 soc 內(nèi)部只有系統(tǒng)總線,是沒有具體總線的。

第一節(jié)中講了總線、設(shè)備和驅(qū)動(dòng)模型的原理,即任何驅(qū)動(dòng)都是通過對(duì)應(yīng)的總線和設(shè)備發(fā)生聯(lián)系的,故雖然 soc 內(nèi)部沒有具體的總線,但是內(nèi)核通過 platform 這條虛擬總線,把控制器一個(gè)一個(gè)找到,一樣遵循了內(nèi)核高內(nèi)聚、低耦合的設(shè)計(jì)理念。下面我們按照 platform 設(shè)備、i2c 設(shè)備、spi 設(shè)備的順序探究設(shè)備是如何一層一層展開的。

1.展開 platform 設(shè)備

上圖中可以看到紅色字體標(biāo)注的 simple-bus,這些就是連接各類控制器的總線,在內(nèi)核里即為 platform 總線,掛載的設(shè)備為 platform 設(shè)備。下面看下 platform 設(shè)備是如何展開的。

還記得上一節(jié)講到在內(nèi)核初始化的時(shí)候有一個(gè)叫做 init_machine() 的回調(diào)函數(shù)嗎?如果你在板級(jí)文件里注冊(cè)了這個(gè)函數(shù),那么在系統(tǒng)啟動(dòng)的時(shí)候這個(gè)函數(shù)會(huì)被調(diào)用,如果沒有定義,則會(huì)通過調(diào)用 of_platform_populate() 來展開掛在“simple-bus”下的設(shè)備,如圖(分別位于 kernel/arch/arm/kernel/setup.c,kernel/drivers/of/platform.c):

這樣就把 simple-bus 下面的節(jié)點(diǎn)一個(gè)一個(gè)的展開為 platform 設(shè)備。

2.展開 i2c 設(shè)備

有經(jīng)驗(yàn)的小伙伴知道在寫 i2c 控制器的時(shí)候肯定會(huì)調(diào)用 i2c_register_adapter() 函數(shù),該函數(shù)的實(shí)現(xiàn)如下(kernel/drivers/i2c/i2c-core.c):

注冊(cè)函數(shù)的最后有一個(gè)函數(shù) of_i2c_register_devices(adap),實(shí)現(xiàn)如下:

of_i2c_register_devices()函數(shù)中會(huì)遍歷控制器下的節(jié)點(diǎn),然后通過of_i2c_register_device()函數(shù)把 i2c 控制器下的設(shè)備注冊(cè)進(jìn)去。

3.展開 spi 設(shè)備

spi 設(shè)備的注冊(cè)和 i2c 設(shè)備一樣,在 spi 控制器下遍歷 spi 節(jié)點(diǎn)下的設(shè)備,然后通過相應(yīng)的注冊(cè)函數(shù)進(jìn)行注冊(cè),只是和 i2c 注冊(cè)的 api 接口不一樣,下面看一下具體的代碼(kernel/drivers/spi/spi.c):

當(dāng)通過 spi_register_master 注冊(cè) spi 控制器的時(shí)候會(huì)通過 of_register_spi_devices 來遍歷 spi 總線下的設(shè)備,從而注冊(cè)。這樣就完成了 spi 設(shè)備的注冊(cè)。

各級(jí)設(shè)備的展開

學(xué)到這里相信應(yīng)該了解設(shè)備的硬件信息是從設(shè)備樹里獲取的,如寄存器地址、中斷號(hào)、時(shí)鐘等等。接下來我們一起看下這些信息在設(shè)備樹里是怎么記錄的,為下一節(jié)動(dòng)手定制開發(fā)板做好準(zhǔn)備。

1.reg 寄存器

我們先看設(shè)備樹里的 soc 描述信息,紅色標(biāo)注的代表著寄存器地址用幾個(gè)數(shù)據(jù)量來表述,綠色標(biāo)注的代表著寄存器空間大小用幾個(gè)數(shù)據(jù)量來表述。圖中的含義是中斷控制器的基地址是 0xfec00000,空間大小是 0x1000。如果 address-cells 的值是 2 的話表示需要兩個(gè)數(shù)量級(jí)來表示基地址,比如寄存器是 64 位的話就需要兩個(gè)數(shù)量級(jí)來表示,每個(gè)代表著 32 位的數(shù)。

2.ranges 取值范圍

ranges 代表了 local 地址向 parent 地址的轉(zhuǎn)換,如果 ranges 為空的話代表著與 cpu 是 1:1 的映射關(guān)系,如果沒有 range 的話表示不是內(nèi)存區(qū)域。

 

責(zé)任編輯:武曉燕 來源: 人人都是極客
相關(guān)推薦

2017-02-10 15:32:47

2017-11-06 17:16:55

Linux設(shè)備驅(qū)動(dòng)并發(fā)控制

2023-05-15 08:58:41

塊設(shè)備驅(qū)動(dòng)Linux

2021-11-29 07:55:45

Linux GPIO Linux 系統(tǒng)

2017-11-16 14:46:58

Linuxplatform總線驅(qū)動(dòng)設(shè)備

2023-05-12 07:27:24

Linux內(nèi)核網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)

2022-05-10 08:49:46

設(shè)備驅(qū)動(dòng)Linux

2016-12-15 14:55:31

Linux定時(shí)延時(shí)

2009-12-23 13:17:36

Linux設(shè)備驅(qū)動(dòng)

2011-01-10 18:21:38

linux編寫程序

2016-11-11 13:07:18

LinuxWindows設(shè)備驅(qū)動(dòng)模型

2021-04-12 12:00:13

Linux運(yùn)維Linux系統(tǒng)

2009-12-07 09:39:04

Linux設(shè)備驅(qū)動(dòng)硬件通信

2022-01-17 11:50:38

Linux CPULinux 系統(tǒng)

2010-07-19 10:05:52

ibmdwLinux

2017-03-01 16:40:12

Linux驅(qū)動(dòng)技術(shù)設(shè)備阻塞

2017-11-07 20:12:05

Linux音頻設(shè)備ALSA

2021-11-16 06:55:36

Linux字符設(shè)備

2018-11-26 08:45:29

Linux驅(qū)動(dòng)程序命令

2025-04-11 08:35:00

漏洞網(wǎng)絡(luò)安全終端安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本xx视频免费观看 | 国产精品 亚洲一区 | 精品欧美一区二区三区精品久久 | 在线观看中文字幕 | 国产黄色在线 | 爱爱视频在线观看 | 国产精品毛片一区二区在线看 | 国产精品久久国产精品 | 日韩在线91 | 完全免费在线视频 | 四虎国产| 九九99精品 | 在线观看国产 | 综合久久久久久久 | 国产精品av久久久久久久久久 | av毛片| 亚洲第一成人影院 | 日本午夜在线视频 | 免费在线观看av | 国产欧美一区二区三区日本久久久 | 日韩激情在线 | 亚洲一区 中文字幕 | 国产精品久久久久久久久久三级 | www亚洲精品| 黄色激情毛片 | 婷婷综合色 | 成人久久久 | 粉色午夜视频 | 日韩成人在线免费观看 | 免费观看黄色片视频 | 九一视频在线观看 | 国产乱码精品1区2区3区 | www.一区二区三区 | 国产电影一区二区 | 做a视频| 亚洲成av人影片在线观看 | 在线中文字幕av | 久久久久久久久99精品 | 在线观看成人免费视频 | 一级片视频免费观看 | 精品一区二区三区在线观看 |