首页
/
每日頭條
/
圖文
/
openwrt閃存布局選擇
openwrt閃存布局選擇
更新时间:2024-05-02 09:04:44
DTS

DTS是Device Tree Source的縮寫,它用來描述設備的硬件細節。說簡單點就是開發闆的配置文件。

分析OpenWRT的dts文件

以rt5350.dtsi作為分析

//DTS格式有點類似Json / { // "/"表示root節點 //#address-cells和#size-cells分别決定reg屬性的address和length字段的長度。比如reg<0x500 0x100>,0x500和0x100兩個數值都是32位的 #address-cells = <1>; //地址長度為1個32位的整型 #size-cells = <1>; //length為1個32位的整型 //ralink:廠商 rt5350-soc:具體的芯片型号 compatible = "ralink,rt5350-soc"; //定義系統名稱,compatible屬性用于驅動和設備的綁定,屬性值形式:<manufacturer>,<model> cpus { //芯片中的所有cpu定義 cpu@0 { //cpu@0表示第一個cpu,如果還有其他cpu就依次定義為cpu@1 cpu@2 ..... compatible = "mips,mips24KEc"; //mips的cpu内核,mips24KEc是具體型号 }; }; chosen { bootargs = "console=ttyS0,57600"; //啟動參數,定義了串口ttyS0為調試串口,波特率為57600 }; cpuintc: cpuintc@0 { #address-cells = <0>; #interrupt-cells = <1>; //中斷号長度 interrupt-controller; compatible = "mti,cpu-interrupt-controller"; }; aliases { //定義别名 spi0 = &spi0; spi1 = &spi1; serial0 = &uartlite; //uartlite的别名為serial0 }; palmbus@10000000 { // @後面代表address compatible = "palmbus"; reg = <0x10000000 0x200000>; //address: 0x10000000 length:0x200000 ranges = <0x0 0x10000000 0x1FFFFF>; //地址轉換表 :<子地址 父地址 子地址空間的映射大小> #address-cells = <1>; //決定子節點reg的address字段長度 #size-cells = <1>; //決定子節點reg的length字段長度 sysc@0 { compatible = "ralink,rt5350-sysc", "ralink,rt3050-sysc"; //兼容rt5350和rt3050 reg = <0x0 0x100>; }; timer@100 { compatible = "ralink,rt5350-timer", "ralink,rt2880-timer"; reg = <0x100 0x20>; //在RT5350中,将GPIO設置為中斷方式,當它觸發中斷時,CPU的中斷控制器先獲取中斷,在這裡叫一級中斷。 //判斷它是GPIO中斷,然後進入GPIO中斷控制器判斷是哪個GPIO産生的中斷,這裡叫二級中斷,再進行中斷處理。 interrupt-parent = <&intc>; //當上級發生intc中斷時才來查詢是否是該中斷。 interrupts = <1>; //中斷等級 }; watchdog@120 { compatible = "ralink,rt5350-wdt", "ralink,rt2880-wdt"; reg = <0x120 0x10>; resets = <&rstctrl 8>; reset-names = "wdt"; interrupt-parent = <&intc>; interrupts = <1>; }; intc: intc@200 { compatible = "ralink,rt5350-intc", "ralink,rt2880-intc"; reg = <0x200 0x100>; resets = <&rstctrl 19>; reset-names = "intc"; interrupt-controller; #interrupt-cells = <1>; interrupt-parent = <&cpuintc>; interrupts = <2>; }; memc@300 { compatible = "ralink,rt5350-memc", "ralink,rt3050-memc"; reg = <0x300 0x100>; resets = <&rstctrl 20>; reset-names = "mc"; interrupt-parent = <&intc>; interrupts = <3>; }; uart@500 { compatible = "ralink,rt5350-uart", "ralink,rt2880-uart", "ns16550a"; reg = <0x500 0x100>; resets = <&rstctrl 12>; reset-names = "uart"; interrupt-parent = <&intc>; interrupts = <5>; reg-shift = <2>; status = "disabled"; }; gpio0: gpio@600 { compatible = "ralink,rt5350-gpio", "ralink,rt2880-gpio"; reg = <0x600 0x34>; resets = <&rstctrl 13>; reset-names = "pio"; interrupt-parent = <&intc>; interrupts = <6>; gpio-controller; #gpio-cells = <2>; ralink,gpio-base = <0>; ralink,num-gpios = <22>; ralink,register-map = [ 00 04 08 0c 20 24 28 2c 30 34 ]; }; gpio1: gpio@660 { compatible = "ralink,rt5350-gpio", "ralink,rt2880-gpio"; reg = <0x660 0x24>; interrupt-parent = <&intc>; interrupts = <6>; gpio-controller; #gpio-cells = <2>; ralink,gpio-base = <22>; ralink,num-gpios = <6>; ralink,register-map = [ 00 04 08 0c 10 14 18 1c 20 24 ]; status = "disabled"; //本模塊狀态 }; i2c@900 { compatible = "link,rt5350-i2c", "ralink,rt2880-i2c"; reg = <0x900 0x100>; resets = <&rstctrl 16>; reset-names = "i2c"; #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&i2c_pins>; status = "disabled"; }; spi0: spi@b00 { compatible = "ralink,rt5350-spi", "ralink,rt2880-spi"; reg = <0xb00 0x40>; resets = <&rstctrl 18>; reset-names = "spi"; #address-cells = <1>; #size-cells = <1>; pinctrl-names = "default"; pinctrl-0 = <&spi_pins>; status = "disabled"; }; spi1: spi@b40 { compatible = "ralink,rt5350-spi", "ralink,rt2880-spi"; reg = <0xb40 0x60>; resets = <&rstctrl 18>; reset-names = "spi"; #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&spi_cs1>; status = "disabled"; }; uartlite: uartlite@c00 { compatible = "ralink,rt5350-uart", "ralink,rt2880-uart", "ns16550a"; reg = <0xc00 0x100>; resets = <&rstctrl 19>; reset-names = "uartl"; interrupt-parent = <&intc>; interrupts = <12>; pinctrl-names = "default"; pinctrl-0 = <&uartlite_pins>; reg-shift = <2>; }; systick@d00 { compatible = "ralink,rt5350-systick", "ralink,cevt-systick"; reg = <0xd00 0x10>; interrupt-parent = <&cpuintc>; interrupts = <7>; }; }; pinctrl { //引腳控制 compatible = "ralink,rt2880-pinmux"; pinctrl-names = "default"; pinctrl-0 = <&state_default>; state_default: pinctrl0 { }; spi_pins: spi { spi { ralink,group = "spi"; ralink,function = "spi"; }; }; i2c_pins: i2c { i2c { ralink,group = "i2c"; ralink,function = "i2c"; }; }; phy_led_pins: phy_led { phy_led { ralink,group = "led"; ralink,function = "led"; }; }; uartlite_pins: uartlite { uart { ralink,group = "uartlite"; ralink,function = "uartlite"; }; }; uartf_pins: uartf { uartf { ralink,group = "uartf"; ralink,function = "uartf"; }; }; spi_cs1: spi1 { spi1 { ralink,group = "spi_cs1"; ralink,function = "spi_cs1"; }; }; }; rstctrl: rstctrl { compatible = "ralink,rt5350-reset", "ralink,rt2880-reset"; #reset-cells = <1>; }; usbphy: usbphy { compatible = "ralink,rt3352-usbphy"; #phy-cells = <1>; resets = <&rstctrl 22 &rstctrl 25>; reset-names = "host", "device"; }; ethernet@10100000 { compatible = "ralink,rt5350-eth"; reg = <0x10100000 0x10000>; resets = <&rstctrl 21 &rstctrl 23>; reset-names = "fe", "esw"; interrupt-parent = <&cpuintc>; interrupts = <5>; mediatek,switch = <&esw>; }; esw: esw@10110000 { compatible = "ralink,rt3050-esw"; reg = <0x10110000 0x8000>; resets = <&rstctrl 23>; reset-names = "esw"; interrupt-parent = <&intc>; interrupts = <17>; }; wmac@10180000 { compatible = "ralink,rt5350-wmac", "ralink,rt2880-wmac"; reg = <0x10180000 0x40000>; interrupt-parent = <&cpuintc>; interrupts = <6>; ralink,eeprom = "soc_wmac.eeprom"; }; ehci@101c0000 { compatible = "generic-ehci"; reg = <0x101c0000 0x1000>; phys = <&usbphy 1>; phy-names = "usb"; interrupt-parent = <&intc>; interrupts = <18>; }; ohci@101c1000 { compatible = "generic-ohci"; reg = <0x101c1000 0x1000>; phys = <&usbphy 1>; phy-names = "usb"; interrupt-parent = <&intc>; interrupts = <18>; }; };

