只是目前介紹fdt或者open firmware的中文資料欠缺,這裡記錄我領悟的關於pci匯流排樹部分的ranges引數。
pci0: pci@e0008500 ;
這是乙個mpc8379的dts配置檔案,一些屬性還是很好理解,
pci@e0008500說明這個pci控制器的暫存器對映基位址為e0008500
reg = <0xe0008500 0x100 /* internal registers */
0xe0008300 0×8>; /* config space access registers */
再次證明,pci控制器的暫存器對映基位址為e0008500,讀取配置空間使用的暫存器對映基址為0xe0008300,後面是長度,8個位元組。即cfg_addr和cfg_data這兩個暫存器。
最最費解的是ranges,用來描述cpu位址空間和pci位址空間的對映關係。
對於e300核心來說,一組配置由6個32位16進製制組成。
ranges =
<0×02000000 0×0 0×90000000 0×90000000 0×0 0×10000000
0×42000000 0×0 0×80000000 0×80000000 0×0 0×10000000
0×01000000 0×0 0×00000000 0xe0300000 0×0 0×00100000>;
這裡有3組,開頭的第乙個32位數表明對映的位址的屬性。0x01000000是io對映,0x02000000是記憶體對映,0x42000000也是記憶體對映,支援預取。
第2-3個雙字表示pci匯流排的位址空間,用2個雙字因為pci匯流排可能是支援64位定址的。
第4個雙字表示放cpu_address ,即cpu儲存器域位址空間,是cpu定址的空間。e300是32位cpu,如果是e500核心,則需要2個雙字了。
第5-6個雙字表示對映長度
核心啟動訊息裡顯示
mpc837x_rdb_setup_arch()
found fsl pci host bridge at 0x00000000e0008500. firmware bus number: 0->0
pci host bridge /pci@e0008500 (primary) ranges:
mem 0×0000000090000000..0x000000009fffffff -> 0×0000000090000000
mem 0×0000000080000000..0x000000008fffffff -> 0×0000000080000000 prefetch
io 0x00000000e0300000..0x00000000e03fffff -> 0×0000000000000000
正好與之匹配。
分配配置空間要注意cpu儲存器域位址空間,不要跟其他裝置的cpu儲存器域位址空間重複。
PCI匯流排和PXI匯流排的區別
pci技術 應該叫匯流排 1992年intel 推出創立 pci規範到如今,pci匯流排已成為了事實上計算機的標準匯流排。請看 pci技術規格簡介 pxi技術 1997年,美國國家儀器中國 national instruments 為測試和測量應用提出了乙個全新的解決方案 pxi pci exten...
PCI匯流排的學習與理解
1.基本概念 儲存器域 包含cpu域 和 dram域,cpu域邊界 cpu所能控制的資料完整性邊界,邊界由 memory 指令的作用範圍確定。2.不同位址域間的資料交換 儲存器訪問pci匯流排域位址空間 首先訪問儲存域的位址空間,在通過host主橋將儲存器位址轉換為pci匯流排位址,之後就可以進行資...
pci匯流排定時協議 汽車匯流排測試的「解憂雜貨店」
我的回答之所以發揮了作用,原因不是別的,是因為大家自己很努力。東野圭吾 解憂雜貨店 相信很多讀者都看過東野圭吾的書 解憂雜貨店 或者同名電影,裡面有不同的諮詢者通過寫信投入解憂雜貨店的信箱,後面都會得到相應的解答,中間採用了超越時空的解答方式也讓不少讀者津津樂道。本文結合不同 諮詢者 共同關注的汽車...