|
本帖最后由 dato 于 2019-4-9 16:28 编辑
最近买了个4G便携路由,配置为mtk7620+8G 闪存+64M 内存+tf卡支持+仅usb供电+5200ma。虽然内存才64M,但由于有zram-swap跑个softether还是没问题的。tf卡空间理论上还是能扩展,但这点内存跑起来够呛。这要是个128M内存 16M闪存的硬件就完美了。当然作为4G路由它已经合格了。
https://item.taobao.com/item.htm?id=565142869705
卖家提供的DTS直接可以在cc 15.05.1合成固件,虽然指示灯不正常,但至少网口能驱动。只是这个版本太古老,似乎要打补丁才能支持EC20 4G模块。自从15.05.1版本以后就不知道如何通过imagebuilder来快速改动.dts,虽然网上有篇DTS support in imagebuilder,按他的方法并不成功,但是从源码编译还是可以随时修改.dts。
在将15.05.1的dts覆盖18.06.2版本以后,指示灯不正常连带网口也不正常,还有一些以前从来没见过的生成dtb错误,但对EC20的支持完美什么补丁都不需要打。求助卖家提供dts无效,今天终于东拼西凑把固件里的dts反编译出来,希望能帮到晚来的朋友。
1,原厂备份
root@G4:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00030000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00010000 00010000 "factory"
mtd3: 00010000 00010000 "backup"
mtd4: 00010000 00010000 "bdinfo"
mtd5: 00790000 00010000 "firmware"
mtd6: 0012215e 00010000 "kernel"
mtd7: 0066dea2 00010000 "rootfs"
mtd8: 00210000 00010000 "rootfs_data"
dd if=/dev/mtd0 | gzip > /tmp/u-boot.gz
dd if=/dev/mtd1 | gzip > /tmp/u-boot-env.gz
dd if=/dev/mtd2 | gzip > /tmp/factory.gz
dd if=/dev/mtd3 | gzip > /tmp/backup.gz
dd if=/dev/mtd4 | gzip > /tmp/bdinfo.gz
dd if=/dev/mtd5 | gzip > /tmp/firmware.gz
dd if=/dev/mtd6 | gzip > /tmp/kernel.gz
dd if=/dev/mtd7 | gzip > /tmp/rootfs.gz
dd if=/dev/mtd8 | gzip > /tmp/rootfs_data.gz
2,安装binwalk
通过binwalk -Me firmware 解出原始固件,注意是否有个叫40的文件
3,将40下载通过16进制编缉软件ultraedit,
将包含"OWRTDTB:"字符串之前的内容右击剪切,将dts内容后面的空白部分(此例为gpio-export,output....)到文件末尾右击剪切,这样就只剩下dtb文件
保存。
4,通过dtc -I dtb -O dts -o a.dts a.dtb
获得最终的a.dts文件
参考文档
DTS support in imagebuilder
https://forum.openwrt.org/t/dts-support-in-imagebuilder/12320
Finding power switch GPIO/ testing all possible GPIO
https://forum.openwrt.org/t/finding-power-switch-gpio-testing-all-possible-gpio/16787
openwrt: patch-dtb
https://www.cnblogs.com/sammei/p/3977848.html
*2019年04月09日星期二
- 生成文档
- /dts-v1/;
- / {
- #address-cells = <0x1>;
- #size-cells = <0x1>;
- compatible = "OEM,MT7620", "ralink,mt7620a-soc";
- model = "R3";
- cpus {
- cpu@0 {
- compatible = "mips,mips24KEc";
- };
- };
- chosen {
- bootargs = "console=ttyS0,115200";
- };
- cpuintc@0 {
- #address-cells = <0x0>;
- #interrupt-cells = <0x1>;
- interrupt-controller;
- compatible = "mti,cpu-interrupt-controller";
- linux,phandle = <0x3>;
- phandle = <0x3>;
- };
- aliases {
- spi0 = "/palmbus@10000000/spi@b00";
- spi1 = "/palmbus@10000000/spi@b40";
- serial0 = "/palmbus@10000000/uartlite@c00";
- };
- palmbus@10000000 {
- compatible = "palmbus";
- reg = <0x10000000 0x200000>;
- ranges = <0x0 0x10000000 0x1fffff>;
- #address-cells = <0x1>;
- #size-cells = <0x1>;
- sysc@0 {
- compatible = "ralink,mt7620a-sysc", "ralink,rt3050-sysc";
- reg = <0x0 0x100>;
- };
- timer@100 {
- compatible = "ralink,mt7620a-timer", "ralink,rt2880-timer";
- reg = <0x100 0x20>;
- interrupt-parent = <0x1>;
- interrupts = <0x1>;
- };
- watchdog@120 {
- compatible = "ralink,mt7620a-wdt", "ralink,rt2880-wdt";
- reg = <0x120 0x10>;
- resets = <0x2 0x8>;
- reset-names = "wdt";
- interrupt-parent = <0x1>;
- interrupts = <0x1>;
- };
- intc@200 {
- compatible = "ralink,mt7620a-intc", "ralink,rt2880-intc";
- reg = <0x200 0x100>;
- resets = <0x2 0x13>;
- reset-names = "intc";
- interrupt-controller;
- #interrupt-cells = <0x1>;
- interrupt-parent = <0x3>;
- interrupts = <0x2>;
- linux,phandle = <0x1>;
- phandle = <0x1>;
- };
- memc@300 {
- compatible = "ralink,mt7620a-memc", "ralink,rt3050-memc";
- reg = <0x300 0x100>;
- resets = <0x2 0x14>;
- reset-names = "mc";
- interrupt-parent = <0x1>;
- interrupts = <0x3>;
- };
- uart@500 {
- compatible = "ralink,mt7620a-uart", "ralink,rt2880-uart", "ns16550a";
- reg = <0x500 0x100>;
- resets = <0x2 0xc>;
- reset-names = "uart";
- interrupt-parent = <0x1>;
- interrupts = <0x5>;
- reg-shift = <0x2>;
- status = "disabled";
- };
- gpio@600 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x600 0x34>;
- resets = <0x2 0xd>;
- reset-names = "pio";
- interrupt-parent = <0x1>;
- interrupts = <0x6>;
- gpio-controller;
- #gpio-cells = <0x2>;
- ralink,gpio-base = <0x0>;
- ralink,num-gpios = <0x18>;
- ralink,register-map = [00 04 08 0c 20 24 28 2c 30 34];
- status = "okay";
- linux,phandle = <0x11>;
- phandle = <0x11>;
- };
- gpio@638 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x638 0x24>;
- interrupt-parent = <0x1>;
- interrupts = <0x6>;
- gpio-controller;
- #gpio-cells = <0x2>;
- ralink,gpio-base = <0x18>;
- ralink,num-gpios = <0x10>;
- ralink,register-map = [00 04 08 0c 10 14 18 1c 20 24];
- status = "okay";
- linux,phandle = <0x12>;
- phandle = <0x12>;
- };
- gpio@660 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x660 0x24>;
- interrupt-parent = <0x1>;
- interrupts = <0x6>;
- gpio-controller;
- #gpio-cells = <0x2>;
- ralink,gpio-base = <0x28>;
- ralink,num-gpios = <0x20>;
- ralink,register-map = [00 04 08 0c 10 14 18 1c 20 24];
- status = "okay";
- linux,phandle = <0x13>;
- phandle = <0x13>;
- };
- gpio@688 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x688 0x24>;
- interrupt-parent = <0x1>;
- interrupts = <0x6>;
- gpio-controller;
- #gpio-cells = <0x2>;
- ralink,gpio-base = <0x48>;
- ralink,num-gpios = <0x1>;
- ralink,register-map = [00 04 08 0c 10 14 18 1c 20 24];
- status = "disabled";
- };
- i2c@900 {
- compatible = "ralink,rt2880-i2c";
- reg = <0x900 0x100>;
- resets = <0x2 0x10>;
- reset-names = "i2c";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x4>;
- };
- i2s@a00 {
- compatible = "mediatek,mt7620-i2s";
- reg = <0xa00 0x100>;
- resets = <0x2 0x11>;
- reset-names = "i2s";
- interrupt-parent = <0x1>;
- interrupts = <0xa>;
- txdma-req = <0x2>;
- rxdma-req = <0x3>;
- dmas = <0x5 0x4 0x5 0x6>;
- dma-names = "tx", "rx";
- status = "disabled";
- };
- spi@b00 {
- compatible = "ralink,mt7620a-spi", "ralink,rt2880-spi";
- reg = <0xb00 0x40>;
- resets = <0x2 0x12>;
- reset-names = "spi";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "okay";
- pinctrl-names = "default";
- pinctrl-0 = <0x6>;
- m25p80@0 {
- #address-cells = <0x1>;
- #size-cells = <0x1>;
- compatible = "jedec,spi-nor";
- reg = <0x0>;
- spi-max-frequency = <0x989680>;
- partition@0 {
- label = "u-boot";
- reg = <0x0 0x30000>;
- };
- partition@30000 {
- label = "u-boot-env";
- reg = <0x30000 0x10000>;
- };
- partition@40000 {
- label = "factory";
- reg = <0x40000 0x10000>;
- linux,phandle = <0x10>;
- phandle = <0x10>;
- };
- partition@fe0000 {
- label = "backup";
- reg = <0x7e0000 0x10000>;
- };
- partition@ff0000 {
- label = "bdinfo";
- reg = <0x7f0000 0x10000>;
- linux,phandle = <0xd>;
- phandle = <0xd>;
- };
- partition@50000 {
- label = "firmware";
- reg = <0x50000 0x790000>;
- };
- };
- };
- spi@b40 {
- compatible = "ralink,rt2880-spi";
- reg = <0xb40 0x60>;
- resets = <0x2 0x12>;
- reset-names = "spi";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- pinctrl-names = "default";
- pinctrl-0 = <0x7>;
- };
- uartlite@c00 {
- compatible = "ralink,mt7620a-uart", "ralink,rt2880-uart", "ns16550a";
- reg = <0xc00 0x100>;
- resets = <0x2 0x13>;
- reset-names = "uartl";
- interrupt-parent = <0x1>;
- interrupts = <0xc>;
- reg-shift = <0x2>;
- pinctrl-names = "default";
- pinctrl-0 = <0x8>;
- };
- systick@d00 {
- compatible = "ralink,mt7620a-systick", "ralink,cevt-systick";
- reg = <0xd00 0x10>;
- resets = <0x2 0x1c>;
- reset-names = "intc";
- interrupt-parent = <0x3>;
- interrupts = <0x7>;
- };
- pcm@2000 {
- compatible = "ralink,mt7620a-pcm";
- reg = <0x2000 0x800>;
- resets = <0x2 0xb>;
- reset-names = "pcm";
- interrupt-parent = <0x1>;
- interrupts = <0x4>;
- status = "disabled";
- };
- gdma@2800 {
- compatible = "ralink,mt7620a-gdma", "ralink,rt3883-gdma";
- reg = <0x2800 0x800>;
- resets = <0x2 0xe>;
- reset-names = "dma";
- interrupt-parent = <0x1>;
- interrupts = <0x7>;
- #dma-cells = <0x1>;
- #dma-channels = <0x10>;
- #dma-requests = <0x10>;
- status = "disabled";
- linux,phandle = <0x5>;
- phandle = <0x5>;
- };
- };
- pinctrl {
- compatible = "ralink,rt2880-pinmux";
- pinctrl-names = "default";
- pinctrl-0 = <0x9>;
- pinctrl0 {
- linux,phandle = <0x9>;
- phandle = <0x9>;
- default {
- ralink,group = "ephy", "wled", "pa", "i2c", "wdt", "uartf", "rgmii1", "spi refclk";
- ralink,function = "gpio";
- };
- };
- pcm_i2s {
- pcm_i2s {
- ralink,group = "uartf";
- ralink,function = "pcm i2s";
- };
- };
- uartf_gpio {
- uartf_gpio {
- ralink,group = "uartf";
- ralink,function = "gpio uartf";
- };
- };
- gpio_i2s {
- gpio_i2s {
- ralink,group = "uartf";
- ralink,function = "gpio i2s";
- };
- };
- spi {
- linux,phandle = <0x6>;
- phandle = <0x6>;
- spi {
- ralink,group = "spi";
- ralink,function = "spi";
- };
- };
- spi1 {
- linux,phandle = <0x7>;
- phandle = <0x7>;
- spi1 {
- ralink,group = "spi_cs1";
- ralink,function = "spi_cs1";
- };
- };
- i2c {
- linux,phandle = <0x4>;
- phandle = <0x4>;
- i2c {
- ralink,group = "i2c";
- ralink,function = "i2c";
- };
- };
- uartlite {
- linux,phandle = <0x8>;
- phandle = <0x8>;
- uart {
- ralink,group = "uartlite";
- ralink,function = "uartlite";
- };
- };
- mdio {
- mdio {
- ralink,group = "mdio";
- ralink,function = "mdio";
- };
- };
- ephy {
- linux,phandle = <0xc>;
- phandle = <0xc>;
- ephy {
- ralink,group = "ephy";
- ralink,function = "ephy";
- };
- };
- wled {
- wled {
- ralink,group = "wled";
- ralink,function = "wled";
- };
- };
- rgmii1 {
- rgmii1 {
- ralink,group = "rgmii1";
- ralink,function = "rgmii1";
- };
- };
- rgmii2 {
- rgmii2 {
- ralink,group = "rgmii2";
- ralink,function = "rgmii2";
- };
- };
- pcie {
- linux,phandle = <0xf>;
- phandle = <0xf>;
- pcie {
- ralink,group = "pcie";
- ralink,function = "pcie rst";
- };
- };
- };
- rstctrl {
- compatible = "ralink,mt7620a-reset", "ralink,rt2880-reset";
- #reset-cells = <0x1>;
- linux,phandle = <0x2>;
- phandle = <0x2>;
- };
- clkctrl {
- compatible = "ralink,rt2880-clock";
- #clock-cells = <0x1>;
- linux,phandle = <0xa>;
- phandle = <0xa>;
- };
- usbphy {
- compatible = "mediatek,mt7620-usbphy";
- #phy-cells = <0x1>;
- resets = <0x2 0x16 0x2 0x19>;
- reset-names = "host", "device";
- clocks = <0xa 0x16 0xa 0x19>;
- clock-names = "host", "device";
- linux,phandle = <0xe>;
- phandle = <0xe>;
- };
- ethernet@10100000 {
- compatible = "mediatek,mt7620-eth";
- reg = <0x10100000 0x10000>;
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- interrupt-parent = <0x3>;
- interrupts = <0x5>;
- resets = <0x2 0x15 0x2 0x17>;
- reset-names = "fe", "esw";
- mediatek,switch = <0xb>;
- pinctrl-names = "default";
- pinctrl-0 = <0xc>;
- mtd-mac-address = <0xd 0xde00>;
- mediatek,portmap = "wllll";
- port@4 {
- compatible = "mediatek,mt7620a-gsw-port", "mediatek,eth-port";
- reg = <0x4>;
- status = "disabled";
- };
- port@5 {
- compatible = "mediatek,mt7620a-gsw-port", "mediatek,eth-port";
- reg = <0x5>;
- status = "disabled";
- };
- mdio-bus {
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- status = "disabled";
- };
- };
- gsw@10110000 {
- compatible = "mediatek,mt7620-gsw";
- reg = <0x10110000 0x8000>;
- resets = <0x2 0x17>;
- reset-names = "esw";
- interrupt-parent = <0x1>;
- interrupts = <0x11>;
- mediatek,port4 = "ephy";
- linux,phandle = <0xb>;
- phandle = <0xb>;
- };
- sdhci@10130000 {
- compatible = "ralink,mt7620-sdhci";
- reg = <0x10130000 0x4000>;
- interrupt-parent = <0x1>;
- interrupts = <0xe>;
- status = "okay";
- };
- ehci@101c0000 {
- compatible = "generic-ehci";
- reg = <0x101c0000 0x1000>;
- interrupt-parent = <0x1>;
- interrupts = <0x12>;
- phys = <0xe 0x1>;
- phy-names = "usb";
- status = "okay";
- };
- ohci@101c1000 {
- compatible = "generic-ohci";
- reg = <0x101c1000 0x1000>;
- interrupt-parent = <0x1>;
- interrupts = <0x12>;
- phys = <0xe 0x1>;
- phy-names = "usb";
- status = "okay";
- };
- pcie@10140000 {
- compatible = "mediatek,mt7620-pci";
- reg = <0x10140000 0x100 0x10142000 0x100>;
- #address-cells = <0x3>;
- #size-cells = <0x2>;
- resets = <0x2 0x1a>;
- reset-names = "pcie0";
- clocks = <0xa 0x1a>;
- clock-names = "pcie0";
- interrupt-parent = <0x3>;
- interrupts = <0x4>;
- pinctrl-names = "default";
- pinctrl-0 = <0xf>;
- device_type = "pci";
- bus-range = <0x0 0xff>;
- ranges = <0x2000000 0x0 0x0 0x20000000 0x0 0x10000000 0x1000000 0x0 0x0 0x10160000 0x0 0x10000>;
- status = "okay";
- pcie-bridge {
- reg = <0x0 0x0 0x0 0x0 0x0>;
- #address-cells = <0x3>;
- #size-cells = <0x2>;
- device_type = "pci";
- };
- };
- wmac@10180000 {
- compatible = "ralink,rt7620-wmac", "ralink,rt2880-wmac";
- reg = <0x10180000 0x40000>;
- interrupt-parent = <0x3>;
- interrupts = <0x6>;
- ralink,eeprom = "soc_wmac.eeprom";
- ralink,mtd-eeprom = <0x10 0x0>;
- };
- gpio-keys-polled {
- compatible = "gpio-keys-polled";
- #address-cells = <0x1>;
- #size-cells = <0x0>;
- poll-interval = <0x14>;
- reset {
- label = "reset";
- gpios = <0x11 0x1 0x1>;
- linux,code = <0x198>;
- };
- };
- gpio-leds {
- compatible = "gpio-leds";
- 4g_ok {
- label = "oem:green:4g_ok";
- gpios = <0x12 0xe 0x1>;
- };
- 4g_err {
- label = "oem:green:4g_err";
- gpios = <0x12 0xf 0x1>;
- };
- eth_err {
- label = "oem:green:eth_err";
- gpios = <0x13 0x3 0x0>;
- };
- eth_ok {
- label = "oem:green:eth_ok";
- gpios = <0x13 0x4 0x0>;
- };
- };
- gpio_export {
- compatible = "gpio-export";
- #size-cells = <0x0>;
- 3g_power {
- gpio-export,name = "3g_power";
- gpio-export,output = <0x1>;
- gpios = <0x13 0x2 0x0>;
- };
- usb_hub {
- gpio-export,name = "usb_hub";
- gpio-export,output = <0x0>;
- gpios = <0x11 0x11 0x0>;
- };
- };
- };
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|