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

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装