首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 其他 > openwrt闪存布局选择(OpenWRT九DTS及串口)
openwrt闪存布局选择(OpenWRT九DTS及串口)
更新时间:2024-07-07 13:09:01
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这个设备。这个就是我们添加的串口设备

喜欢这篇文章或者对你有帮助,欢迎点赞,分享,关注!!

更多精彩文章,欢迎关注微信公众号"嵌入式软件开发交流" !

,
相关推荐RECOMMEND
碳酸钡和盐酸反应
碳酸钡和盐酸反应生成氢氧化铜蓝色沉淀和氯化钙。反应现象:固体逐渐消失,生成能使澄清石灰水变浑浊的气体,产生蓝色沉淀。生成的氢氧化铜微毒,用作分析试剂,还用于医药、农药等。可作为催化剂、媒染剂、颜料、饲...
月晕代表什么预兆
1、根据中国古老的说法“因为灵魂升天,升天时也就把你的愿望带给上帝了,而那些愿望念力非常强大的人,会...
哪些材料的衣服不能用水洗呢
打开每件衣服的里面的右下角都会有一个白色的洗水唛,上面会有洗涤说明。还有买衣服的吊牌上也有洗涤说明。一般羽绒、皮衣都不适合水洗。1、衣服上有洗标,最好按照洗标去洗。如果没有标签的如羊毛、沙质、绸子、有...
检察机关与监察机关有什么不同
两者的级别及职能不同。检察机关是代表国家依法行使检察权的国家机关,其主要职责是追究刑事责任,提起公诉和实施法律监督。人民检察院是国家法律监督机关,由同级人民代表大会产生,向人民代表大会负责并报告工作。...
一碧干里是成语吗
一碧千里,意思是一眼望去全部都是绿色,指很大的范围内都是碧绿的颜色,主要用来形容田野,湖泊,草原等。例句:1、站在茫茫的大草原上,往天边望去,一碧千里。2、天底下,草原一碧千里,而并不茫茫。3、翠色欲...
王者荣耀情侣名字
王者荣耀情侣名有陌上人如玉、公子世无双;左手边、右手边;你总让我乖、你却没有乖;灿烂的烟花、绚丽的烟火;高冷帅、傲娇酷;酷够味、浪够野;满眼星光、满眼月亮;怪我闹、你要乖;心里想着你、嘴里念着你;亡屿...