linux 獲取設備樹源文件(dts)里描述的資源,Linux 獲取設備樹源文件(DTS)里描述的資源...

在linux使用platform_driver_register() 注冊? platform_driver 時, 需要在 platform_driver 的probe() 里面知道設備的中斷號, 內存地址等資源。

這些資源的描述信息存放在 resource 數據結構中, 相同的資源存放在一個樹形樹形數據結構中, 通過父節點, 兄弟節點, 子節點相連。 比如中斷資源, IO端口資源, IO內存資源, DMA資源有不同資源樹。

Linux使用 struct resource 來描述一個resouce

struct resource {

resource_size_t start;? ? ? //資源范圍的開始

resource_size_t end;? ? ? ? //資源范圍的結束

const char *name;? ?//資源擁有者名

unsigned long flags;?//資源屬性標識

struct resource *parent, *sibling, *child;? //資源樹的父節點, 兄弟節點, 字節點指針

};

resource_size_t 由系統決定 為uint32_t 或uint64_t 。

在platform機制里, 使用platform_get_resource()來獲取指定的資源類型。

比如獲取想獲取中斷號,

irq = platform_get_irq(pdev, 0);

int platform_get_irq(struct platform_device *dev, unsigned int num)

{

struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num);

return r ? r->start : -ENXIO;

}

EXPORT_SYMBOL_GPL(platform_get_irq);

platform_get_irq() 會返回一個start, 即可用的中斷號。

之后便可使用request_irq() 來注冊中斷服務函數。

再比如想要獲取IO內存資源:

struct resource *res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);

即可得到一個IO內存資源節點指針, 包括了地址的開始,結束地址等, 該IO內存的長度可用 resource_size() 來獲取, 但這段資源只是一個描述, 想真正使用這段IO內存, 還要經過先申請, 再映射的過程。例如可使用devm_request_mem_region()申請出使用這段IO內存, 再使用ioremap() 將其映射出來, 供用戶空間使用。

devm_request_mem_region(&pdev->dev, res_mem->start, resource_size(res_mem),

res_mem->name))

addr_start = ioremap(res_mem->start, resource_size(res_mem));

ioremap() 的返回值即為該資源的虛擬地址。

IO內存的資源是在設備樹源(Device Tree Source)文件(以.dts結尾)里給出的,.dts文件就是用來描述目標板硬件信息的, 在uboot啟動后, 使用uboot提供的特定API將其獲取出來, 如fdt_getprop(), fdt_path_offset(), 這些API包含在uboot 的頭文件 里面。

uboot將.dts文件里的描述解析出來, 再對相應寄存器賦值, 在linux啟動后, 使用? platform_get_resource() 即可獲取到這些給定的資源, 在驅動里使用。

例如一個在.dts文件中關于gpio資源的描述:

