2021年2月8日 星期一

從Openwrt Release的版本中修改dts並且重新封裝.

     由於手邊有一片比較特別的板子, 是MT7620A+MT7530的評估板(EVB). 而Openwrt對這塊板子的dts與實際上略有不同. 主要是在於factory區段. 原廠是將MAC Address與WIFI一些資料放在MTD2當中, 而Openwrt的DTS則沒有指定. 以致於WIFI部份需要將/dev/mtd2的前512kb倒至/lib/firmware/soc_wmac.eeprom才會正常辨認到無線晶片. 

#dd if=/dev/mtd2 of=/lib/firmware/soc_wmac.eeprom

    而第二個問題是有線網路的MAC Address也會因為dts沒有指定到正確的位置, 所以每一次開機都會產生隨機的位置, 雖然對於使用上沒什麼問題...

    是可以重新編譯image來克服這些, 但是DTB的修改在一般的操作上只能在master下作修改, 但是這會造成package只能安裝自行編譯的版本... 這一點在操作上比較不方便. 若是使用官方Release的版本則是只能使用固定的DTB. 但是固定的DTB就是會有不方便的情況發生...

 

  在搜尋了一下, 國外有人提供了RT3050的Flash size的dts/dtb的修改方式, 照著操作是不會成功, 因為參考的來源是用LEDE 17.xx版本, 與目前最新版Openwrt 19.04.06是有所不同的. 經過一些調整後還是成功了. 只是不確定是不是只有ramips系列可以, 還是全部都可以這樣作... 這邊之後有空再拿ar71xx的設備來玩玩好了


以下是參考國外的操作 並且修改後實測完成的.  使用的環境是Ubuntu 18.04 LTS x64.

1. 下載你要的Openwrt Image Builder. 並且解壓縮. 這邊以Openwrt 19.07.6 ramips為例. #號表示指令的開始, 後面都是同樣的.

#wget https://downloads.openwrt.org/releases/19.07.6/targets/ramips/mt7620/openwrt-imagebuilder-19.07.6-ramips-mt7620.Linux-x86_64.tar.xz
#tar xf openwrt-imagebuilder-19.07.6-ramips-mt7620.Linux-x86_64.tar.xz
#cd openwrt-imagebuilder-19.07.6-ramips-mt7620.Linux-x86_64

2. 建立並修改你要的dts.

#cp target/linux/ramips/dts/MT7620a_MT7530.dts target/linux/ramips/dts/MT7620a_MT7530.dts.modified

#nano target/linux/ramips/dts/MT7620a_MT7530.dts.modified

修改第三行的#include "mt7620a.dtsi"為/include/ "mt7620a.dtsi" 因為後面的操作會錯誤

在&ethernet當中新增mtd-mac-address = <&factory 0x28>;

在最後新增以下 空格請依照實際上給

&wmac {
        ralink,mtd-eeprom = <&factory 0>;
        mtd-mac-address = <&factory 0x4>;
}

3. 建立image並且指定你要的package. 因為是使用image builder, 所以不會像git clone那樣全部重編 一些package的東西會使用現成編好的下載來使用. 實際上會用到哪些package每個人都不太一樣. 另外因為當初操作的時候有發生一些錯誤, 有去修改了config-4.14內 將CONFIG_MIPS_RAW_APPENDED_DTB Enable. 這邊後面會再提.

#nano ./target/linux/ramips/mt7620/config-4.14



#make image PROFILE=mt7620a_mt7530 FILES=files/ PACKAGES="luci uhttpd odhcp6c odhcp-ipv6only""


4. 設定會用到的環境參數 並且開始執行.

#ORIGVMLINUX=build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/vmlinux
#DTBFILE=build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/image-MT7620a_MT7530.dtb
#TMPFWFILE=build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/tmp/openwrt-19.07.06-#ramips-mt7620a_mt7530-squashfs-sysupgrade.bin
#UIMAGE=build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/uImage.lzma


#./build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/linux-4.14.215/scripts/dtc/dtc -O dtb -o ./${DTBFILE} ./target/linux/ramips/dts/MT7620a_MT7530.dts.modified
#cat ${ORIGVMLINUX} ${DTBFILE} > ${ORIGVMLINUX}-mt7620-mt7530
#./staging_dir/host/bin/lzma e ${ORIGVMLINUX}-mt7620-mt7530 -lc1 -lp2 -pb2 ${ORIGVMLINUX}-mt7620-mt7530.lzma
#./staging_dir/host/bin/mkimage -A mips -O linux -T kernel -C lzma -a 0x80000000 -e 0x80000000 -n "MIPS OpenWrt Linux 4.14.215" -d ${ORIGVMLINUX}-mt7620-mt7530.lzma ${UIMAGE}
#dd if=${UIMAGE} > ${TMPFWFILE}
#dd if=build_dir/target-mipsel_24kc_musl/linux-ramips_mt7620/root.squashfs >> ${TMPFWFILE}
#./staging_dir/host/bin/padjffs2 ${TMPFWFILE} 4 8 16 64 128 256
#echo '{  "metadata_version": "1.0", "supported_devices":["mt7620a_mt7530"], "version": { "dist": "OpenWrt",  "version": "19.07.6, "revision": "r11278-8055e38794", "target": "ramips/mt7620", "board": "mt7620a_mt7530" } }' | ./staging_dir/host/bin/fwtool -I - ${TMPFWFILE}
#cp ${TMPFWFILE} bin/targets/ramips/mt7620/openwrt-19.07.6-ramips-mt7620-mt7620a_mt7530-squashfs-sysupgrade.bin


5. 燒進目標的EVB然後重開機! 失敗就再回去看一下哪邊打錯..


    原始參考來自以下, 而實際上因為時空背景不同版本變更, 所以像patch-dtb會跳出DTB Marker not found而沒辦法下一步, 以及dts編成dtb時會在#include跳出錯誤. 因此這部份與原始的會有所不同.

    patch-dtb的作用是將DTB與vmlinux合併成一個檔案, 同時將DTB放在前16KB的位置. 但是因為Openwrt在19版開始就換了方式了, 變成將DTB放在vmlinux的最後. 而且新版的DTB不包含OWRTDTB:這個字串 所以patch-dtb也不會找到這個DTB Marker. 最後是直接將vmlinux與DTB貓進新的檔案就可以了. 另外也因為19版開始的機制不同, 會需要新增CONFIG_MIPS_RAW_APPENDED_DTB=y的設定在config檔內.

cat ${ORIGVMLINUX} ${DTBFILE} > ${ORIGVMLINUX}-mt7620-mt7530

    mkimage以及echo那一段的一些資訊可以從一開始make image跑完後, 使用notepad++之類的程式打開編好的bin檔. 直接搜尋supported那邊就會有資訊可以照抄, 像是revision之類的.




參考來源 https://forum.openwrt.org/t/dts-support-in-imagebuilder/12320/4


接下來就試著不用image builder來作作看. 然後再順手改成32MB的Flash. 並且reboot會動的image.



沒有留言:

張貼留言