“第二课--OpenWRT 固件定制”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Customize firmware - VLAN)
 
(Customize firmware - DTS)
第7行: 第7行:
 
本教程基于 OpenWRT 最新版。可以用  '''git clone git://git.openwrt.org/openwrt.git''' 获取最新的 OpenWRT 源码。
 
本教程基于 OpenWRT 最新版。可以用  '''git clone git://git.openwrt.org/openwrt.git''' 获取最新的 OpenWRT 源码。
  
 +
 +
=== 加入 MicroWRT 硬件描述 ===
 +
 +
参考: [[第十三课--MicroWRT_内核树介绍]]
 +
 +
DTS 是对每一块板上硬件的描述。对于 MicroWRT ,我们需要定制的内容主要包括板卡名称、串口波特率、Flash分区、GPIO、按键、SPI、PCI-E、I2C、网口等硬件接口。
 +
 +
    /dts-v1/;
 +
   
 +
    /include/ "mt7620a.dtsi"
 +
   
 +
    / {
 +
      compatible = "microwrt", "ralink,mt7620a-soc";
 +
      model = "MicroWRT";
 +
   
 +
      chosen {
 +
        bootargs = "console=ttyS0,115200";
 +
      };
 +
   
 +
      palmbus@10000000 {
 +
        gpio2: gpio@660 {
 +
          status = "okay";
 +
        };
 +
   
 +
        gpio3: gpio@688 {
 +
          status = "okay";
 +
        };
 +
   
 +
        spi@b00 {
 +
          status = "okay";
 +
   
 +
          m25p80@0 {
 +
            #address-cells = <1>;
 +
            #size-cells = <1>;
 +
            compatible = "w25q128";
 +
            reg = <0 0>;
 +
            linux,modalias = "m25p80", "w25q128";
 +
            spi-max-frequency = <10000000>;
 +
   
 +
            partition@0 {
 +
              label = "u-boot";
 +
              reg = <0x0 0x30000>;
 +
              read-only;
 +
            };
 +
   
 +
            partition@30000 {
 +
              label = "u-boot-env";
 +
              reg = <0x30000 0x10000>;
 +
              read-only;
 +
            };
 +
   
 +
            factory: partition@40000 {
 +
              label = "factory";
 +
              reg = <0x40000 0x10000>;
 +
              read-only;
 +
            };
 +
   
 +
            partition@50000 {
 +
              label = "firmware";
 +
              reg = <0x50000 0xfb0000>;
 +
            };
 +
          };
 +
        };
 +
      };
 +
   
 +
      ehci@101c0000 {
 +
        status = "okay";
 +
      };
 +
   
 +
      ohci@101c1000 {
 +
        status = "okay";
 +
      };
 +
   
 +
      pcie@10140000 {
 +
        status = "okay";
 +
   
 +
        pcie-bridge {
 +
          mt76@0,0 {
 +
            reg = <0x0000 0 0 0 0>;
 +
            device_type = "pci";
 +
            mediatek,mtd-eeprom = <&factory 0x8000>;
 +
            mediatek,2ghz = <0>;
 +
          };
 +
        };
 +
      };
 +
   
 +
      ethernet@10100000 {
 +
        pinctrl-names = "default";
 +
        pinctrl-0 = <&ephy_pins>;
 +
        mtd-mac-address = <&factory 0x4>;
 +
        ralink,port-map = "llllw";
 +
      };
 +
   
 +
      wmac@10180000 {
 +
        ralink,mtd-eeprom = <&factory 0>;
 +
      };
 +
   
 +
      pinctrl {
 +
        state_default: pinctrl0 {
 +
          default {
 +
            ralink,group = "wled", "i2c", "wdt", "uartf";
 +
            ralink,function = "gpio";
 +
          };
 +
        };
 +
      };
 +
   
 +
      gpio-keys-polled {
 +
        compatible = "gpio-keys-polled";
 +
        #address-cells = <1>;
 +
        #size-cells = <0>;
 +
        poll-interval = <20>;
 +
        reset {
 +
          label = "reset";
 +
          gpios = <&gpio0 1 1>;
 +
          linux,code = <0x198>;
 +
        };
 +
        wps {
 +
          label = "wps";
 +
          gpios = <&gpio0 2 1>;
 +
          linux,code = <0x211>;
 +
        };
 +
      };
 +
    };
 +
   
  
 
=== 网络接口定制(VLAN) ===
 
=== 网络接口定制(VLAN) ===

