Nethub用户手册
博流智能芯片(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 后,会自动:
- 解析 URC:
+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx - 配置网卡:
ip addr add、ip route add default - 配置 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 许可协议。