BL808 Linux 支持WIFI 固件编译流程

2024-02-20 04:12

本文主要是介绍BL808 Linux 支持WIFI 固件编译流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

接上一篇文章《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的时延也很长。

有建议的朋友可在评论区留言。

这篇关于BL808 Linux 支持WIFI 固件编译流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726998

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4