OpenWRT串口的使用

以RT5350進行舉例: 1、進入openwrt/target/linux/ramips/dts目錄,打開rt5350.dtsi,即上面的文件。找到下面的内容:

openwrt閃存布局選擇(OpenWRT九DTS及串口)1

将紅色框框的内容去掉就使能了串口。

2、因為uart的配置在uartlite(調試串口)前面,所以uart會被初始化為ttyS0,而ttyS0之前卻被配置為調試串口。

openwrt閃存布局選擇(OpenWRT九DTS及串口)2

為了解決這個問題,我們将uart的配置放到uartlite後面就可以了!

openwrt閃存布局選擇(OpenWRT九DTS及串口)3

3、串口引腳之前被配置為普通IO口,所以為了防止幹擾需要把IO口中的配置去掉。打開openwrt/target/linux/ramips/dts/MPRA2.dts,找到下面内容 :

openwrt閃存布局選擇(OpenWRT九DTS及串口)4

把紅色框框的内容去掉。

4、重新編譯就OK了! 将編譯好的固件下載到開發闆後啟動系統後,在/dev/目錄下會多出ttyS1這個設備。這個就是我們添加的串口設備

喜歡這篇文章或者對你有幫助,歡迎點贊,分享,關注!!

更多精彩文章,歡迎關注微信公衆号"嵌入式軟件開發交流" !

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
喝什麼茶飲可以消除小肚腩
喝什麼茶飲可以消除小肚腩
簡要内容:小學生叫嚷着要減負,而女人一到夏天也會吵鬧着減腹因為肚腩問題,關系美麗、關系自信,甚至關系愛情!不過真正去抽脂、狠心去節食的畢竟是少數,“減腹”行動也不是一天可以完成。花點心思,一點點做起,可能比狠勁兒運動,忍耐美食更有效!肚腩小...
2024-05-02
人總要為自己的自作聰明買單
人總要為自己的自作聰明買單
有十全十美的人生,也沒有一無是處的人生。一個人一輩子,一生真的不長……一生省著,賺著,無論多摳,錢還是沒存夠;一生拼著,累著,無論多苦,事還是沒辦完;一生忍着,怕著,無論多小心,人還是得罪不少;一生摸索著,感悟著,無論多聰明,虧還是沒少吃。...
2024-05-02
心情詩詞文案
心情詩詞文案
夏天最開心的莫過于下雨的時候夏雨帶來清新涼爽當夏天的雨,落在了詩詞裡在詩人筆下,夏雨更帶來别樣的美麗不信,一起來看~《阮郎歸·初夏》宋代:蘇轼綠槐高柳咽新蟬。薰風初入弦。碧紗窗下水沉煙。棋聲驚晝眠。微雨過,小荷翻。榴花開欲然。玉盆纖手弄清泉...
2024-05-02
電子商務概念及特點
電子商務概念及特點
電子商務的概念與解釋學者、專家們的觀點:“通過電子方式,并在網絡基礎上實現物資,人員過程的協調,一遍商業交換活動”(Emmelhainz博士)“數據(資料)電子裝配線(ElectronicAssemblyLineofData)的橫向集”(J...
2024-05-02
華碩銳龍r5和r7有什麼區别
華碩銳龍r5和r7有什麼區别
1Extreme終在ROGX99系列爆發适逢IntelHaswell-E處理器及X99芯片組發布,我們有幸得見了改變巨大的華碩常規X99主闆系列的旗艦産品X99-DELUXE。白色的散熱片配上亞光黑色的PCB闆非常驚豔,而在不久前的文章中我...
2024-05-02
Copyright 2023-2024 - www.tftnews.com All Rights Reserved