Nethub用户手册:修订间差异

来自Bouffalo Lab Docs
跳转到导航 跳转到搜索
张良留言 | 贡献
张良留言 | 贡献
无编辑摘要
第1行: 第1行:
博流智能芯片(BL616C/BL618M/BL618DG/BL616CL)的 Linux 主机通信方案,提供内核模块和用户态控制工具。
博流智能芯片(BL616C/BL618M/BL618DG/BL616CL)的 Linux 主机通信方案,提供内核模块和用户态控制工具。


= = 系统架构 =
= 系统架构 =
[[文件:Arch host device.png|缩略图]]
[[文件:Arch host device.png|缩略图]]



2026年2月28日 (六) 05:44的版本

博流智能芯片(BL616C/BL618M/BL618DG/BL616CL)的 Linux 主机通信方案,提供内核模块和用户态控制工具。

系统架构

说明:当前控制通道通过 tty 传输,后续将支持通过 VirtualChannel 传输 AT 命令。

架构说明

整个系统分为主机端设备端两部分:

主机端(Linux)

用户空间

  • bflbwifictrl:命令行工具,通过 Unix Socket 与守护进程通信
  • bflbwifid:守护进程,负责与设备通信和管理 WiFi 连接
  • libbflbwifi:静态库,提供 WiFi 控制 API
  • nethub_vchan_app:VirtualChannel 通信程序,提供私有数据通道。以消息包为单位传输,底层接收也是一条一条完整的数据包(非流式)

内核空间

  • mr_sdio.ko:内核驱动模块,支持 SDIO 接口
  • /dev/ttyAT:字符设备节点,提供用户态与内核态通信接口

设备端(博流芯片)

支持的芯片型号

  • BL616C(WiFi6 + BLE + 低功耗)
  • BL618M(WiFi6 + BLE + PSRAM)
  • BL618DG(WiFi6 + BLE + 低功耗 + 双核 + 双频)
  • BL616CL(WiFi6 + BLE + 低功耗)

数据流向

用户命令:bflbwifictrl → bflbwifid → libbflbwifi → /dev/ttyAT → 内核驱动 → 设备
URC事件:设备 → 内核驱动 → /dev/ttyAT → bflbwifid → 解析处理 → 网卡配置

工作原理

1. 初始化流程

┌─────────────┐
│ 加载内核模块 │ → sudo ./build.sh load
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ 启动守护进程 │ → sudo ./output/bflbwifid -p /dev/ttyAT0
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ TTY 通信建立 │ → AT 命令握手
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   准备就绪   │ → 可以接收用户命令
└─────────────┘

2. WiFi 连接流程

# 1. 用户发起连接
$ sudo ./output/bflbwifictrl connect_ap "MyWiFi" "password"

# 2. bflbwifid 收到命令,发送 AT 指令到设备
AT+CWJAP="MyWiFi","password"

# 3. 设备返回 URC 事件
+CW:CONNECTING
+CW:CONNECTED
+CW:GOTIP,IP:192.168.1.100,gw:192.168.1.1,mask:255.255.255.0,dns:192.168.1.1

# 4. bflbwifid 解析 URC,自动配置 Linux 网卡(如果启用)
ip addr add 192.168.1.100/24 dev mr_eth0
ip route add default via 192.168.1.1 dev mr_eth0

# 5. 连接完成,可以访问网络
ping -c 4 8.8.8.8

目录结构

nethub/
├── build.sh              # 一键构建脚本
├── README.md             # 英文文档
├── README_CN.md          # 本文档(中文)
├── doc/                  # 文档和图片
│   └── images/
│       └── arch_host_device.png  # 架构图
├── kernel/               # 内核模块源码
│   ├── Kconfig          # 内核配置菜单
│   ├── Makefile          # 编译配置
│   ├── sdio/             # SDIO 驱动
│   ├── net/              # 网络接口驱动
│   └── tty/              # TTY 字符设备驱动
├── virtualchan/          # VirtualChan 通信程序
├── bflbwifictrl/         # WiFi 控制模块
│   ├── app/              # 应用程序
│   │   ├── bflbwifid     # 守护进程
│   │   └── bflbwifictrl  # CLI 工具
│   ├── include/          # 头文件
│   │   ├── bflbwifi.h
│   │   ├── bflbwifi_log.h
│   │   └── bflbwifi_netif.h
│   └── src/              # 源代码
│       ├── bflbwifi_*.c  # 各功能模块
│       └── Makefile
└── output/               # 编译输出(构建后生成)
    ├── mr_sdio.ko        # 内核模块
    ├── bflbwifid         # WiFi 守护进程
    └── bflbwifictrl      # WiFi 命令行工具
