mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-01 10:57:47 +00:00
mediatek: add sonicfi rap630w 211g
Signed-off-by: CybertanYingWei <Yingwei.Huang@cybertan.com.tw>
This commit is contained in:
committed by
John Crispin
parent
16ebaf4fa3
commit
06b8b32623
2
.github/workflows/build-dev.yml
vendored
2
.github/workflows/build-dev.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1','sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'sercomm_ap72tip', 'udaya_a6-id2', 'wallys_dr5018', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf196', 'cig_wf189', 'cybertan_eww631-a1', 'cybertan_eww631-b1','sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'sercomm_ap72tip', 'udaya_a6-id2', 'wallys_dr5018', 'wallys_dr6018', 'wallys_dr6018-v4', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655' ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/system.sh
|
||||
|
||||
mt76_generate_macs() {
|
||||
sysfs="/sys/class/ieee80211"
|
||||
board=$(board_name)
|
||||
|
||||
case ${board} in
|
||||
sonicfi,rap630w-211g)
|
||||
eth=$(fw_printenv | grep ethaddr | cut -d= -f2)
|
||||
mac1=$(macaddr_add ${eth} 2)
|
||||
mac2=$(macaddr_add ${eth} 3)
|
||||
[ -d ${sysfs}/phy0 ] && echo ${mac1} > ${sysfs}/phy0/macaddress
|
||||
[ -d ${sysfs}/phy1 ] && echo ${mac2} > ${sysfs}/phy1/macaddress
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
[ "${ACTION}" = "add" ] && {
|
||||
mt76_generate_macs
|
||||
/sbin/wifi config
|
||||
}
|
||||
|
||||
@@ -0,0 +1,560 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
/dts-v1/;
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
#include "mt7981.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000 0 0x10000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
gpios = <&pio 1 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_RESTART>;
|
||||
};
|
||||
|
||||
mesh {
|
||||
label = "mesh";
|
||||
gpios = <&pio 0 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <BTN_9>;
|
||||
linux,input-type = <EV_SW>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_blue {
|
||||
label = "sys:blue";
|
||||
gpios = <&pio 23 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "timer";
|
||||
active-delay = <500>;
|
||||
inactive-delay = <500>;
|
||||
default-state="on";
|
||||
};
|
||||
|
||||
led_green {
|
||||
label = "sys:green";
|
||||
gpios = <&pio 24 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "timer";
|
||||
active-delay = <500>;
|
||||
inactive-delay = <500>;
|
||||
default-state="on";
|
||||
};
|
||||
|
||||
led_red {
|
||||
label = "sys:red";
|
||||
gpios = <&pio 25 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "timer";
|
||||
active-delay = <500>;
|
||||
inactive-delay = <500>;
|
||||
default-state="on";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð {
|
||||
status = "okay";
|
||||
|
||||
gmac0: mac@0 {
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <0>;
|
||||
phy-mode = "2500base-x";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
|
||||
gmac1: mac@1 {
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <1>;
|
||||
phy-mode = "gmii";
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio: mdio-bus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id03a2.9461";
|
||||
reg = <0>;
|
||||
phy-mode = "gmii";
|
||||
nvmem-cells = <&phy_calibration>;
|
||||
nvmem-cell-names = "phy-cal-data";
|
||||
};
|
||||
|
||||
switch@0 {
|
||||
compatible = "mediatek,mt7531";
|
||||
reg = <31>;
|
||||
reset-gpios = <&pio 39 0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
label = "lan1";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "lan2";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "lan3";
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <6>;
|
||||
label = "cpu";
|
||||
ethernet = <&gmac0>;
|
||||
phy-mode = "2500base-x";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi0_flash_pins>;
|
||||
status = "okay";
|
||||
|
||||
spi_nand: flash@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spi-nand";
|
||||
reg = <0>;
|
||||
|
||||
spi-max-frequency = <52000000>;
|
||||
spi-tx-buswidth = <4>;
|
||||
spi-rx-buswidth = <4>;
|
||||
|
||||
partitions: partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "BL2";
|
||||
reg = <0x00 0x100000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@100000 {
|
||||
label = "u-boot-env";
|
||||
reg = <0x0100000 0x0080000>;
|
||||
};
|
||||
|
||||
factory: partition@180000 {
|
||||
label = "Factory";
|
||||
reg = <0x180000 0x200000>;
|
||||
read-only;
|
||||
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
macaddr_factory_4: macaddr@4 {
|
||||
reg = <0x4 0x6>;
|
||||
};
|
||||
};
|
||||
|
||||
partition@380000 {
|
||||
label = "FIP";
|
||||
reg = <0x380000 0x200000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@580000 {
|
||||
label = "ubi";
|
||||
reg = <0x580000 0x6000000>;
|
||||
};
|
||||
|
||||
partition@7580000 {
|
||||
label = "devinfo";
|
||||
reg = <0x6580000 0x00080000>;
|
||||
};
|
||||
|
||||
partition@7600000 {
|
||||
label ="certificates";
|
||||
reg = <0x6600000 0x00080000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pio {
|
||||
i2c_pins: i2c-pins-g0 {
|
||||
mux {
|
||||
function = "i2c";
|
||||
groups = "i2c0_1";
|
||||
};
|
||||
};
|
||||
spi0_flash_pins: spi0-pins {
|
||||
mux {
|
||||
function = "spi";
|
||||
groups = "spi0", "spi0_wp_hold";
|
||||
};
|
||||
|
||||
conf-pu {
|
||||
pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
|
||||
drive-strength = <MTK_DRIVE_8mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
|
||||
};
|
||||
|
||||
conf-pd {
|
||||
pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
|
||||
drive-strength = <MTK_DRIVE_8mA>;
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
|
||||
};
|
||||
};
|
||||
pse_out_en {
|
||||
gpios = <&pio 27 GPIO_ACTIVE_HIGH>;
|
||||
output-high;
|
||||
};
|
||||
pse_int_n {
|
||||
gpios = <&pio 29 GPIO_ACTIVE_LOW>;
|
||||
input;
|
||||
};
|
||||
};
|
||||
|
||||
&hnat {
|
||||
mtketh-wan = "eth1";
|
||||
mtketh-lan = "lan";
|
||||
mtketh-max-gmac = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c_pins>;
|
||||
status = "okay";
|
||||
|
||||
};
|
||||
|
||||
&pio {
|
||||
wf_dbdc_pins: wf_dbdc-pins {
|
||||
mux {
|
||||
function = "eth";
|
||||
groups = "wf0_mode1";
|
||||
};
|
||||
conf {
|
||||
pins = "WF_HB1", "WF_HB2", "WF_HB3", "WF_HB4",
|
||||
"WF_HB0", "WF_HB0_B", "WF_HB5", "WF_HB6",
|
||||
"WF_HB7", "WF_HB8", "WF_HB9", "WF_HB10",
|
||||
"WF_TOP_CLK", "WF_TOP_DATA", "WF_XO_REQ",
|
||||
"WF_CBA_RESETB", "WF_DIG_RESETB";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wbsys {
|
||||
status = "okay";
|
||||
|
||||
mediatek,mtd-eeprom = <&factory 0x0>;
|
||||
pinctrl-names = "dbdc";
|
||||
pinctrl-0 = <&wf_dbdc_pins>;
|
||||
power-limits {
|
||||
r0 {
|
||||
regdomain = "fcc";
|
||||
txpower-2g {
|
||||
r0 {
|
||||
channels = <1 1>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-cck = <38 38 38 38>;
|
||||
rates-ofdm = <37 37 37 37 37 37 37 37>;
|
||||
rates-mcs =
|
||||
<1 36 36 36 36 36 36 36 36 34 33>,
|
||||
<3 34 34 34 34 34 34 34 34 34 33>;
|
||||
rates-ru =
|
||||
<4 36 36 36 36 36 36 36 36 34 33 32 32>,
|
||||
<3 34 34 34 34 34 34 34 34 34 33 32 32>;
|
||||
};
|
||||
r1 {
|
||||
channels = <2 3>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-cck = <38 38 38 38>;
|
||||
rates-ofdm = <38 38 38 38 38 38 38 37>;
|
||||
rates-mcs =
|
||||
<1 38 38 38 38 38 38 37 36 34 33>,
|
||||
<3 34 34 34 34 34 34 34 34 34 33>;
|
||||
rates-ru =
|
||||
<4 38 38 38 38 38 38 37 36 34 33 32 32>,
|
||||
<3 34 34 34 34 34 34 34 34 34 33 32 32>;
|
||||
};
|
||||
r2 {
|
||||
channels = <4 8>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-cck = <38 38 38 38>;
|
||||
rates-ofdm = <38 38 38 38 38 38 38 37>;
|
||||
rates-mcs =
|
||||
<1 38 38 38 38 38 38 37 36 34 33>,
|
||||
<3 36 36 36 36 36 36 36 36 34 33>;
|
||||
rates-ru =
|
||||
<4 38 38 38 38 38 38 37 36 34 33 32 32>,
|
||||
<3 36 36 36 36 36 36 36 36 34 33 32 32>;
|
||||
};
|
||||
r3 {
|
||||
channels = <9 14>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-cck = <38 38 38 38>;
|
||||
rates-ofdm = <38 38 38 38 38 38 38 37>;
|
||||
rates-mcs =
|
||||
<1 38 38 38 38 38 38 37 36 34 33>,
|
||||
<3 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<4 38 38 38 38 38 38 37 36 34 33 32 32>,
|
||||
<3 32 32 32 32 32 32 32 32 32 32 32 32>;
|
||||
};
|
||||
};
|
||||
txpower-5g {
|
||||
r0 {
|
||||
channels = <184 196>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<2 40 40 40 40 40 39 38 36 35 34>,
|
||||
<2 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<5 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r1 {
|
||||
channels = <8 16>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<2 40 40 40 40 40 39 38 36 35 34>,
|
||||
<2 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<5 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r2 {
|
||||
channels = <36 40>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<1 40 40 40 40 40 39 38 36 35 34>,
|
||||
<1 38 38 38 38 38 38 38 36 35 34>,
|
||||
<2 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<4 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 38 38 38 38 38 38 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r3 {
|
||||
channels = <44 44>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<2 40 40 40 40 40 39 38 36 35 34>,
|
||||
<2 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<5 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r4 {
|
||||
channels = <48 48>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <39 39 39 39 39 39 39 38>;
|
||||
rates-mcs =
|
||||
<2 40 40 40 40 40 39 38 36 35 34>,
|
||||
<2 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<5 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r5 {
|
||||
channels = <52 96>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <36 36 36 36 36 36 36 36>;
|
||||
rates-mcs =
|
||||
<3 36 36 36 36 36 36 36 36 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<6 36 36 36 36 36 36 36 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r6 {
|
||||
channels = <100 112>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <36 36 36 36 36 36 36 36>;
|
||||
rates-mcs =
|
||||
<2 36 36 36 36 36 36 36 36 35 34>,
|
||||
<1 35 35 35 35 35 35 35 35 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<5 36 36 36 36 36 36 36 36 35 34 32 32>,
|
||||
<1 35 35 35 35 35 35 35 35 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r7 {
|
||||
channels = <116 144>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <36 36 36 36 36 36 36 36>;
|
||||
rates-mcs =
|
||||
<3 36 36 36 36 36 36 36 36 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<6 36 36 36 36 36 36 36 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r8 {
|
||||
channels = <149 181>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<3 40 40 40 40 40 39 38 36 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<6 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
};
|
||||
};
|
||||
r1 {
|
||||
regdomain = "etsi";
|
||||
txpower-2g {
|
||||
r0 {
|
||||
channels = <1 14>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-cck = <29 29 29 29>;
|
||||
rates-ofdm = <30 30 30 30 30 30 30 30>;
|
||||
rates-mcs =
|
||||
<4 28 28 28 28 28 28 28 28 28 28>;
|
||||
rates-ru =
|
||||
<7 28 28 28 28 28 28 28 28 28 28 28 28>;
|
||||
};
|
||||
};
|
||||
txpower-5g {
|
||||
r0 {
|
||||
channels = <184 196>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <33 33 33 33 33 33 33 33>;
|
||||
rates-mcs =
|
||||
<4 33 33 33 33 33 33 33 33 33 33>;
|
||||
rates-ru =
|
||||
<6 33 33 33 33 33 33 33 33 33 33 32 32>,
|
||||
<1 33 33 33 33 33 33 33 33 33 33 30 30>;
|
||||
};
|
||||
r1 {
|
||||
channels = <8 16>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <33 33 33 33 33 33 33 33>;
|
||||
rates-mcs =
|
||||
<4 33 33 33 33 33 33 33 33 33 33>;
|
||||
rates-ru =
|
||||
<6 33 33 33 33 33 33 33 33 33 33 32 32>,
|
||||
<1 33 33 33 33 33 33 33 33 33 33 30 30>;
|
||||
};
|
||||
r2 {
|
||||
channels = <36 48>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <33 33 33 33 33 33 33 33>;
|
||||
rates-mcs =
|
||||
<4 33 33 33 33 33 33 33 33 33 33>;
|
||||
rates-ru =
|
||||
<6 33 33 33 33 33 33 33 33 33 33 32 32>,
|
||||
<1 33 33 33 33 33 33 33 33 33 33 30 30>;
|
||||
};
|
||||
r3 {
|
||||
channels = <52 96>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <33 33 33 33 33 33 33 33>;
|
||||
rates-mcs =
|
||||
<1 32 32 32 32 32 32 32 32 32 32>,
|
||||
<3 33 33 33 33 33 33 33 33 33 33>;
|
||||
rates-ru =
|
||||
<4 32 32 32 32 32 32 32 32 32 32 32 32>,
|
||||
<2 33 33 33 33 33 33 33 33 33 33 32 32>,
|
||||
<1 33 33 33 33 33 33 33 33 33 33 30 30>;
|
||||
};
|
||||
r4 {
|
||||
channels = <100 128>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<3 40 40 40 40 40 39 38 36 35 34>,
|
||||
<1 40 40 40 39 39 38 36 35 34 33>;
|
||||
rates-ru =
|
||||
<6 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 40 40 40 39 39 38 36 35 34 33 30 30>;
|
||||
};
|
||||
r5 {
|
||||
channels = <132 144>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<3 40 40 40 40 40 39 38 36 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<6 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
r6 {
|
||||
channels = <149 181>;
|
||||
txs-delta = <0 0 0>;
|
||||
rates-ofdm = <40 40 40 40 40 40 39 38>;
|
||||
rates-mcs =
|
||||
<3 40 40 40 40 40 39 38 36 35 34>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32>;
|
||||
rates-ru =
|
||||
<6 40 40 40 40 40 39 38 36 35 34 32 32>,
|
||||
<1 32 32 32 32 32 32 32 32 32 32 30 30>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&watchdog {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
/ {
|
||||
model = "SONICFI RAP630W-211G";
|
||||
compatible = "sonicfi,rap630w-211g", "mediatek,mt7981";
|
||||
};
|
||||
|
||||
|
||||
@@ -79,6 +79,34 @@ define Device/edgecore_eap112
|
||||
endef
|
||||
TARGET_DEVICES += edgecore_eap112
|
||||
|
||||
define Device/sonicfi_rap630w_211g
|
||||
DEVICE_VENDOR := SONICFI
|
||||
DEVICE_MODEL := RAP630W-211G
|
||||
DEVICE_DTS := mt7981b-sonicfi-rap630w-211g
|
||||
DEVICE_DTS_DIR := $(DTS_DIR)/mediatek
|
||||
SUPPORTED_DEVICES := sonicfi,rap630w-211g
|
||||
DEVICE_PACKAGES := kmod-mt7981-firmware kmod-mt7915e kmod-hwmon-tps23861 \
|
||||
e2fsprogs f2fsck mkf2fs
|
||||
KERNEL := kernel-bin | lzma | \
|
||||
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
|
||||
KERNEL_INITRAMFS := kernel-bin | lzma | \
|
||||
fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k
|
||||
KERNEL_INITRAMFS_SUFFIX := -recovery.itb
|
||||
KERNEL_IN_UBI := 1
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
IMAGE_SIZE := 65536k
|
||||
ROOTFSNAME_IN_UBI := rootfs
|
||||
UBOOTENV_IN_UBI := 1
|
||||
IMAGES := sysupgrade.tar
|
||||
IMAGE/sysupgrade.itb := append-kernel | \
|
||||
fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | \
|
||||
pad-rootfs | append-metadata
|
||||
IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
|
||||
endef
|
||||
TARGET_DEVICES += sonicfi_rap630w_211g
|
||||
|
||||
define Device/mt7981-spim-nand-gsw
|
||||
DEVICE_VENDOR := MediaTek
|
||||
DEVICE_MODEL := mt7981-spim-nand-gsw
|
||||
|
||||
44
feeds/mediatek-sdk/mediatek/mt7981/base-files/etc/board.d/02_network
Executable file → Normal file
44
feeds/mediatek-sdk/mediatek/mt7981/base-files/etc/board.d/02_network
Executable file → Normal file
@@ -1,8 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/uboot-envtools.sh
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/functions/system.sh
|
||||
. /lib/rap211g-envtools.sh
|
||||
|
||||
mediatek_setup_interfaces()
|
||||
{
|
||||
@@ -22,6 +23,9 @@ mediatek_setup_interfaces()
|
||||
*2500wan-p5*)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" wan
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1
|
||||
;;
|
||||
*)
|
||||
ucidef_set_interfaces_lan_wan "eth0" "eth1"
|
||||
;;
|
||||
@@ -43,6 +47,44 @@ mediatek_setup_macs()
|
||||
lan_mac_offset="0x24"
|
||||
wan_mac_offset="0x2a"
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
sysfs="/sys/class/ieee80211"
|
||||
env_dev=$(get_boot_param "boot_param.env_part")
|
||||
if [ -n "$env_dev" ]; then
|
||||
mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
||||
if [ ! "$mtdnum" ]; then
|
||||
echo "cannot find ubi mtd partition $CI_UBIPART"
|
||||
return 1
|
||||
fi
|
||||
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
fi
|
||||
|
||||
env_ubivol="$( nand_find_volume "${ubidev}" ${env_dev} )"
|
||||
if [ -n "${env_ubivol}" ]; then
|
||||
#ubootenv_add_uci_config "/dev/$env_ubivol" "0" "0x80000" "0x80000" 1
|
||||
echo "/dev/$env_ubivol 0 0x80000 0x80000 1" > /etc/fw_env.config
|
||||
fi
|
||||
fi
|
||||
#echo "/dev/ubi0_0 0 0x80000 0x80000 1" > /etc/fw_env.config
|
||||
mac=$(fw_printenv | grep ethaddr | cut -d= -f2)
|
||||
wan_mac=$(macaddr_canonicalize $mac)
|
||||
[ -z "$mac" ] && return;
|
||||
wan_mac=$(macaddr_canonicalize $mac)
|
||||
lan_mac=$(macaddr_add "$wan_mac" 1)
|
||||
ucidef_set_interface_macaddr "lan" "$lan_mac"
|
||||
ucidef_set_interface_macaddr "wan" "$wan_mac"
|
||||
ucidef_set_label_macaddr "$wan_mac"
|
||||
mac1=$(macaddr_add ${mac} 2)
|
||||
mac2=$(macaddr_add ${mac} 3)
|
||||
[ -d ${sysfs}/phy0 ] && echo ${mac1} > ${sysfs}/phy0/macaddress
|
||||
[ -d ${sysfs}/phy1 ] && echo ${mac2} > ${sysfs}/phy1/macaddress
|
||||
return
|
||||
;;
|
||||
*)
|
||||
lan_mac_offset="0x2A"
|
||||
wan_mac_offset="0x24"
|
||||
|
||||
@@ -8,6 +8,9 @@ touch /etc/config/ubootenv
|
||||
|
||||
. /lib/uboot-envtools.sh
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/functions/system.sh
|
||||
. /lib/rap211g-envtools.sh
|
||||
|
||||
board=$(board_name)
|
||||
|
||||
@@ -16,9 +19,31 @@ edgecore,eap111|\
|
||||
edgecore,eap112)
|
||||
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000"
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
#env_dev=$(cat /sys/module/boot_param/parameters/env_part 2>/dev/null)
|
||||
env_dev=$(get_boot_param "boot_param.env_part")
|
||||
if [ -n "$env_dev" ]; then
|
||||
mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
||||
if [ ! "$mtdnum" ]; then
|
||||
echo "cannot find ubi mtd partition $CI_UBIPART"
|
||||
return 1
|
||||
fi
|
||||
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
fi
|
||||
|
||||
env_ubivol="$( nand_find_volume "${ubidev}" ${env_dev} )"
|
||||
if [ -n "${env_ubivol}" ]; then
|
||||
ubootenv_add_uci_config "/dev/$env_ubivol" "0" "0x80000" "0x80000" 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
config_load ubootenv
|
||||
config_foreach ubootenv_add_app_config
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#
|
||||
# Copyright (C) 2021 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/uboot-envtools.sh
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/functions/system.sh
|
||||
|
||||
CI_UBIPART=ubi
|
||||
|
||||
ubi_mknod() {
|
||||
local dir="$1"
|
||||
local dev="/dev/$(basename $dir)"
|
||||
|
||||
[ -e "$dev" ] && return 0
|
||||
|
||||
local devid="$(cat $dir/dev)"
|
||||
local major="${devid%%:*}"
|
||||
local minor="${devid##*:}"
|
||||
mknod "$dev" c $major $minor
|
||||
}
|
||||
|
||||
get_boot_param()
|
||||
{
|
||||
local cmdline_param=$(cat /proc/cmdline)
|
||||
local name
|
||||
for var in $cmdline_param
|
||||
do
|
||||
#echo "aaa---$var"
|
||||
if [ $var == $1 ];
|
||||
then
|
||||
echo "Y"
|
||||
return
|
||||
else
|
||||
name=$(echo $var | awk -F '=' '{print $1}')
|
||||
#echo "$name"
|
||||
if [ $name == $1 ];
|
||||
then
|
||||
echo $(echo $var | awk -F '=' '{print $2}')
|
||||
return
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo "N"
|
||||
}
|
||||
|
||||
block_dev_path() {
|
||||
local dev_path
|
||||
|
||||
case "$1" in
|
||||
/dev/mmcblk*)
|
||||
dev_path="$1"
|
||||
;;
|
||||
PARTLABEL=* | PARTUUID=*)
|
||||
dev_path=$(blkid -t "$1" -o device)
|
||||
[ -z "${dev_path}" -o $? -ne 0 ] && return 1
|
||||
;;
|
||||
*)
|
||||
return 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${dev_path}"
|
||||
return 0
|
||||
}
|
||||
|
||||
nand_find_volume() {
|
||||
local ubidevdir ubivoldir
|
||||
ubidevdir="/sys/devices/virtual/ubi/$1"
|
||||
[ ! -d "$ubidevdir" ] && return 1
|
||||
for ubivoldir in $ubidevdir/${1}_*; do
|
||||
[ ! -d "$ubivoldir" ] && continue
|
||||
if [ "$( cat $ubivoldir/name )" = "$2" ]; then
|
||||
basename $ubivoldir
|
||||
ubi_mknod "$ubivoldir"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
nand_find_ubi() {
|
||||
local ubidevdir ubidev mtdnum
|
||||
mtdnum="$( find_mtd_index $1 )"
|
||||
[ ! "$mtdnum" ] && return 1
|
||||
for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
|
||||
[ ! -d "$ubidevdir" ] && continue
|
||||
cmtdnum="$( cat $ubidevdir/mtd_num )"
|
||||
[ ! "$mtdnum" ] && continue
|
||||
if [ "$mtdnum" = "$cmtdnum" ]; then
|
||||
ubidev=$( basename $ubidevdir )
|
||||
ubi_mknod "$ubidevdir"
|
||||
echo $ubidev
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,10 @@ platform_do_upgrade() {
|
||||
fi
|
||||
nand_do_upgrade "$1"
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
chmod +x /tmp/root/lib/upgrade/sonicfi/nand_sonicfi_rap630w_211g.sh
|
||||
/tmp/root/lib/upgrade/sonicfi/nand_sonicfi_rap630w_211g.sh "$1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -48,6 +52,13 @@ platform_check_image() {
|
||||
nand_do_platform_check "$board" "$1"
|
||||
return $?
|
||||
;;
|
||||
sonicfi,rap630w-211g)
|
||||
[ "$magic" != "73797375" ] && {
|
||||
echo "Invalid image type."
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,511 @@
|
||||
# Copyright (C) 2014 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
# 'kernel' partition on NAND contains the kernel
|
||||
CI_KERNPART="${CI_KERNPART:-kernel}"
|
||||
|
||||
# 'ubi' partition on NAND contains UBI
|
||||
CI_UBIPART="${CI_UBIPART:-ubi}"
|
||||
|
||||
# 'rootfs' partition on NAND contains the rootfs
|
||||
CI_ROOTPART="${CI_ROOTPART:-rootfs}"
|
||||
|
||||
get_boot_param()
|
||||
{
|
||||
local cmdline_param=$(cat /proc/cmdline)
|
||||
local name
|
||||
for var in $cmdline_param
|
||||
do
|
||||
#echo "aaa---$var"
|
||||
if [ $var == $1 ];
|
||||
then
|
||||
echo "Y"
|
||||
return
|
||||
else
|
||||
name=$(echo $var | awk -F '=' '{print $1}')
|
||||
#echo "$name"
|
||||
if [ $name == $1 ];
|
||||
then
|
||||
echo $(echo $var | awk -F '=' '{print $2}')
|
||||
return
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo "N"
|
||||
}
|
||||
|
||||
ubi_mknod() {
|
||||
local dir="$1"
|
||||
local dev="/dev/$(basename $dir)"
|
||||
|
||||
[ -e "$dev" ] && return 0
|
||||
|
||||
local devid="$(cat $dir/dev)"
|
||||
local major="${devid%%:*}"
|
||||
local minor="${devid##*:}"
|
||||
mknod "$dev" c $major $minor
|
||||
}
|
||||
|
||||
nand_find_volume() {
|
||||
local ubidevdir ubivoldir
|
||||
ubidevdir="/sys/devices/virtual/ubi/$1"
|
||||
[ ! -d "$ubidevdir" ] && return 1
|
||||
for ubivoldir in $ubidevdir/${1}_*; do
|
||||
[ ! -d "$ubivoldir" ] && continue
|
||||
if [ "$( cat $ubivoldir/name )" = "$2" ]; then
|
||||
basename $ubivoldir
|
||||
ubi_mknod "$ubivoldir"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
nand_find_ubi() {
|
||||
local ubidevdir ubidev mtdnum
|
||||
mtdnum="$( find_mtd_index $1 )"
|
||||
[ ! "$mtdnum" ] && return 1
|
||||
for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
|
||||
[ ! -d "$ubidevdir" ] && continue
|
||||
cmtdnum="$( cat $ubidevdir/mtd_num )"
|
||||
[ ! "$mtdnum" ] && continue
|
||||
if [ "$mtdnum" = "$cmtdnum" ]; then
|
||||
ubidev=$( basename $ubidevdir )
|
||||
ubi_mknod "$ubidevdir"
|
||||
echo $ubidev
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
nand_get_magic_long() {
|
||||
dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
get_magic_long_tar() {
|
||||
( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null
|
||||
}
|
||||
|
||||
identify_magic() {
|
||||
local magic=$1
|
||||
case "$magic" in
|
||||
"55424923")
|
||||
echo "ubi"
|
||||
;;
|
||||
"31181006")
|
||||
echo "ubifs"
|
||||
;;
|
||||
"68737173")
|
||||
echo "squashfs"
|
||||
;;
|
||||
"d00dfeed")
|
||||
echo "fit"
|
||||
;;
|
||||
"4349"*)
|
||||
echo "combined"
|
||||
;;
|
||||
*)
|
||||
echo "unknown $magic"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
identify() {
|
||||
identify_magic $(nand_get_magic_long "$1" "${2:-0}")
|
||||
}
|
||||
|
||||
identify_tar() {
|
||||
identify_magic $(get_magic_long_tar "$1" "$2")
|
||||
}
|
||||
|
||||
nand_restore_config() {
|
||||
sync
|
||||
local ubidev=$( nand_find_ubi $CI_UBIPART )
|
||||
local ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
||||
[ ! "$ubivol" ] &&
|
||||
ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
|
||||
mkdir /tmp/new_root
|
||||
if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
|
||||
echo "mounting ubifs $ubivol failed"
|
||||
rmdir /tmp/new_root
|
||||
return 1
|
||||
fi
|
||||
mv "$1" "/tmp/new_root/$BACKUP_FILE"
|
||||
umount /tmp/new_root
|
||||
sync
|
||||
rmdir /tmp/new_root
|
||||
}
|
||||
|
||||
nand_upgrade_prepare_ubi() {
|
||||
local rootfs_length="$1"
|
||||
local rootfs_type="$2"
|
||||
local has_kernel="${3:-0}"
|
||||
local has_env="${4:-0}"
|
||||
|
||||
local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
||||
if [ ! "$mtdnum" ]; then
|
||||
echo "cannot find ubi mtd partition $CI_UBIPART"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
fi
|
||||
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiformat /dev/mtd$mtdnum -y
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
[ "$has_env" -gt 0 ] && {
|
||||
ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
|
||||
ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
|
||||
}
|
||||
fi
|
||||
|
||||
local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
|
||||
local root_ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
|
||||
local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
||||
|
||||
# remove ubiblock device of rootfs
|
||||
local root_ubiblk="ubiblock${root_ubivol:3}"
|
||||
if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
|
||||
echo "removing $root_ubiblk"
|
||||
if ! ubiblock -r /dev/$root_ubivol; then
|
||||
echo "cannot remove $root_ubiblk"
|
||||
return 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
# kill volumes
|
||||
[ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || true
|
||||
[ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || true
|
||||
[ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
|
||||
|
||||
# update kernel
|
||||
if [ "$has_kernel" = "1" ]; then
|
||||
if ! ubimkvol /dev/$ubidev -N $CI_KERNPART -s $kernel_length; then
|
||||
echo "cannot create kernel volume"
|
||||
return 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
# update rootfs
|
||||
local root_size_param
|
||||
if [ "$rootfs_type" = "ubifs" ]; then
|
||||
root_size_param="-m"
|
||||
else
|
||||
root_size_param="-s $rootfs_length"
|
||||
fi
|
||||
if ! ubimkvol /dev/$ubidev -N $CI_ROOTPART $root_size_param; then
|
||||
echo "cannot create rootfs volume"
|
||||
return 1;
|
||||
fi
|
||||
|
||||
# create rootfs_data for non-ubifs rootfs
|
||||
if [ "$rootfs_type" != "ubifs" ]; then
|
||||
if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
|
||||
echo "cannot initialize rootfs_data volume"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
sync
|
||||
return 0
|
||||
}
|
||||
|
||||
nand_do_upgrade_success() {
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
|
||||
sync
|
||||
[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
}
|
||||
|
||||
# Flash the UBI image to MTD partition
|
||||
nand_upgrade_ubinized() {
|
||||
local ubi_file="$1"
|
||||
local mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
||||
|
||||
[ ! "$mtdnum" ] && {
|
||||
CI_UBIPART="rootfs"
|
||||
mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
||||
}
|
||||
|
||||
if [ ! "$mtdnum" ]; then
|
||||
echo "cannot find mtd device $CI_UBIPART"
|
||||
umount -a
|
||||
reboot -f
|
||||
fi
|
||||
|
||||
local mtddev="/dev/mtd${mtdnum}"
|
||||
ubidetach -p "${mtddev}" || true
|
||||
sync
|
||||
ubiformat "${mtddev}" -y -f "${ubi_file}"
|
||||
ubiattach -p "${mtddev}"
|
||||
nand_do_upgrade_success
|
||||
}
|
||||
|
||||
# Write the UBIFS image to UBI volume
|
||||
nand_upgrade_ubifs() {
|
||||
local rootfs_length=$( (cat $1 | wc -c) 2> /dev/null)
|
||||
|
||||
nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
|
||||
|
||||
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
|
||||
ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
|
||||
|
||||
nand_do_upgrade_success
|
||||
}
|
||||
|
||||
nand_upgrade_tar() {
|
||||
local tar_file="$1"
|
||||
local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
|
||||
|
||||
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
|
||||
board_dir=${board_dir%/}
|
||||
|
||||
local kernel_length=$( (tar xf $tar_file ${board_dir}/kernel -O | wc -c) 2> /dev/null)
|
||||
local rootfs_length=$( (tar xf $tar_file ${board_dir}/root -O | wc -c) 2> /dev/null)
|
||||
|
||||
local rootfs_type="$(identify_tar "$tar_file" ${board_dir}/root)"
|
||||
|
||||
local has_kernel=1
|
||||
local has_env=0
|
||||
|
||||
[ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && {
|
||||
tar xf $tar_file ${board_dir}/kernel -O | mtd write - $CI_KERNPART
|
||||
}
|
||||
[ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0
|
||||
|
||||
nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env"
|
||||
|
||||
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
[ "$has_kernel" = "1" ] && {
|
||||
local kern_ubivol="$(nand_find_volume $ubidev $CI_KERNPART)"
|
||||
tar xf $tar_file ${board_dir}/kernel -O | \
|
||||
ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
|
||||
}
|
||||
|
||||
local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
|
||||
tar xf $tar_file ${board_dir}/root -O | \
|
||||
ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
|
||||
|
||||
nand_do_upgrade_success
|
||||
}
|
||||
|
||||
# Recognize type of passed file and start the upgrade process
|
||||
nand_do_upgrade() {
|
||||
local file_type=$(identify $1)
|
||||
|
||||
[ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs"
|
||||
|
||||
case "$file_type" in
|
||||
"ubi") nand_upgrade_ubinized $1;;
|
||||
"ubifs") nand_upgrade_ubifs $1;;
|
||||
*) nand_upgrade_tar $1;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
|
||||
# 3 types of files:
|
||||
# 1) UBI - should contain an ubinized image, header is checked for the proper
|
||||
# MAGIC
|
||||
# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume,
|
||||
# header is checked for the proper MAGIC
|
||||
# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty
|
||||
# "CONTROL" file (at this point its content isn't verified)
|
||||
#
|
||||
# You usually want to call this function in platform_check_image.
|
||||
#
|
||||
# $(1): board name, used in case of passing TAR file
|
||||
# $(2): file to be checked
|
||||
nand_do_platform_check() {
|
||||
local board_name="$1"
|
||||
local tar_file="$2"
|
||||
local control_length=$( (tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null)
|
||||
local file_type="$(identify $2)"
|
||||
|
||||
[ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
|
||||
echo "Invalid sysupgrade file."
|
||||
return 1
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
dual_boot_upgrade_prepare_ubi() {
|
||||
local kernel_vol_name="$1"
|
||||
local rootfs_vol_name="$2"
|
||||
local kernel_length="$3"
|
||||
local rootfs_length="$4"
|
||||
local reserve_rootfs_data="$5"
|
||||
local conf_tar="/tmp/sysupgrade.tgz"
|
||||
|
||||
local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
||||
if [ ! "$mtdnum" ]; then
|
||||
echo "cannot find ubi mtd partition $CI_UBIPART"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
fi
|
||||
|
||||
if [ ! "$ubidev" ]; then
|
||||
ubiformat /dev/mtd$mtdnum -y
|
||||
ubiattach -m "$mtdnum"
|
||||
sync
|
||||
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
ubimkvol /dev/$ubidev -n 0 -N u-boot-env -s 512KiB
|
||||
fi
|
||||
|
||||
#local rootfs_data_vol_name=$(cat /sys/module/boot_param/parameters/rootfs_data_part 2>/dev/null)
|
||||
local rootfs_data_vol_name=$(get_boot_param "boot_param.rootfs_data_part")
|
||||
|
||||
local kern_ubivol="$( nand_find_volume $ubidev $kernel_vol_name )"
|
||||
local root_ubivol="$( nand_find_volume $ubidev $rootfs_vol_name )"
|
||||
local data_ubivol="$( nand_find_volume $ubidev $rootfs_data_vol_name )"
|
||||
|
||||
# remove ubiblock device of rootfs
|
||||
local root_ubiblk="ubiblock${root_ubivol:3}"
|
||||
if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
|
||||
echo "removing $root_ubiblk"
|
||||
if ! ubiblock -r /dev/$root_ubivol; then
|
||||
echo "cannot remove $root_ubiblk"
|
||||
return 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
# kill volumes
|
||||
[ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $kernel_vol_name || true
|
||||
[ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N $rootfs_vol_name || true
|
||||
|
||||
# update kernel
|
||||
if ! ubimkvol /dev/$ubidev -N $kernel_vol_name -s $kernel_length; then
|
||||
echo "cannot create kernel volume"
|
||||
return 1;
|
||||
fi
|
||||
|
||||
# update rootfs
|
||||
if ! ubimkvol /dev/$ubidev -N $rootfs_vol_name -s $rootfs_length; then
|
||||
echo "cannot create rootfs volume"
|
||||
return 1;
|
||||
fi
|
||||
|
||||
if [ x"${reserve_rootfs_data}" = xY ] && [ -f "$conf_tar" ]; then
|
||||
# Do not touch rootfs_data
|
||||
sync
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 'format' rootfs_data volume
|
||||
[ "$data_ubivol" ] && {
|
||||
local rootfs_data_length=$(cat /sys/class/ubi/$data_ubivol/data_bytes)
|
||||
|
||||
# kill rootfs_data volume
|
||||
ubirmvol /dev/$ubidev -N $rootfs_data_vol_name || true
|
||||
|
||||
# update rootfs_data
|
||||
if ! ubimkvol /dev/$ubidev -N $rootfs_data_vol_name -s $rootfs_data_length; then
|
||||
echo "cannot create $rootfs_data_vol_name volume"
|
||||
fi
|
||||
}
|
||||
|
||||
sync
|
||||
return 0
|
||||
}
|
||||
|
||||
ubi_dual_boot_upgrade_tar() {
|
||||
local tar_file="$1"
|
||||
local board_dir=$(tar tf ${tar_file} | grep -m 1 '^sysupgrade-.*/$')
|
||||
#local reserve_rootfs_data=$(cat /sys/module/boot_param/parameters/reserve_rootfs_data 2>/dev/null)
|
||||
local reserve_rootfs_data=$(get_boot_param "boot_param.reserve_rootfs_data")
|
||||
board_dir=${board_dir%/}
|
||||
|
||||
#kernel_vol_name=$(cat /sys/module/boot_param/parameters/upgrade_kernel_part 2>/dev/null)
|
||||
kernel_vol_name=$(get_boot_param "boot_param.upgrade_kernel_part")
|
||||
[ -z "${kernel_vol_name}" -o $? -ne 0 ] && return 1
|
||||
|
||||
#rootfs_vol_name=$(cat /sys/module/boot_param/parameters/upgrade_rootfs_part 2>/dev/null)
|
||||
rootfs_vol_name=$(get_boot_param "boot_param.upgrade_rootfs_part")
|
||||
[ -z "${rootfs_vol_name}" -o $? -ne 0 ] && return 1
|
||||
|
||||
local kernel_length=$( (tar xf ${tar_file} ${board_dir}/kernel -O | wc -c) 2> /dev/null)
|
||||
local rootfs_length=$( (tar xf ${tar_file} ${board_dir}/root -O | wc -c) 2> /dev/null)
|
||||
echo "kernel_vol_name=$kernel_vol_name,rootfs_vol_name=$rootfs_vol_name,kernel_length=$kernel_length,rootfs_length=$rootfs_length,reserve_rootfs_data=$reserve_rootfs_data"
|
||||
dual_boot_upgrade_prepare_ubi "${kernel_vol_name}" "${rootfs_vol_name}" \
|
||||
"${kernel_length}" "${rootfs_length}" \
|
||||
"${reserve_rootfs_data}"
|
||||
|
||||
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
||||
|
||||
[ "${kernel_length}" != 0 ] && {
|
||||
local kern_ubivol="$(nand_find_volume $ubidev ${kernel_vol_name})"
|
||||
tar xf ${tar_file} ${board_dir}/kernel -O | \
|
||||
ubiupdatevol /dev/${kern_ubivol} -s ${kernel_length} -
|
||||
}
|
||||
|
||||
[ "${rootfs_length}" != 0 ] && {
|
||||
local root_ubivol="$(nand_find_volume $ubidev ${rootfs_vol_name})"
|
||||
tar xf ${tar_file} ${board_dir}/root -O | \
|
||||
ubiupdatevol /dev/${root_ubivol} -s ${rootfs_length} -
|
||||
}
|
||||
|
||||
#upgrade_image_slot=$(cat /sys/module/boot_param/parameters/upgrade_image_slot 2>/dev/null)
|
||||
upgrade_image_slot=$(get_boot_param "boot_param.upgrade_image_slot")
|
||||
[ -n "${upgrade_image_slot}" ] && {
|
||||
echo "Set new boot image slot to ${upgrade_image_slot}"
|
||||
# Force the creation of fw_printenv.lock
|
||||
mkdir -p /var/lock
|
||||
touch /var/lock/fw_printenv.lock
|
||||
fw_setenv "dual_boot.current_slot" "${upgrade_image_slot}"
|
||||
fw_setenv "dual_boot.slot_${upgrade_image_slot}_invalid" "0"
|
||||
}
|
||||
|
||||
if [ x"${reserve_rootfs_data}" != xY ]; then
|
||||
# do normal upgrade flow
|
||||
nand_do_upgrade_success
|
||||
fi
|
||||
|
||||
# Do not touch rootfs_data
|
||||
sync
|
||||
|
||||
echo "sysupgrade successful"
|
||||
umount -a
|
||||
reboot -f
|
||||
}
|
||||
|
||||
ubi_do_upgrade() {
|
||||
#local dual_boot=$(cat /sys/module/boot_param/parameters/dual_boot 2>/dev/null)
|
||||
local dual_boot=$(get_boot_param "boot_param.dual_boot")
|
||||
local file_type=$(identify $1)
|
||||
|
||||
if [ -b /dev/dm-0 ]; then
|
||||
v "Detach all device mapper devices"
|
||||
dmsetup remove_all
|
||||
fi
|
||||
echo "dual_boot=$dual_boot file_type=$file_type"
|
||||
if [ x"${dual_boot}" != xY ]; then
|
||||
nand_do_upgrade "$1"
|
||||
return
|
||||
fi
|
||||
|
||||
case "$file_type" in
|
||||
"ubi") v "Unsupported firmware type: ubinized";;
|
||||
"ubifs") v "Unsupported firmware type: ubifs";;
|
||||
*) ubi_dual_boot_upgrade_tar $1;;
|
||||
esac
|
||||
}
|
||||
|
||||
ubi_do_upgrade "$1"
|
||||
677
patches/0072-add-sonicfi-rap630w-211g.patch
Normal file
677
patches/0072-add-sonicfi-rap630w-211g.patch
Normal file
@@ -0,0 +1,677 @@
|
||||
From eea2581a6ab99f62ce12137cc69e317d8de67215 Mon Sep 17 00:00:00 2001
|
||||
From: Your Name <you@example.com>
|
||||
Date: Wed, 7 Aug 2024 15:52:58 +0800
|
||||
Subject: [PATCH] add sonicfi rap630w 211g
|
||||
|
||||
Signed-off-by: Your Name <you@example.com>
|
||||
---
|
||||
include/image-commands.mk | 27 ++
|
||||
package/base-files/files/lib/upgrade/stage2 | 2 +-
|
||||
scripts/mkits_sonicfi_rap630w_211g.sh | 237 ++++++++++++++++
|
||||
tools/Makefile | 1 +
|
||||
tools/crc32sum/Makefile | 23 ++
|
||||
tools/crc32sum/src/Makefile | 18 ++
|
||||
tools/crc32sum/src/crc32sum.c | 282 ++++++++++++++++++++
|
||||
7 files changed, 589 insertions(+), 1 deletion(-)
|
||||
create mode 100755 scripts/mkits_sonicfi_rap630w_211g.sh
|
||||
create mode 100644 tools/crc32sum/Makefile
|
||||
create mode 100644 tools/crc32sum/src/Makefile
|
||||
create mode 100644 tools/crc32sum/src/crc32sum.c
|
||||
|
||||
diff --git a/include/image-commands.mk b/include/image-commands.mk
|
||||
index dc6ee6e7c1..0013eeb540 100644
|
||||
--- a/include/image-commands.mk
|
||||
+++ b/include/image-commands.mk
|
||||
@@ -291,6 +291,32 @@ define Build/initrd_compression
|
||||
$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),.zstd)
|
||||
endef
|
||||
|
||||
+ifeq ($(CONFIG_TARGET_mediatek_mt7981_DEVICE_sonicfi_rap630w_211g),y)
|
||||
+define Build/fit
|
||||
+ $(TOPDIR)/scripts/mkits_sonicfi_rap630w_211g.sh \
|
||||
+ -D $(DEVICE_NAME) -o $@.its -k $@ \
|
||||
+ -C $(word 1,$(1)) \
|
||||
+ $(if $(word 2,$(1)),\
|
||||
+ $(if $(findstring 11,$(if $(DEVICE_DTS_OVERLAY),1)$(if $(findstring $(KERNEL_BUILD_DIR)/image-,$(word 2,$(1))),,1)), \
|
||||
+ -d $(KERNEL_BUILD_DIR)/image-$$(basename $(word 2,$(1))), \
|
||||
+ -d $(word 2,$(1)))) \
|
||||
+ $(if $(findstring with-rootfs,$(word 3,$(1))),-r $(IMAGE_ROOTFS)) \
|
||||
+ $(if $(findstring with-initrd,$(word 3,$(1))), \
|
||||
+ $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE), \
|
||||
+ -i $(KERNEL_BUILD_DIR)/initrd.cpio$(strip $(call Build/initrd_compression)))) \
|
||||
+ -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
|
||||
+ $(if $(DEVICE_FDT_NUM),-n $(DEVICE_FDT_NUM)) \
|
||||
+ $(if $(DEVICE_DTS_DELIMITER),-l $(DEVICE_DTS_DELIMITER)) \
|
||||
+ $(if $(DEVICE_DTS_LOADADDR),-s $(DEVICE_DTS_LOADADDR)) \
|
||||
+ $(if $(DEVICE_DTS_OVERLAY),$(foreach dtso,$(DEVICE_DTS_OVERLAY), -O $(dtso):$(KERNEL_BUILD_DIR)/image-$(dtso).dtbo)) \
|
||||
+ -c $(if $(DEVICE_DTS_CONFIG),$(DEVICE_DTS_CONFIG),"config-1") \
|
||||
+ -A $(LINUX_KARCH) -v $(LINUX_VERSION) \
|
||||
+ $(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),-r $(ROOTFS/squashfs/$(DEVICE_NAME)))
|
||||
+ PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage $(if $(findstring external,$(word 3,$(1))),\
|
||||
+ -E -B 0x1000 $(if $(findstring static,$(word 3,$(1))),-p 0x1000)) -f $@.its $@.new
|
||||
+ @mv $@.new $@
|
||||
+endef
|
||||
+else
|
||||
define Build/fit
|
||||
$(TOPDIR)/scripts/mkits.sh \
|
||||
-D $(DEVICE_NAME) -o $@.its -k $@ \
|
||||
@@ -314,6 +340,7 @@ define Build/fit
|
||||
-E -B 0x1000 $(if $(findstring static,$(word 3,$(1))),-p 0x1000)) -f $@.its $@.new
|
||||
@mv $@.new $@
|
||||
endef
|
||||
+endif
|
||||
|
||||
define Build/libdeflate-gzip
|
||||
$(STAGING_DIR_HOST)/bin/libdeflate-gzip -f -12 -c $@ $(1) > $@.new
|
||||
diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2
|
||||
index 5ce0b3549c..2f1cb45b6e 100755
|
||||
--- a/package/base-files/files/lib/upgrade/stage2
|
||||
+++ b/package/base-files/files/lib/upgrade/stage2
|
||||
@@ -11,7 +11,7 @@ export VERBOSE=1
|
||||
export CONFFILES=/tmp/sysupgrade.conffiles
|
||||
|
||||
RAMFS_COPY_BIN= # extra programs for temporary ramfs root
|
||||
-RAMFS_COPY_DATA= # extra data files
|
||||
+RAMFS_COPY_DATA="/lib/upgrade/sonicfi/*.sh" # extra data files
|
||||
|
||||
include /lib/upgrade
|
||||
|
||||
diff --git a/scripts/mkits_sonicfi_rap630w_211g.sh b/scripts/mkits_sonicfi_rap630w_211g.sh
|
||||
new file mode 100755
|
||||
index 0000000000..35f2d00767
|
||||
--- /dev/null
|
||||
+++ b/scripts/mkits_sonicfi_rap630w_211g.sh
|
||||
@@ -0,0 +1,237 @@
|
||||
+#!/bin/sh
|
||||
+#
|
||||
+# Licensed under the terms of the GNU GPL License version 2 or later.
|
||||
+#
|
||||
+# Author: Peter Tyser <ptyser@xes-inc.com>
|
||||
+#
|
||||
+# U-Boot firmware supports the booting of images in the Flattened Image
|
||||
+# Tree (FIT) format. The FIT format uses a device tree structure to
|
||||
+# describe a kernel image, device tree blob, ramdisk, etc. This script
|
||||
+# creates an Image Tree Source (.its file) which can be passed to the
|
||||
+# 'mkimage' utility to generate an Image Tree Blob (.itb file). The .itb
|
||||
+# file can then be booted by U-Boot (or other bootloaders which support
|
||||
+# FIT images). See doc/uImage.FIT/howto.txt in U-Boot source code for
|
||||
+# additional information on FIT images.
|
||||
+#
|
||||
+
|
||||
+usage() {
|
||||
+ printf "Usage: %s -A arch -C comp -a addr -e entry" "$(basename "$0")"
|
||||
+ printf " -v version -k kernel [-D name -n address -d dtb] -o its_file"
|
||||
+
|
||||
+ printf "\n\t-A ==> set architecture to 'arch'"
|
||||
+ printf "\n\t-C ==> set compression type 'comp'"
|
||||
+ printf "\n\t-c ==> set config name 'config'"
|
||||
+ printf "\n\t-a ==> set load address to 'addr' (hex)"
|
||||
+ printf "\n\t-e ==> set entry point to 'entry' (hex)"
|
||||
+ printf "\n\t-f ==> set device tree compatible string"
|
||||
+ printf "\n\t-i ==> include initrd Blob 'initrd'"
|
||||
+ printf "\n\t-v ==> set kernel version to 'version'"
|
||||
+ printf "\n\t-k ==> include kernel image 'kernel'"
|
||||
+ printf "\n\t-D ==> human friendly Device Tree Blob 'name'"
|
||||
+ printf "\n\t-n ==> fdt unit-address 'address'"
|
||||
+ printf "\n\t-d ==> include Device Tree Blob 'dtb'"
|
||||
+ printf "\n\t-r ==> include RootFS blob 'rootfs'"
|
||||
+ printf "\n\t-H ==> specify hash algo instead of SHA1"
|
||||
+ printf "\n\t-l ==> legacy mode character (@ etc otherwise -)"
|
||||
+ printf "\n\t-o ==> create output file 'its_file'"
|
||||
+ printf "\n\t-O ==> create config with dt overlay 'name:dtb'"
|
||||
+ printf "\n\t-s ==> set FDT load address to 'addr' (hex)"
|
||||
+ printf "\n\t\t(can be specified more than once)\n"
|
||||
+ exit 1
|
||||
+}
|
||||
+
|
||||
+REFERENCE_CHAR='-'
|
||||
+FDTNUM=1
|
||||
+ROOTFSNUM=1
|
||||
+INITRDNUM=1
|
||||
+HASH=sha1
|
||||
+LOADABLES=
|
||||
+DTOVERLAY=
|
||||
+DTADDR=
|
||||
+
|
||||
+while getopts ":A:a:c:C:D:d:e:f:i:k:l:n:o:O:v:r:s:H:" OPTION
|
||||
+do
|
||||
+ case $OPTION in
|
||||
+ A ) ARCH=$OPTARG;;
|
||||
+ a ) LOAD_ADDR=$OPTARG;;
|
||||
+ c ) CONFIG=$OPTARG;;
|
||||
+ C ) COMPRESS=$OPTARG;;
|
||||
+ D ) DEVICE=$OPTARG;;
|
||||
+ d ) DTB=$OPTARG;;
|
||||
+ e ) ENTRY_ADDR=$OPTARG;;
|
||||
+ f ) COMPATIBLE=$OPTARG;;
|
||||
+ i ) INITRD=$OPTARG;;
|
||||
+ k ) KERNEL=$OPTARG;;
|
||||
+ l ) REFERENCE_CHAR=$OPTARG;;
|
||||
+ n ) FDTNUM=$OPTARG;;
|
||||
+ o ) OUTPUT=$OPTARG;;
|
||||
+ O ) DTOVERLAY="$DTOVERLAY ${OPTARG}";;
|
||||
+ r ) ROOTFS=$OPTARG;;
|
||||
+ s ) FDTADDR=$OPTARG;;
|
||||
+ H ) HASH=$OPTARG;;
|
||||
+ v ) VERSION=$OPTARG;;
|
||||
+ * ) echo "Invalid option passed to '$0' (options:$*)"
|
||||
+ usage;;
|
||||
+ esac
|
||||
+done
|
||||
+
|
||||
+# Make sure user entered all required parameters
|
||||
+if [ -z "${ARCH}" ] || [ -z "${COMPRESS}" ] || [ -z "${LOAD_ADDR}" ] || \
|
||||
+ [ -z "${ENTRY_ADDR}" ] || [ -z "${VERSION}" ] || [ -z "${KERNEL}" ] || \
|
||||
+ [ -z "${OUTPUT}" ] || [ -z "${CONFIG}" ]; then
|
||||
+ usage
|
||||
+fi
|
||||
+
|
||||
+ARCH_UPPER=$(echo "$ARCH" | tr '[:lower:]' '[:upper:]')
|
||||
+
|
||||
+if [ -n "${COMPATIBLE}" ]; then
|
||||
+ COMPATIBLE_PROP="compatible = \"${COMPATIBLE}\";"
|
||||
+fi
|
||||
+
|
||||
+[ "$FDTADDR" ] && {
|
||||
+ DTADDR="$FDTADDR"
|
||||
+}
|
||||
+
|
||||
+# Conditionally create fdt information
|
||||
+if [ -n "${DTB}" ]; then
|
||||
+ FDT_NODE="
|
||||
+ fdt${REFERENCE_CHAR}$FDTNUM {
|
||||
+ description = \"${ARCH_UPPER} OpenWrt ${DEVICE} device tree blob\";
|
||||
+ ${COMPATIBLE_PROP}
|
||||
+ data = /incbin/(\"${DTB}\");
|
||||
+ type = \"flat_dt\";
|
||||
+ ${DTADDR:+load = <${DTADDR}>;}
|
||||
+ arch = \"${ARCH}\";
|
||||
+ compression = \"none\";
|
||||
+ hash${REFERENCE_CHAR}1 {
|
||||
+ algo = \"crc32\";
|
||||
+ };
|
||||
+ hash${REFERENCE_CHAR}2 {
|
||||
+ algo = \"${HASH}\";
|
||||
+ };
|
||||
+ };
|
||||
+"
|
||||
+ FDT_PROP="fdt = \"fdt${REFERENCE_CHAR}$FDTNUM\";"
|
||||
+fi
|
||||
+
|
||||
+if [ -n "${INITRD}" ]; then
|
||||
+ INITRD_NODE="
|
||||
+ initrd${REFERENCE_CHAR}$INITRDNUM {
|
||||
+ description = \"${ARCH_UPPER} OpenWrt ${DEVICE} initrd\";
|
||||
+ ${COMPATIBLE_PROP}
|
||||
+ data = /incbin/(\"${INITRD}\");
|
||||
+ type = \"ramdisk\";
|
||||
+ arch = \"${ARCH}\";
|
||||
+ os = \"linux\";
|
||||
+ hash${REFERENCE_CHAR}1 {
|
||||
+ algo = \"crc32\";
|
||||
+ };
|
||||
+ hash${REFERENCE_CHAR}2 {
|
||||
+ algo = \"${HASH}\";
|
||||
+ };
|
||||
+ };
|
||||
+"
|
||||
+ INITRD_PROP="ramdisk=\"initrd${REFERENCE_CHAR}${INITRDNUM}\";"
|
||||
+fi
|
||||
+
|
||||
+
|
||||
+if [ -n "${ROOTFS}" ]; then
|
||||
+ ROOTFS_SIZE=$(stat -c %s ${ROOTFS})
|
||||
+ ROOTFS_SHA1=$(sha1sum ${ROOTFS} | awk '{print "<0x"substr($0,1,8) " 0x"substr($0,9,8) " 0x"substr($0,17,8) " 0x"substr($0,25,8) " 0x"substr($0,33,8) ">"}')
|
||||
+ ROOTFS_CRC32=$(crc32sum ${ROOTFS})
|
||||
+ ROOTFS_NODE="
|
||||
+ rootfs {
|
||||
+ size = <${ROOTFS_SIZE}>;
|
||||
+ hash-1 {
|
||||
+ value = <0x${ROOTFS_CRC32}>;
|
||||
+ algo = \"crc32\";
|
||||
+ };
|
||||
+ hash-2 {
|
||||
+ value = ${ROOTFS_SHA1};
|
||||
+ algo = \"sha1\";
|
||||
+ };
|
||||
+ };
|
||||
+"
|
||||
+fi
|
||||
+
|
||||
+# add DT overlay blobs
|
||||
+FDTOVERLAY_NODE=""
|
||||
+OVCONFIGS=""
|
||||
+[ "$DTOVERLAY" ] && for overlay in $DTOVERLAY ; do
|
||||
+ overlay_blob=${overlay##*:}
|
||||
+ ovname=${overlay%%:*}
|
||||
+ ovnode="fdt-$ovname"
|
||||
+ ovsize=$(wc -c "$overlay_blob" | awk '{print $1}')
|
||||
+ echo "$ovname ($overlay_blob) : $ovsize" >&2
|
||||
+ FDTOVERLAY_NODE="$FDTOVERLAY_NODE
|
||||
+
|
||||
+ $ovnode {
|
||||
+ description = \"${ARCH_UPPER} OpenWrt ${DEVICE} device tree overlay $ovname\";
|
||||
+ ${COMPATIBLE_PROP}
|
||||
+ data = /incbin/(\"${overlay_blob}\");
|
||||
+ type = \"flat_dt\";
|
||||
+ arch = \"${ARCH}\";
|
||||
+ compression = \"none\";
|
||||
+ hash${REFERENCE_CHAR}1 {
|
||||
+ algo = \"crc32\";
|
||||
+ };
|
||||
+ hash${REFERENCE_CHAR}2 {
|
||||
+ algo = \"${HASH}\";
|
||||
+ };
|
||||
+ };
|
||||
+"
|
||||
+ OVCONFIGS="$OVCONFIGS
|
||||
+
|
||||
+ $ovname {
|
||||
+ description = \"OpenWrt ${DEVICE} overlay $ovname\";
|
||||
+ fdt = \"$ovnode\";
|
||||
+ ${COMPATIBLE_PROP}
|
||||
+ };
|
||||
+ "
|
||||
+done
|
||||
+
|
||||
+# Create a default, fully populated DTS file
|
||||
+DATA="/dts-v1/;
|
||||
+
|
||||
+/ {
|
||||
+ description = \"${ARCH_UPPER} OpenWrt FIT (Flattened Image Tree)\";
|
||||
+ #address-cells = <1>;
|
||||
+
|
||||
+ images {
|
||||
+ kernel${REFERENCE_CHAR}1 {
|
||||
+ description = \"${ARCH_UPPER} OpenWrt Linux-${VERSION}\";
|
||||
+ data = /incbin/(\"${KERNEL}\");
|
||||
+ type = \"kernel\";
|
||||
+ arch = \"${ARCH}\";
|
||||
+ os = \"linux\";
|
||||
+ compression = \"${COMPRESS}\";
|
||||
+ load = <${LOAD_ADDR}>;
|
||||
+ entry = <${ENTRY_ADDR}>;
|
||||
+ hash${REFERENCE_CHAR}1 {
|
||||
+ algo = \"crc32\";
|
||||
+ };
|
||||
+ hash${REFERENCE_CHAR}2 {
|
||||
+ algo = \"$HASH\";
|
||||
+ };
|
||||
+ };
|
||||
+${INITRD_NODE}
|
||||
+${FDT_NODE}
|
||||
+${FDTOVERLAY_NODE}
|
||||
+ };
|
||||
+${ROOTFS_NODE}
|
||||
+ configurations {
|
||||
+ default = \"${CONFIG}\";
|
||||
+ ${CONFIG} {
|
||||
+ description = \"OpenWrt ${DEVICE}\";
|
||||
+ kernel = \"kernel${REFERENCE_CHAR}1\";
|
||||
+ ${FDT_PROP}
|
||||
+ ${LOADABLES:+loadables = ${LOADABLES};}
|
||||
+ ${COMPATIBLE_PROP}
|
||||
+ ${INITRD_PROP}
|
||||
+ };
|
||||
+ ${OVCONFIGS}
|
||||
+ };
|
||||
+};"
|
||||
+
|
||||
+# Write .its file to disk
|
||||
+echo "$DATA" > "${OUTPUT}"
|
||||
diff --git a/tools/Makefile b/tools/Makefile
|
||||
index 40c3ec1ab0..6c7abaaf9c 100644
|
||||
--- a/tools/Makefile
|
||||
+++ b/tools/Makefile
|
||||
@@ -68,6 +68,7 @@ tools-y += sstrip
|
||||
tools-y += zip
|
||||
tools-y += zlib
|
||||
tools-y += zstd
|
||||
+tools-y += crc32sum
|
||||
tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS),y) += liblzo
|
||||
tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_B43_TOOLS),y) += b43-tools
|
||||
tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(BUILD_BZIP2_TOOLS),y) += bzip2
|
||||
diff --git a/tools/crc32sum/Makefile b/tools/crc32sum/Makefile
|
||||
new file mode 100644
|
||||
index 0000000000..bc13ecf92b
|
||||
--- /dev/null
|
||||
+++ b/tools/crc32sum/Makefile
|
||||
@@ -0,0 +1,23 @@
|
||||
+#
|
||||
+# Copyright (C) 2021 MediaTek Inc. All rights reserved.
|
||||
+#
|
||||
+# This is free software, licensed under the GNU General Public License v2.
|
||||
+# See /LICENSE for more information.
|
||||
+#
|
||||
+include $(TOPDIR)/rules.mk
|
||||
+
|
||||
+PKG_NAME:=crc32sum
|
||||
+PKG_VERSION:=1.0
|
||||
+
|
||||
+include $(INCLUDE_DIR)/host-build.mk
|
||||
+
|
||||
+define Host/Prepare
|
||||
+ mkdir -p $(HOST_BUILD_DIR)
|
||||
+ $(CP) -a ./src/* $(HOST_BUILD_DIR)/
|
||||
+endef
|
||||
+
|
||||
+define Host/Install
|
||||
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/crc32sum $(STAGING_DIR_HOST)/bin/
|
||||
+endef
|
||||
+
|
||||
+$(eval $(call HostBuild))
|
||||
diff --git a/tools/crc32sum/src/Makefile b/tools/crc32sum/src/Makefile
|
||||
new file mode 100644
|
||||
index 0000000000..7428ba2f54
|
||||
--- /dev/null
|
||||
+++ b/tools/crc32sum/src/Makefile
|
||||
@@ -0,0 +1,18 @@
|
||||
+#
|
||||
+# Copyright (C) 2021 MediaTek Inc. All rights reserved.
|
||||
+#
|
||||
+# This is free software, licensed under the GNU General Public License v2.
|
||||
+# See /LICENSE for more information.
|
||||
+#
|
||||
+
|
||||
+all: crc32sum
|
||||
+
|
||||
+crc32sum: crc32sum.c
|
||||
+ $(CC) $(CFLAGS) -O2 -ggdb -MD -o $@ $< $(LDFLAGS)
|
||||
+
|
||||
+clean:
|
||||
+ rm -f crc32sum crc32sum.d
|
||||
+
|
||||
+.PHONY: clean
|
||||
+
|
||||
+-include crc32sum.d
|
||||
diff --git a/tools/crc32sum/src/crc32sum.c b/tools/crc32sum/src/crc32sum.c
|
||||
new file mode 100644
|
||||
index 0000000000..381c7a95a7
|
||||
--- /dev/null
|
||||
+++ b/tools/crc32sum/src/crc32sum.c
|
||||
@@ -0,0 +1,282 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Copyright (C) 2021 MediaTek Inc. All Rights Reserved.
|
||||
+ *
|
||||
+ * Author: Weijie Gao <weijie.gao@mediatek.com>
|
||||
+ */
|
||||
+#include <stdio.h>
|
||||
+#include <stdarg.h>
|
||||
+#include <stdint.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <stdbool.h>
|
||||
+#include <string.h>
|
||||
+#include <ctype.h>
|
||||
+#include <errno.h>
|
||||
+#include <getopt.h>
|
||||
+
|
||||
+#ifdef _WIN32
|
||||
+#include <io.h>
|
||||
+#include <fcntl.h>
|
||||
+#define SET_BINARY_MODE(_f) _setmode(_fileno(_f, O_BINARY)
|
||||
+#else
|
||||
+#define SET_BINARY_MODE(_f) ((void)0)
|
||||
+#endif
|
||||
+
|
||||
+#define CRC32_LE_POLY_DEFAULT 0xedb88320
|
||||
+#define CRC32_BE_POLY_DEFAULT 0x04c11db7
|
||||
+#define CRC32_TABLE_ITEMS 256
|
||||
+
|
||||
+static uint32_t crc32_le_calc(uint32_t crc, const uint8_t *data, size_t length,
|
||||
+ const uint32_t *crc_table)
|
||||
+{
|
||||
+ while (length--)
|
||||
+ crc = crc_table[(uint8_t)(crc ^ *data++)] ^ (crc >> 8);
|
||||
+
|
||||
+ return crc;
|
||||
+}
|
||||
+
|
||||
+static void crc32_le_init(uint32_t *crc_table, uint32_t poly)
|
||||
+{
|
||||
+ uint32_t i, j, v;
|
||||
+
|
||||
+ for (i = 0; i < CRC32_TABLE_ITEMS; i++) {
|
||||
+ v = i;
|
||||
+
|
||||
+ for (j = 0; j < 8; j++)
|
||||
+ v = (v >> 1) ^ ((v & 1) ? poly : 0);
|
||||
+
|
||||
+ crc_table[i] = v;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static uint32_t crc32_be_calc(uint32_t crc, const uint8_t *data, size_t length,
|
||||
+ const uint32_t *crc_table)
|
||||
+{
|
||||
+ while (length--)
|
||||
+ crc = crc_table[(uint8_t)((crc >> 24) ^ *data++)] ^ (crc << 8);
|
||||
+
|
||||
+ return crc;
|
||||
+}
|
||||
+
|
||||
+static void crc32_be_init(uint32_t *crc_table, uint32_t poly)
|
||||
+{
|
||||
+ uint32_t i, j, v;
|
||||
+
|
||||
+ for (i = 0; i < CRC32_TABLE_ITEMS; i++) {
|
||||
+ v = i << 24;
|
||||
+
|
||||
+ for (j = 0; j < 8; j++)
|
||||
+ v = (v << 1) ^ ((v & (1 << 31)) ? poly : 0);
|
||||
+
|
||||
+ crc_table[i] = v;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+struct crc_funcs {
|
||||
+ uint32_t poly;
|
||||
+
|
||||
+ void (*init)(uint32_t *crc_table, uint32_t poly);
|
||||
+ uint32_t (*calc)(uint32_t crc, const uint8_t *data, size_t length,
|
||||
+ const uint32_t *crc_table);
|
||||
+};
|
||||
+
|
||||
+static const struct crc_funcs crc32_le = {
|
||||
+ .poly = CRC32_LE_POLY_DEFAULT,
|
||||
+ .init = crc32_le_init,
|
||||
+ .calc = crc32_le_calc,
|
||||
+};
|
||||
+
|
||||
+static const struct crc_funcs crc32_be = {
|
||||
+ .poly = CRC32_BE_POLY_DEFAULT,
|
||||
+ .init = crc32_be_init,
|
||||
+ .calc = crc32_be_calc,
|
||||
+};
|
||||
+
|
||||
+static const struct crc_funcs *crc32_algo = &crc32_le;
|
||||
+static uint32_t crc32_poly;
|
||||
+static uint32_t crc32_val;
|
||||
+static const char *input_file;
|
||||
+static bool output_decimal;
|
||||
+static bool no_comp;
|
||||
+
|
||||
+static void err(const char *fmt, ...)
|
||||
+{
|
||||
+ va_list ap;
|
||||
+
|
||||
+ va_start(ap, fmt);
|
||||
+ fprintf(stderr, "Error: ");
|
||||
+ vfprintf(stderr, fmt, ap);
|
||||
+ va_end(ap);
|
||||
+}
|
||||
+
|
||||
+static void usage(FILE *con, const char *progname, int exitcode)
|
||||
+{
|
||||
+ const char *prog;
|
||||
+ size_t len;
|
||||
+
|
||||
+ len = strlen(progname);
|
||||
+ prog = progname + len - 1;
|
||||
+
|
||||
+ while (prog > progname) {
|
||||
+ if (*prog == '\\' || *prog == '/') {
|
||||
+ prog++;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ prog--;
|
||||
+ }
|
||||
+
|
||||
+ fprintf(con, "CRC32 checksum tool\n");
|
||||
+ fprintf(con, "\n");
|
||||
+ fprintf(con, "Usage: %s [options] <input_file>\n", prog);
|
||||
+ fprintf(con, "\n");
|
||||
+ fprintf(con, "Options:\n");
|
||||
+ fprintf(con, "\t-h display help message\n");
|
||||
+ fprintf(con, "\t-i <val> crc value for incremental calculation\n");
|
||||
+ fprintf(con, "\t (default is 0)\n");
|
||||
+ fprintf(con, "\t-p <val> polynomial for calculation\n");
|
||||
+ fprintf(con, "\t (default is 0x%08x for LE, 0x%08x for BE)\n",
|
||||
+ crc32_le.poly, crc32_be.poly);
|
||||
+ fprintf(con, "\t-b use big-endian mode\n");
|
||||
+ fprintf(con, "\t-n do not use one's complement\n");
|
||||
+ fprintf(con, "\t-d use decimal output\n");
|
||||
+ fprintf(con, "\n");
|
||||
+
|
||||
+ exit(exitcode);
|
||||
+}
|
||||
+
|
||||
+static int parse_args(int argc, char *argv[])
|
||||
+{
|
||||
+ int opt;
|
||||
+
|
||||
+ static const char *optstring = "i:p:bndh";
|
||||
+
|
||||
+ opterr = 0;
|
||||
+
|
||||
+ while ((opt = getopt(argc, argv, optstring)) >= 0) {
|
||||
+ switch (opt) {
|
||||
+ case 'i':
|
||||
+ if (!isxdigit(optarg[0])) {
|
||||
+ err("Invalid crc value - %s\n", optarg);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ crc32_val = strtoul(optarg, NULL, 0);
|
||||
+ break;
|
||||
+
|
||||
+ case 'p':
|
||||
+ if (!isxdigit(optarg[0])) {
|
||||
+ err("Invalid polynomial value - %s\n", optarg);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ crc32_poly = strtoul(optarg, NULL, 0);
|
||||
+ break;
|
||||
+
|
||||
+ case 'b':
|
||||
+ crc32_algo = &crc32_be;
|
||||
+ break;
|
||||
+
|
||||
+ case 'n':
|
||||
+ no_comp = true;
|
||||
+ break;
|
||||
+
|
||||
+ case 'd':
|
||||
+ output_decimal = true;
|
||||
+ break;
|
||||
+
|
||||
+ case 'h':
|
||||
+ usage(stdout, argv[0], 0);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ usage(stderr, argv[0], EXIT_FAILURE);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!crc32_poly)
|
||||
+ crc32_poly = crc32_algo->poly;
|
||||
+
|
||||
+ if (optind >= argc)
|
||||
+ input_file = "-";
|
||||
+ else
|
||||
+ input_file = argv[optind];
|
||||
+
|
||||
+ if (!input_file[0]) {
|
||||
+ err("Input file must not be empty\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int crc32_calc(void)
|
||||
+{
|
||||
+ uint32_t crc_table[CRC32_TABLE_ITEMS];
|
||||
+ bool using_stdin = false;
|
||||
+ uint8_t buf[4096];
|
||||
+ size_t size;
|
||||
+ int ret, i;
|
||||
+ FILE *f;
|
||||
+
|
||||
+ if (!strcmp(input_file, "-")) {
|
||||
+ SET_BINARY_MODE(stdin);
|
||||
+ using_stdin = true;
|
||||
+ f = stdin;
|
||||
+ } else {
|
||||
+ f = fopen(input_file, "rb");
|
||||
+ }
|
||||
+
|
||||
+ if (!f) {
|
||||
+ err("Failed to open file '%s'\n", input_file);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ crc32_algo->init(crc_table, crc32_poly);
|
||||
+
|
||||
+ if (!no_comp)
|
||||
+ crc32_val ^= 0xffffffff;
|
||||
+
|
||||
+ do {
|
||||
+ size = fread(buf, 1, sizeof(buf), f);
|
||||
+
|
||||
+ if (size) {
|
||||
+ crc32_val = crc32_algo->calc(crc32_val, buf, size,
|
||||
+ crc_table);
|
||||
+ }
|
||||
+
|
||||
+ if (size < sizeof(buf)) {
|
||||
+ ret = ferror(f);
|
||||
+
|
||||
+ if (!ret && feof(f))
|
||||
+ break;
|
||||
+
|
||||
+ err("Error while reading file: %d\n", ret);
|
||||
+ break;
|
||||
+ }
|
||||
+ } while (true);
|
||||
+
|
||||
+ if (!using_stdin)
|
||||
+ fclose(f);
|
||||
+
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (!no_comp)
|
||||
+ crc32_val ^= 0xffffffff;
|
||||
+
|
||||
+ if (output_decimal)
|
||||
+ printf("%u\n", crc32_val);
|
||||
+ else
|
||||
+ printf("%08x\n", crc32_val);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ if (parse_args(argc, argv))
|
||||
+ return 1;
|
||||
+
|
||||
+ return crc32_calc();
|
||||
+}
|
||||
--
|
||||
2.43.2
|
||||
|
||||
19
profiles/sonicfi_rap630w-211g.yml
Normal file
19
profiles/sonicfi_rap630w-211g.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
profile: sonicfi_rap630w_211g
|
||||
target: mediatek
|
||||
subtarget: mt7981
|
||||
description: Build image for the Mediatek MT7981
|
||||
image: bin/targets/mediatek/mt7981/openwrt-mediatek-mt7981-sonicfi_rap630w_211g-squashfs-sysupgrade.tar
|
||||
feeds:
|
||||
- name: mediatek
|
||||
path: ../../feeds/mediatek-sdk
|
||||
include:
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- mediatek
|
||||
diffconfig: |
|
||||
# CONFIG_PACKAGE_kmod-nft-offload is not set
|
||||
# CONFIG_PACKAGE_procd-ujail is not set
|
||||
# CONFIG_PACKAGE_kmod-usb3 is not set
|
||||
# CONFIG_PACKAGE_mt7981-wo-firmware is not set
|
||||
CONFIG_PACKAGE_uboot-envtools=y
|
||||
Reference in New Issue
Block a user