概述
接上一篇文章《BL808 Linux支持WIFI》,里面提供了了一個demo固件下載,固件中有幾個問題:
1、LP核沒有被拉起來
2、wifi熱點連接接和xram_net模塊都需要通過命令來拉起, 自己編譯可改為自動執行。
3、D0核的loader代碼中加了調試延時,過10秒左右才啟動的內核
4、D0核的xram_net編譯成內核模塊,且沒自動加載,IP配置也是固定的
5、LP核運行起來后會使M0核運行變慢。
目前對LWIP暫未做深入研究,大致思路是將Linux的從虛擬網口發送的包通過xram共享內存轉發給rt-thread,然后再調用wifi驅動發送出去,在rt-thread側收到wifi包時將其通過xram轉發給Linux的虛擬網口,核心是圍繞網絡包的傳遞。我理解應該也可以在rt-threa側實現一個虛擬網卡來應對Linux側的虛擬網卡,然后利用LWIP的轉發功能來實現包轉發,歡迎懂的朋友可以評論區交流下。
編譯M0核固件
拉取rt-thread代碼
git clone https://gitee.com/daiyinger/rt-thread -b xram_net
M0核和LP核代碼編譯的詳細步驟可參考bsp/bouffalo_lab/bl808/README.md文件,以下是簡要步驟:
進入BL808 M0核代碼編譯目錄
cd bsp/bouffalo_lab/bl808/m0
首次編譯需執行
source ~/.env/env.sh
scons --menuconfig
pkgs --update
編譯時執行
scons
最后會在當前目錄下生成rtthread_m0.bin用于燒寫
編譯LP核固件
進入BL808 LP核代碼編譯目錄
cd bsp/bouffalo_lab/bl808/lp
首次編譯執行
scons --menuconfig
pkgs --update
編譯時執行
scons
最后會在當前目錄下生成rtthread_lp.bin用于燒寫
目前發現LP核啟動后M0核執行速度會變慢,除非在idle任務hook函數中加入WFI指令,知道原因的朋友歡迎留言。
編譯D0核Loader
執行如下命令拉取loader倉庫代碼。
git clone https://github.com/daiyinger/Low-Starup-BL808 -b load_linux
將編譯工具鏈路徑加到環境變量PATH中,具體路徑需根據自己存放位置做調整。
Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1工具鏈下載地址,也可參考下面Linux編譯工具鏈下載步驟。
linuxtoolchain_gcc_t-head工具下載鏈接:百度網盤 請輸入提取碼 提取碼:mqbe
export PATH=$PATH:/mnt/BL808/toolchain/Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1/bin
export PATH=$PATH:/mnt/BL808/toolchain/linuxtoolchain_gcc_t-head/bin
執行 ./build.sh
編譯結束后生成的out目錄下的spl_bl808_d0.bin用于引導Linux,可將其替換到下面M1s_BL808_Linux_SDK/pre_build_bin目錄下
編譯D0核Linux Image
拉取Linux倉庫代碼
git clone git@github.com:daiyinger/M1s_BL808_Linux_SDK.git -b xram_net
進入M1s_BL808_Linux_SDK目錄,參考readme文件下載工具鏈
mkdir -p toolchain/cmake toolchain/elf_newlib_toolchain toolchain/linux_toolchain
curl https://cmake.org/files/v3.19/cmake-3.19.3-Linux-x86_64.tar.gz | tar xz -C toolchain/cmake/ --strip-components=1
curl https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142243961/Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1-20220906.tar.gz | tar xz -C toolchain/elf_newlib_toolchain/ --strip-components=1
curl https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142514282/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.1-20220906.tar.gz | tar xz -C toolchain/linux_toolchain/ --strip-components=1
如果上面的loader有更改,可將spl_bl808_d0.bin替換到pre_build_bin目錄下
執行 ./build.sh all
編譯完后在out目錄下生成whole_img_d0.bin用于燒寫
如需更改xram_net驅動,路徑位于linux-5.10.4-808/drivers/net/xram_net/
如不需要每次都重新打包rootfs,可注釋掉build.sh中的./mk_rootfs.sh
目前測試WIFI帶寬不高,UDP往返測試也就200K左右,ping的時延也很長。
有建議的朋友可在評論區留言。