gpio: gpio-controller@1070000000800 {

#gpio-cells = <2>;

compatible = "cavium,octeon-3860-gpio";

reg = <0x10700 0x00000800 0x0 0x100>;

gpio-controller;

根據其描述, 可知道gpio控制器的IO內存起始地址為:0x107900000800, 長度為0x100.

即從 0x107900000800 到 0x1079000008ff.

在目標板里使用? cat /proc/iomem? 可以看到:

1070000000800-10700000008ff : /soc@0/gpio-controller@1070000000800

關于i2c 的描述:

twsi0: i2c@1180000001000 {

#address-cells = <1>;

#size-cells = <0>;

compatible = "cavium,octeon-3860-twsi";

reg = <0x11800 0x00001000 0x0 0x200>;

interrupts = <0 45>;

clock-rate = <100000>;

IO內存起始地址為: 0x118000001000, 長度為0x200.

從 0x118000001000 到 0x1180000011ff.

在目標板里使用? cat /proc/iomem? 可以看到:

1180000001000-11800000011ff : /soc@0/i2c@1180000001000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python無法安裝第三方庫read time out_解決pip install的時候報錯timed out的問題

安裝包的時候報錯&#xff0c;執行&#xff1a;pip install pyinstaller問題&#xff1a;File "c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py", line 357, in streamdata self.read(amtamt, decode_contentdecode_cont…

嵌入式linux文件系統類型,嵌入式Linux 的Cramfs 根文件系統配置的解決方案

當系統啟動并執行到系統初始化腳本/etc/init.d/rcS 時&#xff0c;mount 命令將/mnt/yaffs 目錄掛載 為ramfs 類型的隨機存儲文件系統&#xff0c;并在此文件系統上建立Qtopia 和Qtopia/tmp 目錄[5]&#xff0c; /Qtopia/tmp 目錄即為應用程序可能對文件系統進行寫操作的臨時文…

python nlp data_Python nlpaug包_程序模塊 - PyPI - Python中文網

NLPAUG這個python庫幫助您為機器學習項目增加nlp。訪問此簡介了解Data Augmentation in NLP。Augmenter是增廣的基本元素&#xff0c;而Flow是將多個增廣器組合在一起的管道。起動指南增強器TargetAugmenterActionDescriptionCharacterRandomAuginsertInsert character randoml…

Linux創始人數據結構,Linux 通用數據結構說明

device_driver include/linux/device.h struct device_driver {const char * name; /* 驅動名稱 */struct bus_type * bus; /* 總線類型 */struct completion unloaded; /* 卸載事件通知機制 */ struct kobject kobj; /* sys 中…

python在瀏覽器運行一片空白_Webdriver啟動Firefox瀏覽器后,頁面顯示空白

在使用pycharm碼代碼時編譯總是出錯&#xff0c;后來驗證發現瀏覽器啟動后出現問題。白白耗了我2個小時。我把我的解決方案寫出來&#xff0c;希望對大家有幫助。1.現象&#xff1a;起初安裝的時候總是能正常運行&#xff0c;有一天突然發現Webdriver打開fFirefox瀏覽器后&…

centos linux7修改主機名,CentOS7操作系統下永久修改主機名

操作系統&#xff1a;CentOS Linux release 7.8任務&#xff1a;修改主機名為sky9899操作步驟如下&#xff1a;[root146 ~]# hostname*.*.*.*.adsl-pool.jx.chinaunicom.com[root146 ~]# hostnamectlStatic hostname: localhost.localdomainTransient hostname: *.*.*.*.adsl-…

稀疏自編碼器_自編碼(AutoEncoder)模型及幾種擴展之二

4. 稀疏自編碼假設我們只有一個沒有類別標簽的訓練樣本集合{x(1),x(2)...},一個自編碼神經網絡就是一種非監督學習算法&#xff0c;它使用BP算法&#xff0c;并將目標值設為&#xff1a; y(i)x(i)。我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的激活…

linux x86 關機 過程,linux在x86上的中斷處理過程(詳細)

Linux在x86上的中斷處理過程一&#xff1a;引言在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執行完畢后才會發出中斷。例如除法運算中,除數為零的時候,就會產…

thymealf 高級用法_Thymeleaf

JSP 已經存在很長時間了&#xff0c;很多公司還在用&#xff0c;它看起來像 HTML&#xff0c;但其實并不是&#xff0c;它有一些缺陷。比如&#xff0c;每個頁面頂部都需要有如下聲明與 Servlet 規范緊密耦合的&#xff0c;依賴 Servlet 容器(意味著無法直接瀏覽效果)。工作過的…

linux 顯卡轉碼,ffmpeg用GPU轉碼

8種機械鍵盤軸體對比本人程序員&#xff0c;要買一個寫代碼的鍵盤&#xff0c;請問紅軸和茶軸怎么選&#xff1f;有些視頻編碼太屌&#xff0c;播放起來對CPU消耗巨大&#xff0c;而在電視上或者電視盒子上看視頻&#xff0c;編碼就需要合適&#xff0c;樓主用的FireTV Stick&a…

ant實例 jmeter_Jmeter+ant搭建環境

1.將jmeter3.3和ant1.9.6放在一個文件夾下2.配置環境a、安裝jdk&#xff0c;配置環境變量變量名&#xff1a; JAVA_HOME變量值&#xff1a; C:\Program Files\Java\jdk1.8.0_91 (即jdk安裝的位置)變量名&#xff1a; Path (這個變量名已在系統變量中存在&#xff0c;現只需在這…

c語言課程設計作業五子棋,C語言課程設計報告五子棋游戲課程設計

C語言課程設計報告五子棋游戲課程設計 C語言課程設計報告_五子棋游戲-課程設計C語言課程設計報告_五子棋游戲|c語言程序代碼編程小程序設計|c語言課程設計報告課程案例**********************************************************//* 本程序在Turbo C或Borland C下編譯通過 */…

sqlmap圖形化_Web安全:SQL注入工具

原標題&#xff1a;Web安全&#xff1a;SQL注入工具SQL注入工具主要是針對Web服務器后臺數據庫的注入&#xff0c;其主要目的是獲取數據庫中的數據。以前常用的SQL注入工具有啊D注入工具及Domain(明小子注入工具)&#xff0c;現在常用的SQL注入工具有HackBar、SQLMap、Pangolin…

在c語言程序中 對文件進行操作首先要,《C語言程序設計》試題八及答案

版權聲明&#xff1a;以上文章中所選用的圖片及文字來源于網絡以及用戶投稿&#xff0c;由于未聯系到知識產權人或未發現有關知識產權的登記&#xff0c;如有知識產權人并不愿意我們使用&#xff0c;如果有侵權請立即聯系&#xff1a;55525090qq.com&#xff0c;我們立即下架或…

vue中多行文本標簽_vue控制多行文字展開收起的實現示例

這里講一下&#xff0c;如何使用vue控制多行文字展開收起(也叫控制文字展開隱藏)。效果&#xff1a;這里設置了控制三行&#xff0c;如果超過三行會展示&#xff0c;“顯示更多” 超出文字顯示省略號。點擊“顯示更多”會展開所有文案&#xff0c;按鈕變成“收起”(未超出三行的…

c語言什么時候需要加分號,歸納一下html中什么時候需要分號什么時候需要冒

公告&#xff1a; 為響應國家凈網行動&#xff0c;部分內容已經刪除&#xff0c;感謝讀者理解。話題&#xff1a;歸納一下html中什么時候需要分號什么時候需要冒號什么時候問題詳情&#xff1a;最近初學html和php&#xff0c;弄暈了回答&#xff1a;一般情況下&#xff0c;HTML…

python wheel使用_【轉載】Python,使用Wheel打包

轉載自&#xff1a; http://blog.sina.com.cn/s/blog_1318255b00102wbtz.htmlPython的第一個主流打包格式是.egg文件&#xff0c;現在大家庭中又有了一個叫做Wheel(*.whl)的新成員。wheel“被設計成包含PEP 376兼容安裝(一種非常接近于磁盤上的格式)的所有文件”。在本文中&…

c語言提取七位數講解,C語言-體育彩票7位數,感受身中500萬的fell

//體育彩票7位數&#xff0c;感受身中500萬的fell#include #include #include #include //用到隨機數函數#include int main(){int iUser[7]; //保存我們購買彩票的號碼int iSys[7];//保存開獎的號碼int i, j;int count 0;//保存我們中獎號碼的個數//srand((unsigned)time(0…

cuda linux編譯器_linux下如何編譯CUDA+QT(qtcreator下)

具體操作&#xff0c;修改qt項目配置文件pro&#xff0c;在配置后面加入如下代碼&#xff0c;我們就實現了qtcuda的交叉編譯。# 讓你的項目可以看到后綴cu的cuda代碼文件OTHER_FILES ./Bll/ImageReconstruction/Cuda/CudaFDK.cu \./Bll/ImageReconstruction/Cuda/CudaFDK_ker…

linux的sonar安裝,Linux安裝sonar

前置依賴? mysql 5.6 or 5.7? jdk 1.81.下載2.安裝unzip并解壓sonarqube并移動到/usr/localyum install unzipunzip sonarqube-6.7.4.zipmv sonarqube-6.7.4 /usr/local/3.mysql里新增數據庫CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;4.修改sonarqube相應的配置vim …