2015年4月4日 (六) 03:48的版本

OpenWRT 最新的版本已经提供了 MT7620A 芯片的支持,所以只要是相同芯片的固件,在 MicroWRT 上基本都能直接使用。但由于每款路由器/开发板的接口、配置不尽相同,为了用好 MicroWRT, 还需要对固件进行相应的定制。

本教程基于 OpenWRT 最新版。可以用 git clone git://git.openwrt.org/openwrt.git 获取最新的 OpenWRT 源码。


加入 MicroWRT 硬件描述

参考: 第十三课--MicroWRT_内核树介绍

DTS 是对每一块板上硬件的描述。对于 MicroWRT ,我们需要定制的内容主要包括板卡名称、串口波特率、Flash分区、GPIO、按键、SPI、PCI-E、I2C、网口等硬件接口。

   /dts-v1/;
   
   /include/ "mt7620a.dtsi"
   
   / {
     compatible = "microwrt", "ralink,mt7620a-soc";
     model = "MicroWRT";
   
     chosen {
       bootargs = "console=ttyS0,115200";
     };
   
     palmbus@10000000 {
       gpio2: gpio@660 {
         status = "okay";
       };
   
       gpio3: gpio@688 {
         status = "okay";
       };
   
       spi@b00 {
         status = "okay";
   
         m25p80@0 {
           #address-cells = <1>;
           #size-cells = <1>;
           compatible = "w25q128";
           reg = <0 0>;
           linux,modalias = "m25p80", "w25q128";
           spi-max-frequency = <10000000>;
   
           partition@0 {
             label = "u-boot";
             reg = <0x0 0x30000>;
             read-only;
           };
   
           partition@30000 {
             label = "u-boot-env";
             reg = <0x30000 0x10000>;
             read-only;
           };
   
           factory: partition@40000 {
             label = "factory";
             reg = <0x40000 0x10000>;
             read-only;
           };
   
           partition@50000 {
             label = "firmware";
             reg = <0x50000 0xfb0000>;
           };
         };
       };
     };
   
     ehci@101c0000 {
       status = "okay";
     };
   
     ohci@101c1000 {
       status = "okay";
     };
   
     pcie@10140000 {
       status = "okay";
   
       pcie-bridge {
         mt76@0,0 {
           reg = <0x0000 0 0 0 0>;
           device_type = "pci";
           mediatek,mtd-eeprom = <&factory 0x8000>;
           mediatek,2ghz = <0>;
         };
       };
     };
   
     ethernet@10100000 {
       pinctrl-names = "default";
       pinctrl-0 = <&ephy_pins>;
       mtd-mac-address = <&factory 0x4>;
       ralink,port-map = "llllw";
     };
   
     wmac@10180000 {
       ralink,mtd-eeprom = <&factory 0>;
     };
   
     pinctrl {
       state_default: pinctrl0 {
         default {
           ralink,group = "wled", "i2c", "wdt", "uartf";
           ralink,function = "gpio";
         };
       };
     };
   
     gpio-keys-polled {
       compatible = "gpio-keys-polled";
       #address-cells = <1>;
       #size-cells = <0>;
       poll-interval = <20>;
       reset {
         label = "reset";
         gpios = <&gpio0 1 1>;
         linux,code = <0x198>;
       };
       wps {
         label = "wps";
         gpios = <&gpio0 2 1>;
         linux,code = <0x211>;
       };
     };
   };
   

网络接口定制(VLAN)

参考: 第九课--MicroWRT_VLAN_配置

MT7620 内置了支持 VLAN 的交换机,通过划分不同的 VLAN 就可以实现内外网的切换。MicroWRT 扩展板提供了一个一以太网口,连接到 Port 4。通常我们会使用这个网口连接外网。此时需要修改固件源码中的 /target/linux/ramips/base-files/etc/board.d/02_network。 找到如下段落:

   wt1520 | \
   xiaomi-miwifi-mini |\
   y1)
       ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
       ucidef_add_switch "switch0" "1" "1"
       ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 6t"
       ucidef_add_switch_vlan "switch0" "2" "4 6t"
       ;;

这一段就是将 Port 4 配置到 VLAN 2 的代码。 只要把 microwrt 也加进去就好了。

   wt1520 | \
   xiaomi-miwifi-mini | \
   microwrt | \
   y1)
       ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
       ucidef_add_switch "switch0" "1" "1"
       ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 6t"
       ucidef_add_switch_vlan "switch0" "2" "4 6t"
       ;;