原本不想追版本的 但19.07一直有個問題,雖然後來發現那個不是Openwrt或Lyra Trio的問題。
這次來用imagebuilder來作吧!
先來搞定22.03.0用的dts,就是以下檔案。放在imagebuilder裡面。跟19.07.10有一點差別。
./target/linux/ath79/dts/qca9563_asus_map-ac1750.dts
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include "qca956x.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
/ {
model = "ASUS Lyra Trio MAP-AC1750";
compatible = "asus,map-ac1750", "qca,qca9563";
aliases {
led-boot = &led_blue;
led-failsafe = &led_red;
led-running = &led_blue;
led-upgrade = &led_green;
};
leds {
compatible = "gpio-leds";
led_red: led_red {
label = "red";
gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
};
led_blue: led_blue {
label = "blue";
gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
};
led_green: led_green {
label = "green";
gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
};
};
keys {
compatible = "gpio-keys";
wps {
label = "WPS button";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
reset {
label = "Reset button";
linux,code = <KEY_RESTART>;
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
gpio-export {
compatible = "gpio-export";
gpio_ar3012_power {
gpio-export,name = "asus:power:ar3012";
gpio-export,output = <1>;
gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
};
gpio_ar3012_reset {
gpio-export,name = "asus:reset:ar3012";
gpio-export,output = <1>;
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
};
};
};
&uart {
status = "okay";
};
&gpio {
status = "okay";
};
&pcie {
status = "okay";
};
&spi {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x000000 0x40000>;
read-only;
};
partition@40000 {
label = "u-boot-env";
reg = <0x040000 0x10000>;
read-only;
};
art: partition@50000 {
label = "art";
reg = <0x050000 0x10000>;
read-only;
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;
macaddr_art_1002: macaddr@1002 {
reg = <0x1002 0x6>;
};
};
partition@60000 {
compatible = "denx,uimage";
label = "firmware";
reg = <0x060000 0x1fa0000>;
};
};
};
};
&usb_phy0 {
status = "okay";
};
&usb0 {
status = "okay";
};
&usb_phy1 {
status = "okay";
};
&usb1 {
status = "okay";
};
&mdio0 {
status = "okay";
phy-mask = <0>;
phy0: ethernet-phy@0 {
reg = <0>;
phy-mode = "sgmii";
qca,ar8327-initvals = <
0x04 0x00080080 /* PORT0 PAD MODE CTRL */
0x7c 0x0000007e /* PORT0_STATUS */
>;
};
};
ð0 {
status = "okay";
nvmem-cells = <&macaddr_art_1002>;
nvmem-cell-names = "mac-address";
mac-address-increment = <1>;
phy-handle = <&phy0>;
};
&wmac {
status = "okay";
mtd-cal-data = <&art 0x1000>;
mtd-mac-address = <&art 0x1002>;
};
修改generic.mk
./target/linux/ath79/image/generic.mk
define Device/asus_map-ac1750
SOC := qca9563
DEVICE_VENDOR := ASUS
DEVICE_MODEL := MAP-AC1750
IMAGE_SIZE := 16000k
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct-htt kmod-usb-core kmod-usb2
SUPPORTED_DEVICES += map-ac1750
endef
TARGET_DEVICES += asus_map-ac1750
修改Network
./target/linux/ath79/generic/base-files/etc/board.d/02_network
;;
asus,map-ac1750|\
compex,wpj344-16m|\
compex,wpj563)
ucidef_add_switch "switch0" \
"0@eth0" "3:lan" "2:wan"
;;
修改ATH10K Calibration Data
./target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
engenius,enstationac-v1|\
glinet,gl-x750)
caldata_extract "art" 0x5000 0x844
ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) 2)
;;
asus,map-ac1750)
caldata_extract "art" 0x5000 0x844
ath10k_patch_mac $(mtd_get_mac_binary art 0x5006)
;;
asus,rp-ac66|\
comfast,cf-wr650ac-v1|\
comfast,cf-wr650ac-v2|\
修改targetinfo
./.targetinfo
Target-Profile-Description:
Build firmware images for Aruba AP-105
@@
Target-Profile: DEVICE_asus_map-ac1750
Target-Profile-Name: ASUS MAP-AC1750
Target-Profile-Packages: kmod-ath10k-ct ath10k-firmware-qca988x-ct kmod-usb2
Target-Profile-hasImageMetadata: 1
Target-Profile-SupportedDevices: asus,map-ac1750
Target-Profile-Description:
Build firmware images for ASUS Lyra Trio MAP-AC1750
@@
Target-Profile: DEVICE_asus_rp-ac66
Target-Profile-Name: ASUS RP-AC66
修改profile.mk
./.profile.mk
第一行加Device_asus_map-ac1750
下面加入以下
DEVICE_aruba_ap-105_SUPPORTED_DEVICES:=aruba,ap-105
DEVICE_aruba_ap-105_PACKAGES:=kmod-i2c-gpio kmod-tpm-i2c-atmel
DEVICE_asus_map-ac1750_NAME:=ASUS MAP-AC1750
DEVICE_asus_map-ac1750_HAS_IMAGE_METADATA:=1
DEVICE_asus_map-ac1750_SUPPORTED_DEVICES:=asus,map-ac1750
DEVICE_asus_map-ac1750_PACKAGES:=kmod-ath10k-ct ath10k-firmware-qca988x-ct kmod-usb2
DEVICE_asus_rp-ac66_NAME:=ASUS RP-AC66
DEVICE_asus_rp-ac66_HAS_IMAGE_METADATA:=1
imagebuilder不會重新編譯,所以前面製作的dts要手動編譯產生blob。由於dts是用C的語法,需要先作一次preprocessing轉成標準dtc後再編成blob。這邊要用到cpp以及include。我的作法是在imagebuilder的同一層放Openwrt git clone並且編譯過的就會包含include folder。
blob: qca9563_asus_map-ac1750.dtb
cpp -nostdinc -I../openwrt/build_dir/target-mips_24kc_musl/linux-ath79_generic/linux-5.10.138/include/ \
-I./target/linux/ath79/dts -undef -x assembler-with-cpp ./target/linux/ath79/dts/qca9563_asus_map-ac1750.dts | \
./build_dir/target-mips_24kc_musl/linux-ath79_generic/linux-5.10.138/scripts/dtc/dtc -O dtb -b 0 -o ./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.dtb
與vmlinux合併
cat ./build_dir/target-mips_24kc_musl/linux-ath79_generic/{vmlinux,image-qca9563_asus_map-ac1750.dtb} > \
./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.tmp
lzma壓縮
./staging_dir/host/bin/lzma e ./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.tmp \
-lc1 -lp2 -pb2 ./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.lzma
產生UIMAGE
./staging_dir/host/bin/mkimage -A mips -O linux -T kernel -C lzma -a 0x80060000 -e 0x80060000 \
-n "MIPS OpenWrt Linux 5.10.138" \
-d ./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.lzma \
./build_dir/target-mips_24kc_musl/linux-ath79_generic/asus_map-ac1750-kernel.bin
刪掉前面產生的暫存檔
rm ./build_dir/target-mips_24kc_musl/linux-ath79_generic/image-qca9563_asus_map-ac1750.{tmp,lzma}
到此應該要有image-asus_map-ac1750-kernel.bin這個檔案,怕出錯可以用binwalk去看一下跟官方Release的有沒有一樣,除了CRC與Length以外應該都一樣。bin檔裡包含了官方Release的vmlinux以及自編的blob。並且可以從make info當中找到asus,map-ac1750的資訊,就可以用make image產生完整的Openwrt image了。預設下Image Builder不會含luci的界面,直接指定luci-ssl會自動下載相依的ipk作包裝。同時因為前面有修改base-file的東西,需要指定FILES才會套用。
make image PROFILE=asus_map-ac1750 PACKAGE="luci-ssl" \ FILES="./target/linux/ath79//generic/base-files/
差不多就醬…
PS: 前面講的不是Openwrt也不是Lyra Trio 那自然是我的問題啊…
PS2: 22.03的MAC Address不吃mtd-mac-address的設定了,所以要改用nvmem-cell處理…(4 days)
PS3: 有關5G Channel問題只要先選Country Code後,符合的頻道就可以用了。
PS4: 用imagebuilder作的原因主要是編完的沒辦法用官方的kmod 可能跟feeds有關吧。
PS5: 流程驗證並修正一些命令。並且dts套用標準的Lyra Trio的作法,用2.4G MAC +1。排版跑掉了…