nethub/
├── build.sh              # 一键构建脚本
├── kernel/               # 内核模块(mr_sdio 驱动)
├── virtualchan/          # VirtualChan 通信程序
├── bflbwifictrl/         # WiFi 控制(CLI + 守护进程)
├── output/               # 编译输出目录
│   ├── mr_sdio.ko        # 内核模块
│   ├── bflbwifid         # WiFi 守护进程
│   └── bflbwifictrl      # WiFi 命令行工具
└── README_CN.md          # 本文档

快速开始

1. 编译

cd nethub/
./build.sh build

编译产物将输出到 output/ 目录。

2. 加载内核模块

sudo ./build.sh load

3. 运行 WiFi 守护进程

# 启动守护进程(默认使用 /dev/ttyAT0)
sudo ./output/bflbwifid -p /dev/ttyAT0

# 或查看帮助
sudo ./output/bflbwifid -h

4. 使用 WiFi 控制工具

# 扫描 AP
sudo ./output/bflbwifictrl scan

# 连接 AP(无密码)
sudo ./output/bflbwifictrl connect_ap "SSID"

# 连接 AP(有密码)
sudo ./output/bflbwifictrl connect_ap "SSID" "password"

# 查看状态
sudo ./output/bflbwifictrl status

# 断开连接
sudo ./output/bflbwifictrl disconnect

命令说明

build.sh 命令

命令 说明
build 编译内核模块、virtualchan 和 bflbwifictrl
clean 清理所有编译产物
load 加载内核模块 mr_sdio.ko
unload 卸载内核模块

bflbwifictrl 命令

命令 说明
scan 扫描附近 AP
connect_ap <SSID> [密码] 连接到 AP
disconnect 断开连接
status 查看连接状态
version 查看固件版本

功能特性

bflbwifid(守护进程)

  • TTY 通信:与 WiFi 模块通过串口通信
  • AT 协议:解析和封装 AT 指令
  • 状态管理:维护 WiFi 连接状态
  • Unix Socket:提供 IPC 通信接口
  • GOTIP 自动配置(可选):收到 IP 后自动配置 Linux 网卡

bflbwifictrl(命令行工具)

  • CLI 接口:通过 Unix Socket 与守护进程通信
  • 简洁易用:提供常用 WiFi 操作命令
  • 状态查询:实时显示连接信息

GOTIP 自动配置功能(默认启用)

当 WiFi 模块获取 IP 后,会自动:

  1. 解析 URC:+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx
  2. 配置网卡:ip addr addip route add default
  3. 配置 DNS:写入 /etc/resolv.conf

注意事项

  • 部分host需要禁用 NetworkManager:sudo systemctl disable --now NetworkManager
  • 需要禁用 dhcpcd:sudo systemctl disable --now dhcpcd
  • 默认网卡名为 mr_eth0(可在代码中修改)

开发流程

修改代码后重新编译

# 只编译 bflbwifictrl
cd bflbwifictrl
make clean
make

# 或使用 build.sh 编译所有
cd ..
./build.sh build

重新加载内核模块

sudo ./build.sh unload
sudo ./build.sh load

常见问题

1. 找不到串口设备

# 查看可用串口
ls /dev/ttyACM* /dev/ttyUSB*

# 添加用户到 dialout 组(避免每次都用 sudo)
sudo usermod -aG dialout $USER
# 然后重新登录

2. IP 配置后自动消失

原因:NetworkManager 或 dhcpcd 覆盖了手动配置。

解决

# 禁用 NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

# 禁用 dhcpcd
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd

3. 查看调试日志

# 查看守护进程日志
tail -f /var/log/bflbwifi.log

# 查看内核日志
dmesg -w

# 守护进程前台运行(查看实时输出)
sudo ./output/bflbwifid -p /dev/ttyAT0 --foreground

4. 编译错误

# 确保安装必要的开发包
sudo apt-get install build-essential libc-dev-i386

# 树莓派需要安装 32 位兼容库
sudo apt-get install libc6:i386 libstdc++6:i386

系统要求

  • 内核版本:Linux 3.7+(内核模块需要)
  • 架构:x86_64、ARMv7(树莓派)、ARMv8(树莓派 4/5)
  • 依赖:gcc、make、libc、pthread

兼容性说明

  • ✅ 用户空间程序(bflbwifid/bflbwifictrl):无内核版本限制
  • ✅ 内核模块(mr_sdio.ko):支持 Linux 3.7+
  • ✅ 已测试:Linux raspberrypi 6.12.25+rpt-rpi-v8

许可证

本项目遵循 Bouffalo SDK 许可协议。