<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://docs.bouffalolab.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E5%BC%A0%E8%89%AF</id>
	<title>Bouffalo Lab Docs - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.bouffalolab.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E5%BC%A0%E8%89%AF"/>
	<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/%E5%BC%A0%E8%89%AF"/>
	<updated>2026-04-14T06:25:55Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=278</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=278"/>
		<updated>2026-04-10T01:05:38Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light CKLinkLite.jpg| 600像素 | BL616DVKLight_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，分别运行如下两条命令&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVKLight_CKLinkLite.gif| BL616DVKLight_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=277</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=277"/>
		<updated>2026-04-09T07:06:24Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting Started =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/bouffalolab/bouffalo_sdk 如何获取SDK]&lt;br /&gt;
* [[如何在Ubuntu上搭建编译环境]]&lt;br /&gt;
* [[如何在Windows上搭建编译环境]]&lt;br /&gt;
* [[如何获取开发板]]&lt;br /&gt;
* [[烧录固件到开发板]]&lt;br /&gt;
* [[DebuggingBouffaloLabChipsWithGDB|如何调试博流开发板]]&lt;br /&gt;
&lt;br /&gt;
= Bouffalo SDK =&lt;br /&gt;
&#039;&#039;&#039;BouffaloSDK&#039;&#039;&#039; 是 Bouffalo Lab 提供的 IOT 和 MCU 软件开发包，支持博流智能所有系列芯片，也是 &#039;&#039;&#039;bl_mcu_sdk&#039;&#039;&#039; 和 &#039;&#039;&#039;bl_iot_sdk&#039;&#039;&#039; 的结合体。&lt;br /&gt;
&lt;br /&gt;
[[文件:BouffaloSDK.png|无框|600x600像素]]&lt;br /&gt;
&lt;br /&gt;
= Peripherals =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[I2S]]&lt;br /&gt;
*[[I2C]]&lt;br /&gt;
*[[CVBS]]&lt;br /&gt;
*[[Watchdog]]&lt;br /&gt;
*[[GSM/GPRS]]&lt;br /&gt;
*[[Codec]]&lt;br /&gt;
*[[PCIe]]&lt;br /&gt;
*[[GPIO]]&lt;br /&gt;
*[[eMMC]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[WiFi]]&lt;br /&gt;
*[[LED]]&lt;br /&gt;
*[[Serial port]]&lt;br /&gt;
*[[PWM]]&lt;br /&gt;
*[[SPI]]&lt;br /&gt;
*[[USB OTG]]&lt;br /&gt;
*[[LCD]]&lt;br /&gt;
*[[CPU]]&lt;br /&gt;
*[[Network]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Bluetooth]]&lt;br /&gt;
*[[HDMI]]&lt;br /&gt;
*[[Camera]]&lt;br /&gt;
*[[Memory]]&lt;br /&gt;
*[[RTC]]&lt;br /&gt;
*[[EEPROM]]&lt;br /&gt;
*[[MIPI-DSI]]&lt;br /&gt;
*[[NPU]]&lt;br /&gt;
*[[VPU]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Products =&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL602]]&lt;br /&gt;
* [[BL702]]&lt;br /&gt;
* [[BL618]]&lt;br /&gt;
* [[BL606P]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL702L]]&lt;br /&gt;
* [[BL616]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Develop Boards =&lt;br /&gt;
* BL602EVB&lt;br /&gt;
&lt;br /&gt;
= Application Notes =&lt;br /&gt;
* [[NetHub]]&lt;br /&gt;
* [[BL616低功耗开发手册]]&lt;br /&gt;
* [[USB Wi-Fi用户手册]]&lt;br /&gt;
&lt;br /&gt;
= Demos =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:FreeRTOS]]&lt;br /&gt;
* [[Demo:wifi sta]]&lt;br /&gt;
* [[Demo:boot2_isp]]&lt;br /&gt;
* [[Demo:helloworld]]&lt;br /&gt;
* [[Demo:smartconfig ble]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:DMA]]&lt;br /&gt;
* [[Demo:Btble]]&lt;br /&gt;
* [[Demo:coremark]]&lt;br /&gt;
* [[Demo:littlefs]]&lt;br /&gt;
* [[Demo:posix freertos]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:Flash]]&lt;br /&gt;
* [[Demo:Basical case]]&lt;br /&gt;
* [[Demo:dsp]]&lt;br /&gt;
* [[Demo:cks]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E4%BD%BF%E7%94%A8GDB%E8%B0%83%E8%AF%95&amp;diff=276</id>
		<title>使用GDB调试</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E4%BD%BF%E7%94%A8GDB%E8%B0%83%E8%AF%95&amp;diff=276"/>
		<updated>2026-04-09T07:05:28Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面使用GDB调试至DebuggingBouffaloLabChipsWithGDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[DebuggingBouffaloLabChipsWithGDB]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=275</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=275"/>
		<updated>2026-04-09T07:05:28Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面使用GDB调试至DebuggingBouffaloLabChipsWithGDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light CKLinkLite.jpg| 600像素 | BL616DVKLight_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
分别运行如下两条命令&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVKLight_CKLinkLite.gif| BL616DVKLight_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=274</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=274"/>
		<updated>2026-04-09T07:03:23Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 进行GDB调试 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light CKLinkLite.jpg| 600像素 | BL616DVKLight_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
分别运行如下两条命令&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVKLight_CKLinkLite.gif| BL616DVKLight_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=273</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=273"/>
		<updated>2026-04-09T07:02:34Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light CKLinkLite.jpg| 600像素 | BL616DVKLight_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
分别运行如下两条命令&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVKLight_CKLinkLite.gif| BL616DVKLight_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light_CKLinkLite.jpg&amp;diff=272</id>
		<title>文件:BL616DVK Light CKLinkLite.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light_CKLinkLite.jpg&amp;diff=272"/>
		<updated>2026-04-09T07:00:05Z</updated>

		<summary type="html">&lt;p&gt;张良：​BL616DVKLight_CKLinkLite.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
BL616DVKLight_CKLinkLite.jpg&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=271</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=271"/>
		<updated>2026-04-09T06:58:21Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light_CKLinkLite.jpg | BL616DVK Light_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
分别运行如下两条命令&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVKLight_CKLinkLite.gif| BL616DVKLight_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVKLight_CKLinkLite.gif&amp;diff=270</id>
		<title>文件:BL616DVKLight CKLinkLite.gif</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVKLight_CKLinkLite.gif&amp;diff=270"/>
		<updated>2026-04-09T06:57:24Z</updated>

		<summary type="html">&lt;p&gt;张良：​BL616DVKLight_CKLinkLite.gif&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
BL616DVKLight_CKLinkLite.gif&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=269</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=269"/>
		<updated>2026-04-09T06:55:42Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 通过CKLink调试DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light_CKLinkLite.jpg | BL616DVK Light_CKLinkLite]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 进行GDB调试 ====&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
分别运行如下两条命令&lt;br /&gt;
&amp;lt;code&amp;gt;DebugServerConsole&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;riscv64-unknown-elf-gdb *.elf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light_CKLinkLite.gif | BL616DVK Light_CKLinkLite]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light_CKLinkLite.jpg.jpg&amp;diff=268</id>
		<title>文件:BL616DVK Light CKLinkLite.jpg.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light_CKLinkLite.jpg.jpg&amp;diff=268"/>
		<updated>2026-04-09T06:54:55Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BL616DVK Light_CKLinkLite.jpg&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=267</id>
		<title>DebuggingBouffaloLabChipsWithGDB</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=DebuggingBouffaloLabChipsWithGDB&amp;diff=267"/>
		<updated>2026-04-09T06:49:53Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“  通过CKLink调试DVK light开发板”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
通过CKLink调试DVK light开发板&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=266</id>
		<title>Windows wsl bringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=266"/>
		<updated>2026-04-09T02:22:22Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Build and Flash the Device Firmware ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616&#039;&#039;&lt;br /&gt;
 make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616CL&#039;&#039;&lt;br /&gt;
 make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL618DG&#039;&#039;&lt;br /&gt;
 make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
Flash example:&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=COM5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=265</id>
		<title>Windows wsl bringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=265"/>
		<updated>2026-04-08T03:49:13Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 1. Build and Flash the Device Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Build and Flash the Device Firmware ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616&#039;&#039;&lt;br /&gt;
 make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616CL&#039;&#039;&lt;br /&gt;
 make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL618DG&#039;&#039;&lt;br /&gt;
 make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
Flash example:&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=COM5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:liangzhang/bouffalo_sdk_rel.git&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:bouffalo_sw/toolchain_riscv_thead_linux64.git&lt;br /&gt;
&lt;br /&gt;
export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=264</id>
		<title>Windows wsl bringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=264"/>
		<updated>2026-04-08T03:45:27Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 2. Build and Flash the Device Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Build and Flash the Device Firmware ==&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616&#039;&#039;&lt;br /&gt;
 make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616CL&#039;&#039;&lt;br /&gt;
 make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL618DG&#039;&#039;&lt;br /&gt;
 make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
Flash example:&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=COM5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:liangzhang/bouffalo_sdk_rel.git&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:bouffalo_sw/toolchain_riscv_thead_linux64.git&lt;br /&gt;
&lt;br /&gt;
export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=263</id>
		<title>Windows wsl bringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=263"/>
		<updated>2026-04-08T03:32:53Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. Build and Flash the Device Firmware ==&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616&#039;&#039;&lt;br /&gt;
 make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL616CL&#039;&#039;&lt;br /&gt;
 make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;# BL618DG&#039;&#039;&lt;br /&gt;
 make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
Flash example:&lt;br /&gt;
 cd examples/wifi/nethub&lt;br /&gt;
 make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
 make flash CHIP=bl616cl COMX=/dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:liangzhang/bouffalo_sdk_rel.git&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:bouffalo_sw/toolchain_riscv_thead_linux64.git&lt;br /&gt;
&lt;br /&gt;
export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=262</id>
		<title>Windows wsl bringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Windows_wsl_bringup&amp;diff=262"/>
		<updated>2026-04-08T03:30:36Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“  git clone git@code.bouffalolab.com:liangzhang/bouffalo_sdk_rel.git  git clone git@code.bouffalolab.com:bouffalo_sw/toolchain_riscv_thead_linux64.git  export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:liangzhang/bouffalo_sdk_rel.git&lt;br /&gt;
&lt;br /&gt;
git clone git@code.bouffalolab.com:bouffalo_sw/toolchain_riscv_thead_linux64.git&lt;br /&gt;
&lt;br /&gt;
export PATH=$HOME/work/toolchain_riscv_thead_linux64/bin:$PATH&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=261</id>
		<title>烧录固件到开发板</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=261"/>
		<updated>2026-04-01T11:00:28Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 查看运行log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 如何烧录到DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light.jpg | BL616DVK_light | 400px]]&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
==== 设备进入烧录模式 ====&lt;br /&gt;
按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式&lt;br /&gt;
&lt;br /&gt;
==== 编译并烧录 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/wifi/sta/wifi_tcp&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
make flash CHIP=bl616 COMX=/dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 查看运行log ====&lt;br /&gt;
通过串口终端查看运行的log即可，默认波特率2M（刚烧录完需要手动按一下Reset按键）&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=260</id>
		<title>烧录固件到开发板</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=260"/>
		<updated>2026-04-01T10:59:24Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 如何烧录到DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
&lt;br /&gt;
[[文件:BL616DVK Light.jpg | BL616DVK_light | 400px]]&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
==== 设备进入烧录模式 ====&lt;br /&gt;
按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式&lt;br /&gt;
&lt;br /&gt;
==== 编译并烧录 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/wifi/sta/wifi_tcp&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
make flash CHIP=bl616 COMX=/dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 查看运行log ====&lt;br /&gt;
通过串口终端查看运行的log即可，默认波特率2M&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=259</id>
		<title>烧录固件到开发板</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=259"/>
		<updated>2026-04-01T10:54:39Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 通过USB连接到PC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 如何烧录到DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
[[文件:BL616DVK Light.jpg|缩略图]]&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
==== 设备进入烧录模式 ====&lt;br /&gt;
按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式&lt;br /&gt;
&lt;br /&gt;
==== 编译并烧录 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/wifi/sta/wifi_tcp&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
make flash CHIP=bl616 COMX=/dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light.jpg&amp;diff=258</id>
		<title>文件:BL616DVK Light.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E6%96%87%E4%BB%B6:BL616DVK_Light.jpg&amp;diff=258"/>
		<updated>2026-04-01T10:54:18Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BL616DVK_Light&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=257</id>
		<title>烧录固件到开发板</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=257"/>
		<updated>2026-04-01T10:52:50Z</updated>

		<summary type="html">&lt;p&gt;张良：​/* 如何烧录到DVK light开发板 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 如何烧录到DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
==== 通过USB连接到PC ====&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
==== 设备进入烧录模式 ====&lt;br /&gt;
按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式&lt;br /&gt;
&lt;br /&gt;
==== 编译并烧录 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/wifi/sta/wifi_tcp&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
make flash CHIP=bl616 COMX=/dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=256</id>
		<title>烧录固件到开发板</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E7%83%A7%E5%BD%95%E5%9B%BA%E4%BB%B6%E5%88%B0%E5%BC%80%E5%8F%91%E6%9D%BF&amp;diff=256"/>
		<updated>2026-04-01T10:52:06Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“= 如何烧录到DVK light开发板 =  # 通过USB连接到PC  这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）  # 设备进入烧录模式  按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式  # 编译并烧录  &amp;lt;pre&amp;gt; cd examples/wifi/sta/wifi_tcp make CHIP=bl616 BOARD=bl616dk make flash CHIP=bl616 COMX=/dev/ttyACM0 &amp;lt;/pre&amp;gt;”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 如何烧录到DVK light开发板 =&lt;br /&gt;
&lt;br /&gt;
# 通过USB连接到PC&lt;br /&gt;
&lt;br /&gt;
这里以Ubuntu为例，此时应该可以看到 &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; 设备（以实际为准）&lt;br /&gt;
&lt;br /&gt;
# 设备进入烧录模式&lt;br /&gt;
&lt;br /&gt;
按住 &amp;lt;code&amp;gt;BOOT&amp;lt;/code&amp;gt; 键，trigger 一下 &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; 按键，设备即进入烧录模式&lt;br /&gt;
&lt;br /&gt;
# 编译并烧录&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/wifi/sta/wifi_tcp&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
make flash CHIP=bl616 COMX=/dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=255</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=255"/>
		<updated>2026-03-31T00:14:42Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub Quick Start =&lt;br /&gt;
&lt;br /&gt;
This document is for customers who are using NetHub for the first time. The goal is to help you complete device and host bring-up as quickly as possible.&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif | NetHub SDIO Quick Start Demo]]&lt;br /&gt;
&lt;br /&gt;
If you only care about the currently available solution, keep these points in mind:&lt;br /&gt;
&lt;br /&gt;
* The current primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* The device runs &amp;lt;code&amp;gt;Wi-Fi backend (fhost / wl80211) + lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; bridges device-side Wi-Fi capabilities to the host&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; both run on the same host link&lt;br /&gt;
&lt;br /&gt;
Active directories:&lt;br /&gt;
&lt;br /&gt;
* device side&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host side&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Confirm Two Choices Before Bring-Up ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Choose the Wi-Fi Backend ===&lt;br /&gt;
&lt;br /&gt;
Default configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt; is disabled&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; is used&lt;br /&gt;
&lt;br /&gt;
If you want to switch to &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;, enable this option in &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; are mutually exclusive&lt;br /&gt;
* The current &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; implementation supports both device-side Wi-Fi backends&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Choose the Control Channel ===&lt;br /&gt;
&lt;br /&gt;
device and host settings must match:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! device configuration !! host startup&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default configuration is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means the control channel uses &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt; by default.&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
&lt;br /&gt;
* The host side always builds both &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* The actual selection happens at &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; runtime&lt;br /&gt;
&lt;br /&gt;
== 2. Build and Flash the Device Firmware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flash example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most relevant bring-up configuration is located in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common options:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Build and Start the Host Software ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artifacts:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Load the Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To unload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.3 Start the Host Daemon ===&lt;br /&gt;
&lt;br /&gt;
Default TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explicit TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Basic Verification Flow ==&lt;br /&gt;
&lt;br /&gt;
Recommended sequence:&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Check the Current Status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Scan APs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Connect to an AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Check Status Again ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the connection succeeds, you will usually see:&lt;br /&gt;
&lt;br /&gt;
* the backend is connected&lt;br /&gt;
* the Wi-Fi state is &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt; after an address is assigned&lt;br /&gt;
&lt;br /&gt;
=== 4.5 Disconnect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Common Commands ==&lt;br /&gt;
&lt;br /&gt;
The public CLI surface is fixed to 9 commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl version&lt;br /&gt;
sudo ./output/bflbwifictrl reboot&lt;br /&gt;
sudo ./output/bflbwifictrl start_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
sudo ./output/bflbwifictrl stop_ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. SDIO Hardware Information ==&lt;br /&gt;
&lt;br /&gt;
For the current customer bring-up path, use &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; directly. &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; still keep architecture skeletons for now and are not the recommended bring-up path.&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Chip Support Matrix ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Interface !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO || Supported || Supported || Supported&lt;br /&gt;
|-&lt;br /&gt;
| USB || Planned || Planned || Planned&lt;br /&gt;
|-&lt;br /&gt;
| SPI || Planned || Planned || Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 6.2 SDIO Pins ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin Function !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2 || GPIO10 || GPIO43 || GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3 || GPIO11 || GPIO44 || GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD || GPIO12 || GPIO45 || GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK || GPIO13 || GPIO46 || GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0 || GPIO14 || GPIO47 || GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1 || GPIO15 || GPIO48 || GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
If you need to transfer private messages between the host and device, use the &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel and the control channel are parallel logical channels&lt;br /&gt;
* It is not a separate physical interface; it is a logical channel carried on the current host link&lt;br /&gt;
&lt;br /&gt;
=== 7.1 device-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(nethub_vchan_recv_cb_t recv_cb, void *cb_arg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 host-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_deinit(void);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_get_state_snapshot(nethub_vchan_state_snapshot_t *snapshot);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical host-side usage order:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Call &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt; when finished&lt;br /&gt;
&lt;br /&gt;
If you need to check whether the link is ready, you can optionally query:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;link_state == NETHUB_VCHAN_LINK_UP&amp;lt;/code&amp;gt;&lt;br /&gt;
** the link is ready for TX/RX&lt;br /&gt;
* &amp;lt;code&amp;gt;host_state == NETHUB_VCHAN_HOST_STATE_DEVICE_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
** the host has completed the handshake with the device&lt;br /&gt;
&lt;br /&gt;
== 8. Common Issues ==&lt;br /&gt;
&lt;br /&gt;
=== 8.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; Fails to Start ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether the device and host control backends match&lt;br /&gt;
* whether &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; exists&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; has been loaded successfully&lt;br /&gt;
* whether the SDIO hardware link is working properly&lt;br /&gt;
&lt;br /&gt;
=== 8.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; Succeeds but the Host Has No Network Access ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; has reached &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; has an address&lt;br /&gt;
* whether services such as &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; override the NetHub configuration&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; builds userspace with &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; by default&lt;br /&gt;
* After the device reports &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;, the host automatically configures the IP, gateway, and DNS of &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; Reports That the Module Is Busy ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; is still running&lt;br /&gt;
* whether &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; is still running&lt;br /&gt;
&lt;br /&gt;
=== 8.4 How Do I Change the Host-Side Virtual Interface Name &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;? ===&lt;br /&gt;
&lt;br /&gt;
The default host-side virtual network interface name comes from &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel/netdev/mr_netdev.c&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define ETH_DRV_NAME &amp;quot;mr_eth%d&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first created interface therefore appears as &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To change the interface name, update &amp;lt;code&amp;gt;ETH_DRV_NAME&amp;lt;/code&amp;gt; to the pattern you want. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define ETH_DRV_NAME &amp;quot;nethub%d&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Keep &amp;lt;code&amp;gt;%d&amp;lt;/code&amp;gt; if you want Linux to allocate names such as &amp;lt;code&amp;gt;nethub0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nethub1&amp;lt;/code&amp;gt;, and so on&lt;br /&gt;
* Rebuild the host software after the change and reload the host-side kernel module&lt;br /&gt;
* If any local scripts or service configuration still refer to &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;, update them accordingly&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=TestApi&amp;diff=254</id>
		<title>TestApi</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=TestApi&amp;diff=254"/>
		<updated>2026-03-17T11:05:57Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面TestApi至TestApi1：​重命名测试页面，统一命名规范&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[TestApi1]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=253</id>
		<title>TestApi1</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=253"/>
		<updated>2026-03-17T11:05:57Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面TestApi至TestApi1：​重命名测试页面，统一命名规范&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 测试页面 ==&lt;br /&gt;
&lt;br /&gt;
这是一个使用 MediaWiki Action API 创建的测试页面。&lt;br /&gt;
&lt;br /&gt;
创建时间: 2026-03-17&lt;br /&gt;
&lt;br /&gt;
== 功能测试 ==&lt;br /&gt;
&lt;br /&gt;
* Action API 编辑 ✅&lt;br /&gt;
* Bot 认证 ✅&lt;br /&gt;
&lt;br /&gt;
== 更新测试 ==&lt;br /&gt;
&lt;br /&gt;
这是追加的内容，测试编辑功能是否正常工作。&lt;br /&gt;
&lt;br /&gt;
更新时间: 刚刚&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=TestApi2&amp;diff=252</id>
		<title>TestApi2</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=TestApi2&amp;diff=252"/>
		<updated>2026-03-17T11:03:15Z</updated>

		<summary type="html">&lt;p&gt;张良：​通过 MCP 工具创建 TestApi2 页面，与 TestApi 形成对比测试&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 高级测试页面 ==&lt;br /&gt;
&lt;br /&gt;
这是通过 MediaWiki API 创建的**第二个**测试页面，与 TestApi 有显著差异。&lt;br /&gt;
&lt;br /&gt;
创建时间: 2026-03-17&lt;br /&gt;
页面版本: v2.0&lt;br /&gt;
&lt;br /&gt;
=== API 功能验证 ===&lt;br /&gt;
&lt;br /&gt;
此页面用于验证以下 MediaWiki MCP 功能：&lt;br /&gt;
&lt;br /&gt;
; 页面读取&lt;br /&gt;
: 使用 &amp;lt;code&amp;gt;action=query&amp;lt;/code&amp;gt; 获取页面内容 ✅&lt;br /&gt;
&lt;br /&gt;
; 页面创建&lt;br /&gt;
: 使用 &amp;lt;code&amp;gt;action=edit&amp;lt;/code&amp;gt; 创建新页面 ✅&lt;br /&gt;
&lt;br /&gt;
; 格式支持&lt;br /&gt;
: Wikitext 格式化测试 ✅&lt;br /&gt;
&lt;br /&gt;
== 数据对比表 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 特性 !! TestApi !! TestApi2&lt;br /&gt;
|-&lt;br /&gt;
| 创建方式 || API 编辑 || MCP 工具&lt;br /&gt;
|-&lt;br /&gt;
| 版本号 || v1.0 || v2.0&lt;br /&gt;
|-&lt;br /&gt;
| 标题级别 || 二级 || 三级（部分）&lt;br /&gt;
|-&lt;br /&gt;
| 表格 || 无 || 有&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 额外功能测试 ===&lt;br /&gt;
&lt;br /&gt;
=== 代码块测试 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def hello_mediawiki():&lt;br /&gt;
    print(&amp;quot;Hello from MediaWiki MCP!&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 列表样式差异 ===&lt;br /&gt;
&lt;br /&gt;
; 有序列表项 1&lt;br /&gt;
: 子项描述 A&lt;br /&gt;
: 子项描述 B&lt;br /&gt;
&lt;br /&gt;
; 有序列表项 2&lt;br /&gt;
: 子项描述 C&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
&lt;br /&gt;
此页面与 TestApi 的主要差异：&lt;br /&gt;
&lt;br /&gt;
# 使用了更复杂的 wikitext 语法&lt;br /&gt;
# 添加了表格展示&lt;br /&gt;
# 包含代码高亮示例&lt;br /&gt;
# 使用了不同的列表格式&lt;br /&gt;
# 页面结构更加层次化&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&#039;&#039;最后更新：通过 MCP 工具自动生成&#039;&#039;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=251</id>
		<title>TestApi1</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=251"/>
		<updated>2026-03-17T08:49:50Z</updated>

		<summary type="html">&lt;p&gt;张良：​追加测试内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 测试页面 ==&lt;br /&gt;
&lt;br /&gt;
这是一个使用 MediaWiki Action API 创建的测试页面。&lt;br /&gt;
&lt;br /&gt;
创建时间: 2026-03-17&lt;br /&gt;
&lt;br /&gt;
== 功能测试 ==&lt;br /&gt;
&lt;br /&gt;
* Action API 编辑 ✅&lt;br /&gt;
* Bot 认证 ✅&lt;br /&gt;
&lt;br /&gt;
== 更新测试 ==&lt;br /&gt;
&lt;br /&gt;
这是追加的内容，测试编辑功能是否正常工作。&lt;br /&gt;
&lt;br /&gt;
更新时间: 刚刚&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=250</id>
		<title>TestApi1</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=TestApi1&amp;diff=250"/>
		<updated>2026-03-17T08:49:50Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建 API 测试页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 测试页面 ==&lt;br /&gt;
&lt;br /&gt;
这是一个使用 MediaWiki Action API 创建的测试页面。&lt;br /&gt;
&lt;br /&gt;
创建时间: 2026-03-17&lt;br /&gt;
&lt;br /&gt;
== 功能测试 ==&lt;br /&gt;
&lt;br /&gt;
* Action API 编辑 ✅&lt;br /&gt;
* Bot 认证 ✅&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=249</id>
		<title>NetHub</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=249"/>
		<updated>2026-03-17T05:54:34Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub =&lt;br /&gt;
&lt;br /&gt;
NetHub bridges device-side Wi-Fi capabilities to the host.&lt;br /&gt;
&lt;br /&gt;
The current solution targets Wi-Fi SoCs such as &amp;lt;code&amp;gt;BL616 / BL618 / BL616CL / BL618DG&amp;lt;/code&amp;gt;, and the recommended bring-up path is currently &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Documentation Guide ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubQuickBringup|NetHubQuickBringup.md]]&lt;br /&gt;
** For customers doing first-time bring-up&lt;br /&gt;
** Covers key device/host choices, build steps, module loading, AP connection, and common issues&lt;br /&gt;
* [[NetHubArchitecture|NetHubArchitecture.md]]&lt;br /&gt;
** For developers who need to understand module boundaries and APIs&lt;br /&gt;
** Covers device/host layering, public interfaces, and key data flows&lt;br /&gt;
* [[NetHubVirtualChannel|NetHubVirtualChannel.md]]&lt;br /&gt;
** For customers or application developers who need to transfer private data&lt;br /&gt;
** Covers USER channel prerequisites, APIs, and typical usage&lt;br /&gt;
&lt;br /&gt;
== Current Conclusions ==&lt;br /&gt;
&lt;br /&gt;
* The current primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* The device-side Wi-Fi backend supports &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* The host control backend is selected at runtime: &amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; both run on the same host link&lt;br /&gt;
&lt;br /&gt;
== In-Repo Reference Directories ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local Documentation Source ==&lt;br /&gt;
&lt;br /&gt;
* Markdown documents:&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub/docs/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to publish to the online wiki, use these four Markdown documents as the source.&lt;br /&gt;
&lt;br /&gt;
== Online Wiki ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHub NetHub]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup NetHubQuickBringup]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubArchitecture NetHubArchitecture]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel NetHubVirtualChannel]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=248</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=248"/>
		<updated>2026-03-17T05:42:10Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub Quick Start =&lt;br /&gt;
&lt;br /&gt;
This document is for customers who are using NetHub for the first time. The goal is to help you complete device and host bring-up as quickly as possible.&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif | NetHub SDIO Quick Start Demo]]&lt;br /&gt;
&lt;br /&gt;
If you only care about the currently available solution, keep these points in mind:&lt;br /&gt;
&lt;br /&gt;
* The current primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* The device runs &amp;lt;code&amp;gt;Wi-Fi backend (fhost / wl80211) + lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; bridges device-side Wi-Fi capabilities to the host&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; both run on the same host link&lt;br /&gt;
&lt;br /&gt;
Active directories:&lt;br /&gt;
&lt;br /&gt;
* device side&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host side&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Confirm Two Choices Before Bring-Up ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Choose the Wi-Fi Backend ===&lt;br /&gt;
&lt;br /&gt;
Default configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt; is disabled&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; is used&lt;br /&gt;
&lt;br /&gt;
If you want to switch to &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;, enable this option in &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; are mutually exclusive&lt;br /&gt;
* The current &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; implementation supports both device-side Wi-Fi backends&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Choose the Control Channel ===&lt;br /&gt;
&lt;br /&gt;
device and host settings must match:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! device configuration !! host startup&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default configuration is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means the control channel uses &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt; by default.&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
&lt;br /&gt;
* The host side always builds both &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* The actual selection happens at &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; runtime&lt;br /&gt;
&lt;br /&gt;
== 2. Build and Flash the Device Firmware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flash example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most relevant bring-up configuration is located in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common options:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Build and Start the Host Software ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artifacts:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Load the Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To unload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.3 Start the Host Daemon ===&lt;br /&gt;
&lt;br /&gt;
Default TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explicit TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Basic Verification Flow ==&lt;br /&gt;
&lt;br /&gt;
Recommended sequence:&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Check the Current Status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Scan APs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Connect to an AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Check Status Again ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the connection succeeds, you will usually see:&lt;br /&gt;
&lt;br /&gt;
* the backend is connected&lt;br /&gt;
* the Wi-Fi state is &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt; after an address is assigned&lt;br /&gt;
&lt;br /&gt;
=== 4.5 Disconnect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Common Commands ==&lt;br /&gt;
&lt;br /&gt;
The public CLI surface is fixed to 9 commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl version&lt;br /&gt;
sudo ./output/bflbwifictrl reboot&lt;br /&gt;
sudo ./output/bflbwifictrl start_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
sudo ./output/bflbwifictrl stop_ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. SDIO Hardware Information ==&lt;br /&gt;
&lt;br /&gt;
For the current customer bring-up path, use &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; directly. &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; still keep architecture skeletons for now and are not the recommended bring-up path.&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Chip Support Matrix ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Interface !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO || Supported || Supported || Supported&lt;br /&gt;
|-&lt;br /&gt;
| USB || Planned || Planned || Planned&lt;br /&gt;
|-&lt;br /&gt;
| SPI || Planned || Planned || Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 6.2 SDIO Pins ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin Function !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2 || GPIO10 || GPIO43 || GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3 || GPIO11 || GPIO44 || GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD || GPIO12 || GPIO45 || GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK || GPIO13 || GPIO46 || GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0 || GPIO14 || GPIO47 || GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1 || GPIO15 || GPIO48 || GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
If you need to transfer private messages between the host and device, use the &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel and the control channel are parallel logical channels&lt;br /&gt;
* It is not a separate physical interface; it is a logical channel carried on the current host link&lt;br /&gt;
&lt;br /&gt;
=== 7.1 device-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(nethub_vchan_recv_cb_t recv_cb, void *cb_arg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 host-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_deinit(void);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_get_state_snapshot(nethub_vchan_state_snapshot_t *snapshot);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical host-side usage order:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Call &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt; when finished&lt;br /&gt;
&lt;br /&gt;
If you need to check whether the link is ready, you can optionally query:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;link_state == NETHUB_VCHAN_LINK_UP&amp;lt;/code&amp;gt;&lt;br /&gt;
** the link is ready for TX/RX&lt;br /&gt;
* &amp;lt;code&amp;gt;host_state == NETHUB_VCHAN_HOST_STATE_DEVICE_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
** the host has completed the handshake with the device&lt;br /&gt;
&lt;br /&gt;
== 8. Common Issues ==&lt;br /&gt;
&lt;br /&gt;
=== 8.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; Fails to Start ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether the device and host control backends match&lt;br /&gt;
* whether &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; exists&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; has been loaded successfully&lt;br /&gt;
* whether the SDIO hardware link is working properly&lt;br /&gt;
&lt;br /&gt;
=== 8.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; Succeeds but the Host Has No Network Access ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; has reached &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; has an address&lt;br /&gt;
* whether services such as &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; override the NetHub configuration&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; builds userspace with &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; by default&lt;br /&gt;
* After the device reports &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;, the host automatically configures the IP, gateway, and DNS of &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; Reports That the Module Is Busy ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; is still running&lt;br /&gt;
* whether &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; is still running&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel&amp;diff=247</id>
		<title>NetHubVirtualChannel</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel&amp;diff=247"/>
		<updated>2026-03-17T05:33:51Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub USER Virtual Channel =&lt;br /&gt;
&lt;br /&gt;
This document describes how to use the NetHub &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 1. Concept ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; is a logical message channel carried on the current host link.&lt;br /&gt;
&lt;br /&gt;
It is not a separate physical interface. It reuses the current &amp;lt;code&amp;gt;SDIO / USB / SPI&amp;lt;/code&amp;gt; transport and multiplexes different payload types into separate logical channels.&lt;br /&gt;
&lt;br /&gt;
Commonly used types:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt;&lt;br /&gt;
** private customer or application data&lt;br /&gt;
* &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt;&lt;br /&gt;
** host control-plane data&lt;br /&gt;
* &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;&lt;br /&gt;
** internal system coordination messages&lt;br /&gt;
&lt;br /&gt;
For most customer integrations, only the &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; type matters.&lt;br /&gt;
&lt;br /&gt;
== 2. Bring-Up Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Before using it, confirm:&lt;br /&gt;
&lt;br /&gt;
* device side is built with &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* device side is built with &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* host side has already loaded &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* the underlying host-device link is already working&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel and the control channel are parallel channels&lt;br /&gt;
* If the host control plane itself uses &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;, it uses the &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt; type&lt;br /&gt;
* Customer private messages should stay on the &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; type&lt;br /&gt;
&lt;br /&gt;
== 3. device-side Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(nethub_vchan_recv_cb_t recv_cb, void *cb_arg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. host-side Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Initialization and Cleanup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_deinit(void);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 USER Channel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef void (*nethub_vchan_recv_callback_t)(const void *data, size_t len);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Optional State Query ===&lt;br /&gt;
&lt;br /&gt;
If you need to know whether the virtual channel is ready, you can optionally use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    nethub_vchan_link_state_t link_state;&lt;br /&gt;
    nethub_vchan_host_state_t host_state;&lt;br /&gt;
} nethub_vchan_state_snapshot_t;&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_get_state_snapshot(nethub_vchan_state_snapshot_t *snapshot);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical checks:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;link_state == NETHUB_VCHAN_LINK_UP&amp;lt;/code&amp;gt;&lt;br /&gt;
** the link is ready for TX/RX&lt;br /&gt;
* &amp;lt;code&amp;gt;host_state == NETHUB_VCHAN_HOST_STATE_DEVICE_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
** the host has completed the handshake with the device&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Optional Link Event Callback ===&lt;br /&gt;
&lt;br /&gt;
If the application wants passive notification when the link goes up or down, it can optionally register:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_register_link_event_callback(&lt;br /&gt;
    nethub_vchan_link_event_callback_t callback,&lt;br /&gt;
    void *user_data);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Typical Usage Order ==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Call &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt; when finished&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;nethub_vchan.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static void user_rx_cb(const void *data, size_t len)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;recv USER data: %.*s\n&amp;quot;, (int)len, (const char *)data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    const char *msg = &amp;quot;hello from host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (nethub_vchan_init() != 0) {&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    nethub_vchan_user_register_callback(user_rx_cb);&lt;br /&gt;
    nethub_vchan_user_send(msg, strlen(msg));&lt;br /&gt;
&lt;br /&gt;
    nethub_vchan_deinit();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Limits and Notes ==&lt;br /&gt;
&lt;br /&gt;
* Maximum payload length per message is &amp;lt;code&amp;gt;1500&amp;lt;/code&amp;gt; bytes&lt;br /&gt;
* The &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel is packet-oriented, not a byte stream&lt;br /&gt;
* The kernel module must be loaded before use&lt;br /&gt;
* If the device side does not enable &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN&amp;lt;/code&amp;gt;, the host-side &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel will not work&lt;br /&gt;
* If host control-plane traffic and &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; traffic coexist, do not reuse the &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt; type for customer private data&lt;br /&gt;
&lt;br /&gt;
== 7. Related Pages ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubQuickBringup|NetHubQuickBringup.md]]&lt;br /&gt;
* [[NetHubArchitecture|NetHubArchitecture.md]]&lt;br /&gt;
* [[NetHub|NetHub.md]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubArchitecture&amp;diff=246</id>
		<title>NetHubArchitecture</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubArchitecture&amp;diff=246"/>
		<updated>2026-03-17T05:33:51Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub Architecture Guide =&lt;br /&gt;
&lt;br /&gt;
This document is for developers who need to understand module boundaries and APIs.&lt;br /&gt;
&lt;br /&gt;
== 1. Current Architecture Conclusions ==&lt;br /&gt;
&lt;br /&gt;
* The current physical primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; still keep backend skeletons and are not recommended bring-up paths for now&lt;br /&gt;
* The device-side Wi-Fi backend supports &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; are logical channels on the current host link, not separate physical interfaces&lt;br /&gt;
* The host control backend is selected at runtime: &amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Functional Architecture Diagram ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flowchart LR&lt;br /&gt;
    Host[&amp;quot;Host&amp;quot;]&lt;br /&gt;
    Link[&amp;quot;Host Link&lt;br /&gt;
current main path: SDIO&amp;quot;]&lt;br /&gt;
    Data[&amp;quot;Data Channel&amp;quot;]&lt;br /&gt;
    Ctrl[&amp;quot;Control Channel&amp;quot;]&lt;br /&gt;
    User[&amp;quot;USER VCHAN&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    subgraph Device[&amp;quot;Device&amp;quot;]&lt;br /&gt;
        subgraph Hub[&amp;quot;nethub&amp;quot;]&lt;br /&gt;
            Bridge[&amp;quot;data bridge&amp;quot;]&lt;br /&gt;
            Filter[&amp;quot;hard-coded Wi-Fi RX filter&amp;quot;]&lt;br /&gt;
            Active[&amp;quot;active Wi-Fi selector&lt;br /&gt;
STA / AP&amp;quot;]&lt;br /&gt;
            CtrlPath[&amp;quot;ctrlpath&amp;quot;]&lt;br /&gt;
            Vchan[&amp;quot;virtual channel&amp;quot;]&lt;br /&gt;
        end&lt;br /&gt;
        Wifi[&amp;quot;Wi-Fi backend&lt;br /&gt;
fhost / wl80211 + lwIP&amp;quot;]&lt;br /&gt;
        AT[&amp;quot;ATModule&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    Host --&amp;gt; Link&lt;br /&gt;
    Link --&amp;gt; Data&lt;br /&gt;
    Link --&amp;gt; Ctrl&lt;br /&gt;
    Link --&amp;gt; User&lt;br /&gt;
&lt;br /&gt;
    Data --&amp;gt; Bridge&lt;br /&gt;
    Bridge --&amp;gt; Active&lt;br /&gt;
    Active --&amp;gt; Wifi&lt;br /&gt;
    Wifi --&amp;gt; Filter&lt;br /&gt;
    Filter --&amp;gt; Bridge&lt;br /&gt;
&lt;br /&gt;
    Ctrl --&amp;gt; CtrlPath&lt;br /&gt;
    CtrlPath --&amp;gt; AT&lt;br /&gt;
    AT --&amp;gt; Wifi&lt;br /&gt;
&lt;br /&gt;
    User --&amp;gt; Vchan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From a functional view, &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; mainly does four things:&lt;br /&gt;
&lt;br /&gt;
* maintain the &amp;lt;code&amp;gt;Wi-Fi &amp;amp;lt;-&amp;amp;gt; HostLink&amp;lt;/code&amp;gt; data bridge&lt;br /&gt;
* use a hard-coded filter to decide whether a packet is &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;both&amp;lt;/code&amp;gt;&lt;br /&gt;
* maintain the currently active Wi-Fi channel, &amp;lt;code&amp;gt;STA / AP&amp;lt;/code&amp;gt;&lt;br /&gt;
* provide a control channel and an optional &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; on the same host link&lt;br /&gt;
&lt;br /&gt;
== 3. Technical / API Architecture Diagram ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
flowchart TB&lt;br /&gt;
    App[&amp;quot;Application&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    subgraph DevicePublic[&amp;quot;device public API&amp;quot;]&lt;br /&gt;
        DevAPI[&amp;quot;nethub.h&amp;quot;]&lt;br /&gt;
        DevVchan[&amp;quot;nethub_vchan.h&amp;quot;]&lt;br /&gt;
        DevFilter[&amp;quot;nethub_filter.h&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    subgraph DeviceSide[&amp;quot;device side&amp;quot;]&lt;br /&gt;
        Bootstrap[&amp;quot;nethub_bootstrap()&amp;quot;]&lt;br /&gt;
        Profile[&amp;quot;profile select&amp;quot;]&lt;br /&gt;
        Endpoint[&amp;quot;endpoint register&amp;quot;]&lt;br /&gt;
        Hub[&amp;quot;hub lifecycle&amp;quot;]&lt;br /&gt;
        WifiBridge[&amp;quot;Wi-Fi bridge&amp;quot;]&lt;br /&gt;
        HostBackend[&amp;quot;host backend&lt;br /&gt;
current main path: sdio&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    subgraph HostPublic[&amp;quot;host public API&amp;quot;]&lt;br /&gt;
        HostAPI[&amp;quot;bflbwifi.h&amp;quot;]&lt;br /&gt;
        HostVchan[&amp;quot;virtualchan/nethub_vchan.h&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    subgraph HostSide[&amp;quot;host side&amp;quot;]&lt;br /&gt;
        CLI[&amp;quot;bflbwifictrl&amp;quot;]&lt;br /&gt;
        IPC[&amp;quot;local IPC&amp;quot;]&lt;br /&gt;
        Daemon[&amp;quot;bflbwifid&amp;quot;]&lt;br /&gt;
        Lib[&amp;quot;libbflbwifi&amp;quot;]&lt;br /&gt;
        Facade[&amp;quot;channel facade&amp;quot;]&lt;br /&gt;
        TTY[&amp;quot;tty backend&amp;quot;]&lt;br /&gt;
        VCHAN[&amp;quot;vchan backend&amp;quot;]&lt;br /&gt;
        Kernel[&amp;quot;mr_sdio.ko + msg_router&amp;quot;]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    App --&amp;gt; DevAPI&lt;br /&gt;
    App --&amp;gt; DevVchan&lt;br /&gt;
    App --&amp;gt; DevFilter&lt;br /&gt;
    App --&amp;gt; HostAPI&lt;br /&gt;
    App --&amp;gt; HostVchan&lt;br /&gt;
&lt;br /&gt;
    DevAPI --&amp;gt; Bootstrap&lt;br /&gt;
    DevVchan --&amp;gt; HostBackend&lt;br /&gt;
    DevFilter --&amp;gt; WifiBridge&lt;br /&gt;
    Bootstrap --&amp;gt; Profile&lt;br /&gt;
    Bootstrap --&amp;gt; Endpoint&lt;br /&gt;
    Bootstrap --&amp;gt; Hub&lt;br /&gt;
    Hub --&amp;gt; WifiBridge&lt;br /&gt;
    Endpoint --&amp;gt; HostBackend&lt;br /&gt;
&lt;br /&gt;
    CLI --&amp;gt; IPC&lt;br /&gt;
    IPC --&amp;gt; Daemon&lt;br /&gt;
    Daemon --&amp;gt; Lib&lt;br /&gt;
    Lib --&amp;gt; Facade&lt;br /&gt;
    Facade --&amp;gt; TTY&lt;br /&gt;
    Facade --&amp;gt; VCHAN&lt;br /&gt;
    TTY --&amp;gt; Kernel&lt;br /&gt;
    VCHAN --&amp;gt; Kernel&lt;br /&gt;
    HostVchan --&amp;gt; Kernel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. device-side Public Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Headers:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_filter.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Core APIs:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_bootstrap()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_shutdown()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_get_status()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_active_wifi_channel()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_upld_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_dnld_register()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_recv_register()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_wifi_rx_filter()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Boundary notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_*&amp;lt;/code&amp;gt; maps to the logical control channel on the host link&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_*&amp;lt;/code&amp;gt; maps to the logical &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel on the host link&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_wifi_rx_filter()&amp;lt;/code&amp;gt; fully replaces the built-in Wi-Fi RX filter and must be called before &amp;lt;code&amp;gt;nethub_bootstrap()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. host-side Public Interfaces ==&lt;br /&gt;
&lt;br /&gt;
Headers:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/bflbwifictrl/include/bflbwifi.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control-plane capabilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_use_tty()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_use_vchan()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_init_ex()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_get_ctrl_status()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_connect()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_disconnect()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_get_state()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_scan()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_get_version()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_restart()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ota_upgrade()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ap_start()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ap_stop()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USER virtual channel capabilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_get_state_snapshot()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_register_link_event_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Key Data Flows ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
# The user runs &amp;lt;code&amp;gt;bflbwifictrl connect_ap &amp;amp;lt;ssid&amp;amp;gt; &amp;amp;lt;password&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# The CLI sends the command to &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; through local IPC&lt;br /&gt;
# The daemon calls &amp;lt;code&amp;gt;libbflbwifi&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;libbflbwifi&amp;lt;/code&amp;gt; sends control messages through the &amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt; backend&lt;br /&gt;
# The device-side &amp;lt;code&amp;gt;ATModule&amp;lt;/code&amp;gt; performs the Wi-Fi control operation&lt;br /&gt;
# The device reports responses and state updates, and the host refreshes the state and returns the result&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Data Plane ===&lt;br /&gt;
&lt;br /&gt;
# Host network traffic enters &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
# The kernel / &amp;lt;code&amp;gt;msg_router&amp;lt;/code&amp;gt; communicates with the device over SDIO&lt;br /&gt;
# Device-side &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; forwards host data to the currently active Wi-Fi&lt;br /&gt;
# After Wi-Fi RX packets pass through the &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; filter, they are handled locally, forwarded to the host, or both&lt;br /&gt;
&lt;br /&gt;
== 7. Recommended Reading Order ==&lt;br /&gt;
&lt;br /&gt;
* First-time bring-up: [[NetHubQuickBringup|NetHubQuickBringup.md]]&lt;br /&gt;
* Understanding the &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel: [[NetHubVirtualChannel|NetHubVirtualChannel.md]]&lt;br /&gt;
* Top-level entry: [[NetHub|NetHub.md]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=245</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=245"/>
		<updated>2026-03-17T05:33:43Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub Quick Start =&lt;br /&gt;
&lt;br /&gt;
This document is for customers who are using NetHub for the first time. The goal is to help you complete device and host bring-up as quickly as possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://docs.bouffalolab.com/images/d/d4/Nethub_sdio_quickstart_demo.gif&amp;quot; alt=&amp;quot;NetHub SDIO Quick Start Demo&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you only care about the currently available solution, keep these points in mind:&lt;br /&gt;
&lt;br /&gt;
* The current primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* The device runs &amp;lt;code&amp;gt;Wi-Fi backend (fhost / wl80211) + lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; bridges device-side Wi-Fi capabilities to the host&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; both run on the same host link&lt;br /&gt;
&lt;br /&gt;
Active directories:&lt;br /&gt;
&lt;br /&gt;
* device side&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host side&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Confirm Two Choices Before Bring-Up ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Choose the Wi-Fi Backend ===&lt;br /&gt;
&lt;br /&gt;
Default configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt; is disabled&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; is used&lt;br /&gt;
&lt;br /&gt;
If you want to switch to &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;, enable this option in &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; are mutually exclusive&lt;br /&gt;
* The current &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; implementation supports both device-side Wi-Fi backends&lt;br /&gt;
&lt;br /&gt;
=== 1.2 Choose the Control Channel ===&lt;br /&gt;
&lt;br /&gt;
device and host settings must match:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! device configuration !! host startup&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default configuration is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;makefile&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means the control channel uses &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt; by default.&lt;br /&gt;
&lt;br /&gt;
Additional notes:&lt;br /&gt;
&lt;br /&gt;
* The host side always builds both &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* The actual selection happens at &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; runtime&lt;br /&gt;
&lt;br /&gt;
== 2. Build and Flash the Device Firmware ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flash example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most relevant bring-up configuration is located in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common options:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Build and Start the Host Software ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Build ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Artifacts:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Load the Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To unload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.3 Start the Host Daemon ===&lt;br /&gt;
&lt;br /&gt;
Default TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explicit TTY mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Basic Verification Flow ==&lt;br /&gt;
&lt;br /&gt;
Recommended sequence:&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Check the Current Status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Scan APs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Connect to an AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Check Status Again ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the connection succeeds, you will usually see:&lt;br /&gt;
&lt;br /&gt;
* the backend is connected&lt;br /&gt;
* the Wi-Fi state is &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt; after an address is assigned&lt;br /&gt;
&lt;br /&gt;
=== 4.5 Disconnect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Common Commands ==&lt;br /&gt;
&lt;br /&gt;
The public CLI surface is fixed to 9 commands:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl version&lt;br /&gt;
sudo ./output/bflbwifictrl reboot&lt;br /&gt;
sudo ./output/bflbwifictrl start_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
sudo ./output/bflbwifictrl stop_ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. SDIO Hardware Information ==&lt;br /&gt;
&lt;br /&gt;
For the current customer bring-up path, use &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; directly. &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; still keep architecture skeletons for now and are not the recommended bring-up path.&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Chip Support Matrix ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Interface !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO || Supported || Supported || Supported&lt;br /&gt;
|-&lt;br /&gt;
| USB || Planned || Planned || Planned&lt;br /&gt;
|-&lt;br /&gt;
| SPI || Planned || Planned || Planned&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 6.2 SDIO Pins ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin Function !! BL616 / BL618 !! BL618DG !! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2 || GPIO10 || GPIO43 || GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3 || GPIO11 || GPIO44 || GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD || GPIO12 || GPIO45 || GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK || GPIO13 || GPIO46 || GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0 || GPIO14 || GPIO47 || GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1 || GPIO15 || GPIO48 || GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
If you need to transfer private messages between the host and device, use the &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; channel and the control channel are parallel logical channels&lt;br /&gt;
* It is not a separate physical interface; it is a logical channel carried on the current host link&lt;br /&gt;
&lt;br /&gt;
=== 7.1 device-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(nethub_vchan_recv_cb_t recv_cb, void *cb_arg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 host-side APIs ===&lt;br /&gt;
&lt;br /&gt;
Header:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common APIs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_deinit(void);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_get_state_snapshot(nethub_vchan_state_snapshot_t *snapshot);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical host-side usage order:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Call &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt; when finished&lt;br /&gt;
&lt;br /&gt;
If you need to check whether the link is ready, you can optionally query:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;link_state == NETHUB_VCHAN_LINK_UP&amp;lt;/code&amp;gt;&lt;br /&gt;
** the link is ready for TX/RX&lt;br /&gt;
* &amp;lt;code&amp;gt;host_state == NETHUB_VCHAN_HOST_STATE_DEVICE_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
** the host has completed the handshake with the device&lt;br /&gt;
&lt;br /&gt;
== 8. Common Issues ==&lt;br /&gt;
&lt;br /&gt;
=== 8.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; Fails to Start ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether the device and host control backends match&lt;br /&gt;
* whether &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; exists&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; has been loaded successfully&lt;br /&gt;
* whether the SDIO hardware link is working properly&lt;br /&gt;
&lt;br /&gt;
=== 8.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; Succeeds but the Host Has No Network Access ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; has reached &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* whether &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; has an address&lt;br /&gt;
* whether services such as &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; override the NetHub configuration&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; builds userspace with &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; by default&lt;br /&gt;
* After the device reports &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;, the host automatically configures the IP, gateway, and DNS of &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; Reports That the Module Is Busy ===&lt;br /&gt;
&lt;br /&gt;
Check first:&lt;br /&gt;
&lt;br /&gt;
* whether &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; is still running&lt;br /&gt;
* whether &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; is still running&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=244</id>
		<title>NetHub</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=244"/>
		<updated>2026-03-17T05:33:43Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local Markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub =&lt;br /&gt;
&lt;br /&gt;
NetHub bridges device-side Wi-Fi capabilities to the host.&lt;br /&gt;
&lt;br /&gt;
The current solution targets Wi-Fi SoCs such as &amp;lt;code&amp;gt;BL616 / BL618 / BL616CL / BL618DG&amp;lt;/code&amp;gt;, and the recommended bring-up path is currently &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Documentation Guide ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubQuickBringup|NetHubQuickBringup.md]]&lt;br /&gt;
** For customers doing first-time bring-up&lt;br /&gt;
** Covers key device/host choices, build steps, module loading, AP connection, and common issues&lt;br /&gt;
* [[NetHubArchitecture|NetHubArchitecture.md]]&lt;br /&gt;
** For developers who need to understand module boundaries and APIs&lt;br /&gt;
** Covers device/host layering, public interfaces, and key data flows&lt;br /&gt;
* [[NetHubVirtualChannel|NetHubVirtualChannel.md]]&lt;br /&gt;
** For customers or application developers who need to transfer private data&lt;br /&gt;
** Covers USER channel prerequisites, APIs, and typical usage&lt;br /&gt;
&lt;br /&gt;
== Current Conclusions ==&lt;br /&gt;
&lt;br /&gt;
* The current primary path is &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* The device-side Wi-Fi backend supports &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* The host control backend is selected at runtime: &amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* The control channel and &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; both run on the same host link&lt;br /&gt;
&lt;br /&gt;
== In-Repo Reference Directories ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local Documentation Source ==&lt;br /&gt;
&lt;br /&gt;
* Markdown documents:&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub/docs/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to publish to the online wiki, use these four Markdown documents as the source.&lt;br /&gt;
&lt;br /&gt;
== Online Wiki ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHub]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubArchitecture]&lt;br /&gt;
* [https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=243</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=243"/>
		<updated>2026-03-16T02:37:46Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local MediaWiki export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 快速上手 =&lt;br /&gt;
&lt;br /&gt;
本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif | NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
== 1. 方案概览 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
当前生效目录：&lt;br /&gt;
&lt;br /&gt;
* device 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Bringup 前先确认两项选择 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 选择 Wi-Fi backend ===&lt;br /&gt;
&lt;br /&gt;
默认配置：&lt;br /&gt;
&lt;br /&gt;
* 不打开 &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 使用 &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果要切到 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt; 中打开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; 是二选一关系&lt;br /&gt;
* 当前 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 同时支持这两种 device Wi-Fi backend&lt;br /&gt;
&lt;br /&gt;
=== 2.2 选择控制通道 ===&lt;br /&gt;
&lt;br /&gt;
device 与 host 需要匹配：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! device 配置&lt;br /&gt;
! host 启动方式&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
默认配置是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即控制通道默认走 &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* host 侧会同时编入 &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 实际选择发生在 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 运行时&lt;br /&gt;
&lt;br /&gt;
== 3. 编译并烧录 device 固件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
烧录示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常见关键配置：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 编译并启动 host 软件 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 编译 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产物：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 加载内核模块 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需卸载：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 启动 host daemon ===&lt;br /&gt;
&lt;br /&gt;
默认 TTY 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显式指定 TTY：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 基础验证流程 ==&lt;br /&gt;
&lt;br /&gt;
建议按下面顺序验证：&lt;br /&gt;
&lt;br /&gt;
=== 5.1 查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 扫描 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 连接 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 再次查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果连接成功，通常可以看到：&lt;br /&gt;
&lt;br /&gt;
* backend 已连接&lt;br /&gt;
* Wi-Fi 状态为 &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 获取到地址后显示 &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.5 断开连接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 常用命令 ==&lt;br /&gt;
&lt;br /&gt;
当前公共命令固定为 9 条：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. SDIO 硬件信息 ==&lt;br /&gt;
&lt;br /&gt;
当前客户 bringup 路径建议直接按 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; 使用。&lt;br /&gt;
&amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留架构骨架，不作为当前推荐 bringup 路径。&lt;br /&gt;
&lt;br /&gt;
=== 7.1 芯片支持情况 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 接口类型&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|-&lt;br /&gt;
| SPI&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7.2 SDIO 引脚 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 功能引脚&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2&lt;br /&gt;
| GPIO10&lt;br /&gt;
| GPIO43&lt;br /&gt;
| GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3&lt;br /&gt;
| GPIO11&lt;br /&gt;
| GPIO44&lt;br /&gt;
| GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD&lt;br /&gt;
| GPIO12&lt;br /&gt;
| GPIO45&lt;br /&gt;
| GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK&lt;br /&gt;
| GPIO13&lt;br /&gt;
| GPIO46&lt;br /&gt;
| GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0&lt;br /&gt;
| GPIO14&lt;br /&gt;
| GPIO47&lt;br /&gt;
| GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1&lt;br /&gt;
| GPIO15&lt;br /&gt;
| GPIO48&lt;br /&gt;
| GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
如果客户需要在 host 与 device 之间传输私有消息，可使用 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 它不是独立物理接口，而是承载在当前 host link 上的逻辑通道&lt;br /&gt;
&lt;br /&gt;
device 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
host 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。&lt;br /&gt;
&lt;br /&gt;
== 9. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 启动失败 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* device 和 host 的控制 backend 是否匹配&lt;br /&gt;
* &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; 是否存在&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; 是否已经成功加载&lt;br /&gt;
* SDIO 硬件链路是否正常&lt;br /&gt;
&lt;br /&gt;
=== 9.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; 成功但 host 没有网络 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 是否已经进入 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 是否已经获取地址&lt;br /&gt;
* 系统里的 &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; 等服务是否覆盖了 NetHub 配置&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; 默认以 &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; 编译 userspace&lt;br /&gt;
* device 上报 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt; 后，host 会自动配置 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 的 IP、网关和 DNS&lt;br /&gt;
&lt;br /&gt;
=== 9.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; 提示模块被占用 ===&lt;br /&gt;
&lt;br /&gt;
优先确认：&lt;br /&gt;
&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
&lt;br /&gt;
通常直接执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
脚本会先尝试停止已知持有者，再执行卸载。&lt;br /&gt;
&lt;br /&gt;
== 10. 延伸阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=242</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=242"/>
		<updated>2026-03-16T02:25:42Z</updated>

		<summary type="html">&lt;p&gt;张良：​Sync NetHub docs from local MediaWiki export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 快速上手 =&lt;br /&gt;
&lt;br /&gt;
本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。&lt;br /&gt;
&lt;br /&gt;
== 1. 方案概览 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
当前生效目录：&lt;br /&gt;
&lt;br /&gt;
* device 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Bringup 前先确认两项选择 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 选择 Wi-Fi backend ===&lt;br /&gt;
&lt;br /&gt;
默认配置：&lt;br /&gt;
&lt;br /&gt;
* 不打开 &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 使用 &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果要切到 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt; 中打开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; 是二选一关系&lt;br /&gt;
* 当前 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 同时支持这两种 device Wi-Fi backend&lt;br /&gt;
&lt;br /&gt;
=== 2.2 选择控制通道 ===&lt;br /&gt;
&lt;br /&gt;
device 与 host 需要匹配：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! device 配置&lt;br /&gt;
! host 启动方式&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
默认配置是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即控制通道默认走 &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* host 侧会同时编入 &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 实际选择发生在 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 运行时&lt;br /&gt;
&lt;br /&gt;
== 3. 编译并烧录 device 固件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
烧录示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常见关键配置：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 编译并启动 host 软件 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 编译 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产物：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 加载内核模块 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需卸载：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 启动 host daemon ===&lt;br /&gt;
&lt;br /&gt;
默认 TTY 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显式指定 TTY：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 基础验证流程 ==&lt;br /&gt;
&lt;br /&gt;
建议按下面顺序验证：&lt;br /&gt;
&lt;br /&gt;
=== 5.1 查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 扫描 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 连接 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 再次查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果连接成功，通常可以看到：&lt;br /&gt;
&lt;br /&gt;
* backend 已连接&lt;br /&gt;
* Wi-Fi 状态为 &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 获取到地址后显示 &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.5 断开连接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 常用命令 ==&lt;br /&gt;
&lt;br /&gt;
当前公共命令固定为 9 条：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. SDIO 硬件信息 ==&lt;br /&gt;
&lt;br /&gt;
当前客户 bringup 路径建议直接按 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; 使用。&lt;br /&gt;
&amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留架构骨架，不作为当前推荐 bringup 路径。&lt;br /&gt;
&lt;br /&gt;
=== 7.1 芯片支持情况 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 接口类型&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|-&lt;br /&gt;
| SPI&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7.2 SDIO 引脚 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 功能引脚&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2&lt;br /&gt;
| GPIO10&lt;br /&gt;
| GPIO43&lt;br /&gt;
| GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3&lt;br /&gt;
| GPIO11&lt;br /&gt;
| GPIO44&lt;br /&gt;
| GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD&lt;br /&gt;
| GPIO12&lt;br /&gt;
| GPIO45&lt;br /&gt;
| GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK&lt;br /&gt;
| GPIO13&lt;br /&gt;
| GPIO46&lt;br /&gt;
| GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0&lt;br /&gt;
| GPIO14&lt;br /&gt;
| GPIO47&lt;br /&gt;
| GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1&lt;br /&gt;
| GPIO15&lt;br /&gt;
| GPIO48&lt;br /&gt;
| GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
如果客户需要在 host 与 device 之间传输私有消息，可使用 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 它不是独立物理接口，而是承载在当前 host link 上的逻辑通道&lt;br /&gt;
&lt;br /&gt;
device 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
host 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。&lt;br /&gt;
&lt;br /&gt;
== 9. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 启动失败 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* device 和 host 的控制 backend 是否匹配&lt;br /&gt;
* &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; 是否存在&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; 是否已经成功加载&lt;br /&gt;
* SDIO 硬件链路是否正常&lt;br /&gt;
&lt;br /&gt;
=== 9.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; 成功但 host 没有网络 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 是否已经进入 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 是否已经获取地址&lt;br /&gt;
* 系统里的 &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; 等服务是否覆盖了 NetHub 配置&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; 默认以 &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; 编译 userspace&lt;br /&gt;
* device 上报 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt; 后，host 会自动配置 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 的 IP、网关和 DNS&lt;br /&gt;
&lt;br /&gt;
=== 9.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; 提示模块被占用 ===&lt;br /&gt;
&lt;br /&gt;
优先确认：&lt;br /&gt;
&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
&lt;br /&gt;
通常直接执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
脚本会先尝试停止已知持有者，再执行卸载。&lt;br /&gt;
&lt;br /&gt;
== 10. 延伸阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=241</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=241"/>
		<updated>2026-03-13T09:32:45Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting Started =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/bouffalolab/bouffalo_sdk 如何获取SDK]&lt;br /&gt;
* [[如何在Ubuntu上搭建编译环境]]&lt;br /&gt;
* [[如何在Windows上搭建编译环境]]&lt;br /&gt;
* [[如何获取开发板]]&lt;br /&gt;
* [[烧录固件到开发板]]&lt;br /&gt;
&lt;br /&gt;
= Bouffalo SDK =&lt;br /&gt;
&#039;&#039;&#039;BouffaloSDK&#039;&#039;&#039; 是 Bouffalo Lab 提供的 IOT 和 MCU 软件开发包，支持博流智能所有系列芯片，也是 &#039;&#039;&#039;bl_mcu_sdk&#039;&#039;&#039; 和 &#039;&#039;&#039;bl_iot_sdk&#039;&#039;&#039; 的结合体。&lt;br /&gt;
&lt;br /&gt;
[[文件:BouffaloSDK.png|无框|600x600像素]]&lt;br /&gt;
&lt;br /&gt;
= Peripherals =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[I2S]]&lt;br /&gt;
*[[I2C]]&lt;br /&gt;
*[[CVBS]]&lt;br /&gt;
*[[Watchdog]]&lt;br /&gt;
*[[GSM/GPRS]]&lt;br /&gt;
*[[Codec]]&lt;br /&gt;
*[[PCIe]]&lt;br /&gt;
*[[GPIO]]&lt;br /&gt;
*[[eMMC]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[WiFi]]&lt;br /&gt;
*[[LED]]&lt;br /&gt;
*[[Serial port]]&lt;br /&gt;
*[[PWM]]&lt;br /&gt;
*[[SPI]]&lt;br /&gt;
*[[USB OTG]]&lt;br /&gt;
*[[LCD]]&lt;br /&gt;
*[[CPU]]&lt;br /&gt;
*[[Network]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Bluetooth]]&lt;br /&gt;
*[[HDMI]]&lt;br /&gt;
*[[Camera]]&lt;br /&gt;
*[[Memory]]&lt;br /&gt;
*[[RTC]]&lt;br /&gt;
*[[EEPROM]]&lt;br /&gt;
*[[MIPI-DSI]]&lt;br /&gt;
*[[NPU]]&lt;br /&gt;
*[[VPU]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Products =&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL602]]&lt;br /&gt;
* [[BL702]]&lt;br /&gt;
* [[BL618]]&lt;br /&gt;
* [[BL606P]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL702L]]&lt;br /&gt;
* [[BL616]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Develop Boards =&lt;br /&gt;
* BL602EVB&lt;br /&gt;
&lt;br /&gt;
= Application Notes =&lt;br /&gt;
* [[NetHub]]&lt;br /&gt;
* [[BL616低功耗开发手册]]&lt;br /&gt;
* [[USB Wi-Fi用户手册]]&lt;br /&gt;
&lt;br /&gt;
= Demos =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:FreeRTOS]]&lt;br /&gt;
* [[Demo:wifi sta]]&lt;br /&gt;
* [[Demo:boot2_isp]]&lt;br /&gt;
* [[Demo:helloworld]]&lt;br /&gt;
* [[Demo:smartconfig ble]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:DMA]]&lt;br /&gt;
* [[Demo:Btble]]&lt;br /&gt;
* [[Demo:coremark]]&lt;br /&gt;
* [[Demo:littlefs]]&lt;br /&gt;
* [[Demo:posix freertos]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:Flash]]&lt;br /&gt;
* [[Demo:Basical case]]&lt;br /&gt;
* [[Demo:dsp]]&lt;br /&gt;
* [[Demo:cks]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=240</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=240"/>
		<updated>2026-03-13T09:31:34Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 快速上手 =&lt;br /&gt;
&lt;br /&gt;
本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif | NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
== 1. 方案概览 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
当前生效目录：&lt;br /&gt;
&lt;br /&gt;
* device 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Bringup 前先确认两项选择 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 选择 Wi-Fi backend ===&lt;br /&gt;
&lt;br /&gt;
默认配置：&lt;br /&gt;
&lt;br /&gt;
* 不打开 &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 使用 &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果要切到 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt; 中打开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; 是二选一关系&lt;br /&gt;
* 当前 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 同时支持这两种 device Wi-Fi backend&lt;br /&gt;
&lt;br /&gt;
=== 2.2 选择控制通道 ===&lt;br /&gt;
&lt;br /&gt;
device 与 host 需要匹配：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! device 配置&lt;br /&gt;
! host 启动方式&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
默认配置是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即控制通道默认走 &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* host 侧会同时编入 &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 实际选择发生在 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 运行时&lt;br /&gt;
&lt;br /&gt;
== 3. 编译并烧录 device 固件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
烧录示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常见关键配置：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 编译并启动 host 软件 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 编译 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产物：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 加载内核模块 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需卸载：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 启动 host daemon ===&lt;br /&gt;
&lt;br /&gt;
默认 TTY 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显式指定 TTY：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 基础验证流程 ==&lt;br /&gt;
&lt;br /&gt;
建议按下面顺序验证：&lt;br /&gt;
&lt;br /&gt;
=== 5.1 查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 扫描 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 连接 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 再次查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果连接成功，通常可以看到：&lt;br /&gt;
&lt;br /&gt;
* backend 已连接&lt;br /&gt;
* Wi-Fi 状态为 &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 获取到地址后显示 &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.5 断开连接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 常用命令 ==&lt;br /&gt;
&lt;br /&gt;
当前公共命令固定为 9 条：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. SDIO 硬件信息 ==&lt;br /&gt;
&lt;br /&gt;
当前客户 bringup 路径建议直接按 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; 使用。&lt;br /&gt;
&amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留架构骨架，不作为当前推荐 bringup 路径。&lt;br /&gt;
&lt;br /&gt;
=== 7.1 芯片支持情况 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 接口类型&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|-&lt;br /&gt;
| SPI&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7.2 SDIO 引脚 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 功能引脚&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2&lt;br /&gt;
| GPIO10&lt;br /&gt;
| GPIO43&lt;br /&gt;
| GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3&lt;br /&gt;
| GPIO11&lt;br /&gt;
| GPIO44&lt;br /&gt;
| GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD&lt;br /&gt;
| GPIO12&lt;br /&gt;
| GPIO45&lt;br /&gt;
| GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK&lt;br /&gt;
| GPIO13&lt;br /&gt;
| GPIO46&lt;br /&gt;
| GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0&lt;br /&gt;
| GPIO14&lt;br /&gt;
| GPIO47&lt;br /&gt;
| GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1&lt;br /&gt;
| GPIO15&lt;br /&gt;
| GPIO48&lt;br /&gt;
| GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
如果客户需要在 host 与 device 之间传输私有消息，可使用 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 它不是独立物理接口，而是承载在当前 host link 上的逻辑通道&lt;br /&gt;
&lt;br /&gt;
device 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
host 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。&lt;br /&gt;
&lt;br /&gt;
== 9. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 启动失败 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* device 和 host 的控制 backend 是否匹配&lt;br /&gt;
* &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; 是否存在&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; 是否已经成功加载&lt;br /&gt;
* SDIO 硬件链路是否正常&lt;br /&gt;
&lt;br /&gt;
=== 9.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; 成功但 host 没有网络 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 是否已经进入 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 是否已经获取地址&lt;br /&gt;
* 系统里的 &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; 等服务是否覆盖了 NetHub 配置&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; 默认以 &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; 编译 userspace&lt;br /&gt;
* device 上报 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt; 后，host 会自动配置 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 的 IP、网关和 DNS&lt;br /&gt;
&lt;br /&gt;
=== 9.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; 提示模块被占用 ===&lt;br /&gt;
&lt;br /&gt;
优先确认：&lt;br /&gt;
&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
&lt;br /&gt;
通常直接执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
脚本会先尝试停止已知持有者，再执行卸载。&lt;br /&gt;
&lt;br /&gt;
== 10. 延伸阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=239</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=239"/>
		<updated>2026-03-13T09:29:39Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 快速上手 =&lt;br /&gt;
&lt;br /&gt;
本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。&lt;br /&gt;
[[index.php?title=文件:Nethub_sdio_quickstart_demo.gif|链接=文件:Nethub_sdio_quickstart_demo.gif|NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
== 1. 方案概览 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
当前生效目录：&lt;br /&gt;
&lt;br /&gt;
* device 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Bringup 前先确认两项选择 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 选择 Wi-Fi backend ===&lt;br /&gt;
&lt;br /&gt;
默认配置：&lt;br /&gt;
&lt;br /&gt;
* 不打开 &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 使用 &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果要切到 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt; 中打开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; 是二选一关系&lt;br /&gt;
* 当前 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 同时支持这两种 device Wi-Fi backend&lt;br /&gt;
&lt;br /&gt;
=== 2.2 选择控制通道 ===&lt;br /&gt;
&lt;br /&gt;
device 与 host 需要匹配：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! device 配置&lt;br /&gt;
! host 启动方式&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
默认配置是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即控制通道默认走 &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* host 侧会同时编入 &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 实际选择发生在 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 运行时&lt;br /&gt;
&lt;br /&gt;
== 3. 编译并烧录 device 固件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
烧录示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常见关键配置：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 编译并启动 host 软件 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 编译 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产物：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 加载内核模块 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需卸载：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 启动 host daemon ===&lt;br /&gt;
&lt;br /&gt;
默认 TTY 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显式指定 TTY：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 基础验证流程 ==&lt;br /&gt;
&lt;br /&gt;
建议按下面顺序验证：&lt;br /&gt;
&lt;br /&gt;
=== 5.1 查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 扫描 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 连接 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 再次查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果连接成功，通常可以看到：&lt;br /&gt;
&lt;br /&gt;
* backend 已连接&lt;br /&gt;
* Wi-Fi 状态为 &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 获取到地址后显示 &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.5 断开连接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 常用命令 ==&lt;br /&gt;
&lt;br /&gt;
当前公共命令固定为 9 条：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. SDIO 硬件信息 ==&lt;br /&gt;
&lt;br /&gt;
当前客户 bringup 路径建议直接按 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; 使用。&lt;br /&gt;
&amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留架构骨架，不作为当前推荐 bringup 路径。&lt;br /&gt;
&lt;br /&gt;
=== 7.1 芯片支持情况 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 接口类型&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|-&lt;br /&gt;
| SPI&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7.2 SDIO 引脚 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 功能引脚&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2&lt;br /&gt;
| GPIO10&lt;br /&gt;
| GPIO43&lt;br /&gt;
| GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3&lt;br /&gt;
| GPIO11&lt;br /&gt;
| GPIO44&lt;br /&gt;
| GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD&lt;br /&gt;
| GPIO12&lt;br /&gt;
| GPIO45&lt;br /&gt;
| GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK&lt;br /&gt;
| GPIO13&lt;br /&gt;
| GPIO46&lt;br /&gt;
| GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0&lt;br /&gt;
| GPIO14&lt;br /&gt;
| GPIO47&lt;br /&gt;
| GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1&lt;br /&gt;
| GPIO15&lt;br /&gt;
| GPIO48&lt;br /&gt;
| GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
如果客户需要在 host 与 device 之间传输私有消息，可使用 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 它不是独立物理接口，而是承载在当前 host link 上的逻辑通道&lt;br /&gt;
&lt;br /&gt;
device 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
host 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。&lt;br /&gt;
&lt;br /&gt;
== 9. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 启动失败 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* device 和 host 的控制 backend 是否匹配&lt;br /&gt;
* &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; 是否存在&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; 是否已经成功加载&lt;br /&gt;
* SDIO 硬件链路是否正常&lt;br /&gt;
&lt;br /&gt;
=== 9.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; 成功但 host 没有网络 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 是否已经进入 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 是否已经获取地址&lt;br /&gt;
* 系统里的 &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; 等服务是否覆盖了 NetHub 配置&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; 默认以 &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; 编译 userspace&lt;br /&gt;
* device 上报 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt; 后，host 会自动配置 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 的 IP、网关和 DNS&lt;br /&gt;
&lt;br /&gt;
=== 9.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; 提示模块被占用 ===&lt;br /&gt;
&lt;br /&gt;
优先确认：&lt;br /&gt;
&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
&lt;br /&gt;
通常直接执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
脚本会先尝试停止已知持有者，再执行卸载。&lt;br /&gt;
&lt;br /&gt;
== 10. 延伸阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NethubUserManual&amp;diff=238</id>
		<title>NethubUserManual</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NethubUserManual&amp;diff=238"/>
		<updated>2026-03-13T09:26:16Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面NethubUserManual至NethubUserManual old&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[NethubUserManual old]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=237</id>
		<title>NethubUserManual old</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=237"/>
		<updated>2026-03-13T09:26:13Z</updated>

		<summary type="html">&lt;p&gt;张良：​张良移动页面NethubUserManual至NethubUserManual old&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Nethub User Manual=&lt;br /&gt;
&lt;br /&gt;
基于BL616C/BL618M/BL618DG/BL616CL 的 Linux 主机通信方案，提供内核模块和用户态控制工具。&lt;br /&gt;
&lt;br /&gt;
==系统架构==&lt;br /&gt;
&lt;br /&gt;
[[文件:Arch_host_device.png|800px|center|thumb|主机-设备架构图]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;说明&#039;&#039;&#039;：当前控制通道通过 tty 传输，后续将支持通过 VirtualChannel 传输 AT 命令。&lt;br /&gt;
&lt;br /&gt;
===组件说明===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 组件 !! 类型 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifictrl || 用户态 || 命令行工具，通过 Unix Socket 与守护进程通信&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifid || 用户态 || 守护进程，负责设备通信和 WiFi 连接管理&lt;br /&gt;
|-&lt;br /&gt;
| libbflbwifi || 用户态 || 静态库，提供 WiFi 控制 API&lt;br /&gt;
|-&lt;br /&gt;
| nethub_vchan_app || 用户态 || VirtualChannel 通信程序，提供私有数据通道（消息包传输，非流式）&lt;br /&gt;
|-&lt;br /&gt;
| mr_sdio.ko || 内核态 || 内核驱动模块，支持 SDIO 接口&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===数据流向===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
用户命令：&lt;br /&gt;
bflbwifictrl → bflbwifid → libbflbwifi → /dev/ttyAT → 内核驱动 → 设备&lt;br /&gt;
&lt;br /&gt;
URC事件：&lt;br /&gt;
设备 → 内核驱动 → /dev/ttyAT → bflbwifid → 解析处理 → 网卡配置&lt;br /&gt;
&lt;br /&gt;
工作流程：&lt;br /&gt;
加载内核模块 → 启动守护进程 → TTY 通信建立 → 准备就绪&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==快速开始==&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif|center|NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
本演示展示了完整的操作流程：编译 → 加载内核模块 → 启动守护进程 → WiFi 连接 → 网络通信 → 消息收发。&lt;br /&gt;
&lt;br /&gt;
===设备端编译和烧录===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# 编译命令形如&lt;br /&gt;
make CHIP=&amp;lt;芯片名称&amp;gt; BOARD=&amp;lt;开发板名称&amp;gt;&lt;br /&gt;
# 如果用的BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
# 如果用的BL616cl&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 烧录命令形如&lt;br /&gt;
make flash CHIP=&amp;lt;芯片名称&amp;gt; COMX=&amp;lt;串口名称&amp;gt;&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===主机端编译和测试===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 假设已经将 bsp/common/msg_router/linux_host 复制到host，并在其目录下&lt;br /&gt;
cd linux_host/userspace/nethub/&lt;br /&gt;
&lt;br /&gt;
# 编译和加载内核模块&lt;br /&gt;
./build.sh build&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&lt;br /&gt;
# 启动守护进程（默认使用 /dev/ttyAT0）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0&lt;br /&gt;
&lt;br /&gt;
# 连接 AP（有密码）&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;SSID&amp;quot; &amp;quot;password&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==开发指南==&lt;br /&gt;
&lt;br /&gt;
===系统要求===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;内核版本&#039;&#039;&#039;：Linux 3.7+（内核模块需要）&lt;br /&gt;
* &#039;&#039;&#039;架构&#039;&#039;&#039;：x86_64、ARMv7（树莓派）、ARMv8（树莓派 4/5）&lt;br /&gt;
* &#039;&#039;&#039;依赖&#039;&#039;&#039;：gcc、make、libc、pthread&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;兼容性说明&#039;&#039;&#039;：&lt;br /&gt;
* ✅ 用户空间程序（bflbwifid/bflbwifictrl）：无内核版本限制&lt;br /&gt;
* ✅ 内核模块（mr_sdio.ko）：支持 Linux 3.7+&lt;br /&gt;
* ✅ 已测试：Linux raspberrypi 6.12.25+rpt-rpi-v8&lt;br /&gt;
&lt;br /&gt;
===命令参考===&lt;br /&gt;
&lt;br /&gt;
====build.sh 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; || 编译内核模块、virtualchan 和 bflbwifictrl&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; || 清理所有编译产物&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;load&amp;lt;/code&amp;gt; || 加载内核模块 &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unload&amp;lt;/code&amp;gt; || 卸载内核模块&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt; || 扫描附近 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connect_ap &amp;lt;SSID&amp;gt; [密码]&amp;lt;/code&amp;gt; || 连接到 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt; || 断开连接&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; || 查看连接状态&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; || 查看固件版本&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===功能特性===&lt;br /&gt;
&lt;br /&gt;
====bflbwifid（守护进程）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TTY 通信&#039;&#039;&#039;：与 WiFi 模块通过串口通信&lt;br /&gt;
* &#039;&#039;&#039;AT 协议&#039;&#039;&#039;：解析和封装 AT 指令&lt;br /&gt;
* &#039;&#039;&#039;状态管理&#039;&#039;&#039;：维护 WiFi 连接状态&lt;br /&gt;
* &#039;&#039;&#039;Unix Socket&#039;&#039;&#039;：提供 IPC 通信接口&lt;br /&gt;
* &#039;&#039;&#039;GOTIP 自动配置&#039;&#039;&#039;（可选）：收到 IP 后自动配置 Linux 网卡&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl（命令行工具）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CLI 接口&#039;&#039;&#039;：通过 Unix Socket 与守护进程通信&lt;br /&gt;
* &#039;&#039;&#039;简洁易用&#039;&#039;&#039;：提供常用 WiFi 操作命令&lt;br /&gt;
* &#039;&#039;&#039;状态查询&#039;&#039;&#039;：实时显示连接信息&lt;br /&gt;
&lt;br /&gt;
====GOTIP 自动配置功能（默认启用）====&lt;br /&gt;
&lt;br /&gt;
当 WiFi 模块获取 IP 后，会自动：&lt;br /&gt;
# 解析 URC：&amp;lt;code&amp;gt;+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置网卡：&amp;lt;code&amp;gt;ip addr add&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ip route add default&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置 DNS：写入 &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意事项&#039;&#039;&#039;：&lt;br /&gt;
* 部分host需要禁用 NetworkManager：&amp;lt;code&amp;gt;sudo systemctl disable --now NetworkManager&amp;lt;/code&amp;gt;&lt;br /&gt;
* 需要禁用 dhcpcd：&amp;lt;code&amp;gt;sudo systemctl disable --now dhcpcd&amp;lt;/code&amp;gt;&lt;br /&gt;
* 默认网卡名为 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;（可在代码中修改）&lt;br /&gt;
&lt;br /&gt;
===代码修改与编译===&lt;br /&gt;
&lt;br /&gt;
====修改代码后重新编译====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 只编译 bflbwifictrl&lt;br /&gt;
cd bflbwifictrl&lt;br /&gt;
make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
# 或使用 build.sh 编译所有&lt;br /&gt;
cd ..&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====重新加载内核模块====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Virtual Channel 私有数据收发===&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 提供了一套独立于 AT 命令的私有数据传输通道，可用于用户自定义应用数据的双向传输。&lt;br /&gt;
&lt;br /&gt;
====概述====&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 支持三种数据类型：&lt;br /&gt;
* &#039;&#039;&#039;USER (0x01)&#039;&#039;&#039;：用户私有数据（推荐用于用户自定义应用）&lt;br /&gt;
* &#039;&#039;&#039;AT (0x02)&#039;&#039;&#039;：AT 命令数据(todo)&lt;br /&gt;
* &#039;&#039;&#039;SYSTEM (0x03)&#039;&#039;&#039;：系统相关数据(todo)&lt;br /&gt;
&lt;br /&gt;
====设备端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;components/net/nethub/transport/sdio/sdio_virtualchan/virtualchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(virtualchan_dnld_cb_t dnld_cb, void *cb_arg);&lt;br /&gt;
typedef int (*virtualchan_dnld_cb_t)(void *arg, uint8_t *data_buff, uint16_t data_size);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====主机端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
/* 回调函数类型定义 */&lt;br /&gt;
typedef void (*nethub_vchan_recv_callback_t)(const void *data, size_t len);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====数据格式说明====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;消息帧格式&#039;&#039;&#039;（自动处理，用户无需关心）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
| data_type| reserved  | len   | data[] |&lt;br /&gt;
| 1 byte   | 1 byte    | 2 bytes| N bytes|&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data_type&#039;&#039;&#039;：数据类型（USER=0x01, AT=0x02, SYSTEM=0x03）&lt;br /&gt;
* &#039;&#039;&#039;reserved&#039;&#039;&#039;：保留字段（固定为 0）&lt;br /&gt;
* &#039;&#039;&#039;len&#039;&#039;&#039;：用户数据长度&lt;br /&gt;
* &#039;&#039;&#039;data[]&#039;&#039;&#039;：实际用户数据&lt;br /&gt;
&lt;br /&gt;
====完整示例====&lt;br /&gt;
&lt;br /&gt;
参考以下完整示例代码：&lt;br /&gt;
* &#039;&#039;&#039;设备端&#039;&#039;&#039;：&amp;lt;code&amp;gt;examples/wifi/nethub/app/src/virtualchan/app_vchan.c&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;主机端&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan_app.c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====使用限制====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 项目 !! 限制&lt;br /&gt;
|-&lt;br /&gt;
| 最大数据长度 || 1500 字节（可配置）&lt;br /&gt;
|-&lt;br /&gt;
| 传输方式 || 消息包传输（非流式）&lt;br /&gt;
|-&lt;br /&gt;
| 通信方向 || 双向（设备 ↔ Host）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====运行测试程序====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 编译（在 nethub 目录下）&lt;br /&gt;
cd virtualchan&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
# 运行测试程序&lt;br /&gt;
sudo ./nethub_vchan_app&lt;br /&gt;
&lt;br /&gt;
# 在程序中使用命令&lt;br /&gt;
nethub_vchan&amp;gt; send user hello              # 发送 ASCII 字符串&lt;br /&gt;
nethub_vchan&amp;gt; send user hex 0102030405     # 发送十六进制数据&lt;br /&gt;
nethub_vchan&amp;gt; test flow 100 512            # 流量测试（100个包，每包512字节）&lt;br /&gt;
nethub_vchan&amp;gt; test mtu 1024                # MTU测试（发送1024字节）&lt;br /&gt;
nethub_vchan&amp;gt; status                       # 查看统计信息&lt;br /&gt;
nethub_vchan&amp;gt; help                         # 查看帮助&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==常见问题==&lt;br /&gt;
&lt;br /&gt;
===找不到串口设备===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看可用串口&lt;br /&gt;
ls /dev/ttyACM* /dev/ttyUSB*&lt;br /&gt;
&lt;br /&gt;
# 添加用户到 dialout 组（避免每次都用 sudo）&lt;br /&gt;
sudo usermod -aG dialout $USER&lt;br /&gt;
# 然后重新登录&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IP 配置后自动消失===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;原因&#039;&#039;&#039;：NetworkManager 或 dhcpcd 覆盖了手动配置。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;解决&#039;&#039;&#039;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 禁用 NetworkManager&lt;br /&gt;
sudo systemctl stop NetworkManager&lt;br /&gt;
sudo systemctl disable NetworkManager&lt;br /&gt;
&lt;br /&gt;
# 禁用 dhcpcd&lt;br /&gt;
sudo systemctl stop dhcpcd&lt;br /&gt;
sudo systemctl disable dhcpcd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===查看调试日志===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看守护进程日志&lt;br /&gt;
tail -f /var/log/bflbwifi.log&lt;br /&gt;
&lt;br /&gt;
# 查看内核日志&lt;br /&gt;
dmesg -w&lt;br /&gt;
&lt;br /&gt;
# 守护进程前台运行（查看实时输出）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0 --foreground&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===编译错误===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 确保安装必要的开发包&lt;br /&gt;
sudo apt-get install build-essential libc-dev-i386&lt;br /&gt;
&lt;br /&gt;
# 树莓派需要安装 32 位兼容库&lt;br /&gt;
sudo apt-get install libc6:i386 libstdc++6:i386&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=236</id>
		<title>NetHub</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHub&amp;diff=236"/>
		<updated>2026-03-13T09:19:18Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“= NetHub =  NetHub 用于把 device 侧的 Wi-Fi 能力桥接到 host。  当前方案面向 &amp;lt;code&amp;gt;BL616 / BL618 / BL616CL / BL618DG&amp;lt;/code&amp;gt; 这类 Wi-Fi SoC，当前推荐 bringup 路径为 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;。  == 页面导航 ==  * NetHub 快速上手 ** 面向首次 bringup 的客户 ** 说明 device/host 的关键选择、编译、加载、连接 AP 和常见问题 * NetHub 架构说明 ** 面向需要理解模…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub =&lt;br /&gt;
&lt;br /&gt;
NetHub 用于把 device 侧的 Wi-Fi 能力桥接到 host。&lt;br /&gt;
&lt;br /&gt;
当前方案面向 &amp;lt;code&amp;gt;BL616 / BL618 / BL616CL / BL618DG&amp;lt;/code&amp;gt; 这类 Wi-Fi SoC，当前推荐 bringup 路径为 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 页面导航 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubQuickBringup|NetHub 快速上手]]&lt;br /&gt;
** 面向首次 bringup 的客户&lt;br /&gt;
** 说明 device/host 的关键选择、编译、加载、连接 AP 和常见问题&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
** 面向需要理解模块边界和 API 的开发者&lt;br /&gt;
** 说明 device/host 分层、公共接口和关键数据流&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;br /&gt;
** 面向需要传输私有数据的客户或应用开发者&lt;br /&gt;
** 说明 USER 通道的前提、API 和典型使用方式&lt;br /&gt;
&lt;br /&gt;
== 当前结论 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt;&lt;br /&gt;
* device 侧 Wi-Fi backend 支持 &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 控制 backend 运行时二选一：&amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
== 仓内参考目录 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel&amp;diff=235</id>
		<title>NetHubVirtualChannel</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubVirtualChannel&amp;diff=235"/>
		<updated>2026-03-13T09:17:57Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“= NetHub USER Virtual Channel =  本文档描述 NetHub 的 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 用法。  == 1. 概念 ==  &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 是承载在当前 host link 上的逻辑消息通道。  它不是独立物理接口，而是复用当前的 &amp;lt;code&amp;gt;SDIO / USB / SPI&amp;lt;/code&amp;gt; 链路，把不同类型的数据拆分到不同逻辑通道中。  当前常用类型：  * &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; ** 客户或应用层私有数据 * &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt; ** hos…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub USER Virtual Channel =&lt;br /&gt;
&lt;br /&gt;
本文档描述 NetHub 的 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 用法。&lt;br /&gt;
&lt;br /&gt;
== 1. 概念 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 是承载在当前 host link 上的逻辑消息通道。&lt;br /&gt;
&lt;br /&gt;
它不是独立物理接口，而是复用当前的 &amp;lt;code&amp;gt;SDIO / USB / SPI&amp;lt;/code&amp;gt; 链路，把不同类型的数据拆分到不同逻辑通道中。&lt;br /&gt;
&lt;br /&gt;
当前常用类型：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt;&lt;br /&gt;
** 客户或应用层私有数据&lt;br /&gt;
* &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt;&lt;br /&gt;
** host 控制面数据&lt;br /&gt;
* &amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;&lt;br /&gt;
** 系统内部协调消息&lt;br /&gt;
&lt;br /&gt;
客户集成时，通常只需要关注 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 类型。&lt;br /&gt;
&lt;br /&gt;
== 2. bringup 前提 ==&lt;br /&gt;
&lt;br /&gt;
使用前建议确认：&lt;br /&gt;
&lt;br /&gt;
* device 侧已编入 &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* device 侧已编入 &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧已经加载 &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 与 device 的底层链路已经正常工作&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 如果 host 控制面本身走 &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;，它使用的是 &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt; 类型&lt;br /&gt;
* 客户私有消息建议固定使用 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 类型&lt;br /&gt;
&lt;br /&gt;
== 3. Device 侧接口 ==&lt;br /&gt;
&lt;br /&gt;
头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常用接口：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(nethub_vchan_recv_cb_t recv_cb, void *cb_arg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Host 侧接口 ==&lt;br /&gt;
&lt;br /&gt;
头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.1 初始化与清理 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_deinit(void);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 USER 通道 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef void (*nethub_vchan_recv_callback_t)(const void *data, size_t len);&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 可选状态查询 ===&lt;br /&gt;
&lt;br /&gt;
如果需要判断当前 virtual channel 是否 ready，可选使用：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    nethub_vchan_link_state_t link_state;&lt;br /&gt;
    nethub_vchan_host_state_t host_state;&lt;br /&gt;
} nethub_vchan_state_snapshot_t;&lt;br /&gt;
&lt;br /&gt;
int nethub_vchan_get_state_snapshot(nethub_vchan_state_snapshot_t *snapshot);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常用判断：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;link_state == NETHUB_VCHAN_LINK_UP&amp;lt;/code&amp;gt;&lt;br /&gt;
** 表示链路已可收发&lt;br /&gt;
* &amp;lt;code&amp;gt;host_state == NETHUB_VCHAN_HOST_STATE_DEVICE_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
** 表示 host 侧已经和 device 完成握手&lt;br /&gt;
&lt;br /&gt;
=== 4.4 可选链路事件回调 ===&lt;br /&gt;
&lt;br /&gt;
如果应用希望在链路 up/down 时被动收到通知，可选注册：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_register_link_event_callback(&lt;br /&gt;
    nethub_vchan_link_event_callback_t callback,&lt;br /&gt;
    void *user_data);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 典型使用顺序 ==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
# 使用完成后调用 &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;nethub_vchan.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static void user_rx_cb(const void *data, size_t len)&lt;br /&gt;
{&lt;br /&gt;
    printf(&amp;quot;recv USER data: %.*s\n&amp;quot;, (int)len, (const char *)data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    const char *msg = &amp;quot;hello from host&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (nethub_vchan_init() != 0) {&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    nethub_vchan_user_register_callback(user_rx_cb);&lt;br /&gt;
    nethub_vchan_user_send(msg, strlen(msg));&lt;br /&gt;
&lt;br /&gt;
    nethub_vchan_deinit();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 限制与注意事项 ==&lt;br /&gt;
&lt;br /&gt;
* 单次消息最大长度为 &amp;lt;code&amp;gt;1500&amp;lt;/code&amp;gt; 字节&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道是消息包语义，不是流式字节流&lt;br /&gt;
* 使用前必须保证内核模块已经加载&lt;br /&gt;
* 如果 device 侧未启用 &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN&amp;lt;/code&amp;gt;，host 侧 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道无法工作&lt;br /&gt;
* 如果同时使用 host 控制面和 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道，客户私有数据不要复用 &amp;lt;code&amp;gt;AT&amp;lt;/code&amp;gt; 类型&lt;br /&gt;
&lt;br /&gt;
== 7. 相关页面 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubQuickBringup|NetHub 快速上手]]&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=234</id>
		<title>NetHubQuickBringup</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubQuickBringup&amp;diff=234"/>
		<updated>2026-03-13T09:17:37Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“= NetHub 快速上手 =  本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。  == 1. 方案概览 ==  * 当前主路径是 &amp;#039;&amp;#039;&amp;#039;SDIO&amp;#039;&amp;#039;&amp;#039; * device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt; * &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host * 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上  当前生效目录：  * device 侧 ** &amp;lt;code&amp;gt;compone…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 快速上手 =&lt;br /&gt;
&lt;br /&gt;
本文档面向首次接触 NetHub 的客户，目标是尽快完成 device 和 host 的 bringup。&lt;br /&gt;
&lt;br /&gt;
== 1. 方案概览 ==&lt;br /&gt;
&lt;br /&gt;
* 当前主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* device 侧运行 &amp;lt;code&amp;gt;Wi-Fi backend（fhost / wl80211）+ lwIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 负责把 device 侧 Wi-Fi 能力桥接到 host&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都承载在同一条 host link 上&lt;br /&gt;
&lt;br /&gt;
当前生效目录：&lt;br /&gt;
&lt;br /&gt;
* device 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;components/net/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;examples/wifi/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
* host 侧&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/kernel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Bringup 前先确认两项选择 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 选择 Wi-Fi backend ===&lt;br /&gt;
&lt;br /&gt;
默认配置：&lt;br /&gt;
&lt;br /&gt;
* 不打开 &amp;lt;code&amp;gt;CONFIG_WL80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 使用 &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果要切到 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;examples/wifi/nethub/defconfig&amp;lt;/code&amp;gt; 中打开：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_WL80211=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;fhost&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;wl80211&amp;lt;/code&amp;gt; 是二选一关系&lt;br /&gt;
* 当前 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 同时支持这两种 device Wi-Fi backend&lt;br /&gt;
&lt;br /&gt;
=== 2.2 选择控制通道 ===&lt;br /&gt;
&lt;br /&gt;
device 与 host 需要匹配：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! device 配置&lt;br /&gt;
! host 启动方式&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;./output/bflbwifid -c tty -p /dev/ttyAT0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;./output/bflbwifid -c vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
默认配置是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_NETHUB_AT_USE_VCHAN=n&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
即控制通道默认走 &amp;lt;code&amp;gt;TTY&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
补充说明：&lt;br /&gt;
&lt;br /&gt;
* host 侧会同时编入 &amp;lt;code&amp;gt;tty + vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
* 实际选择发生在 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 运行时&lt;br /&gt;
&lt;br /&gt;
== 3. 编译并烧录 device 固件 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
&lt;br /&gt;
# BL616CL&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
&lt;br /&gt;
# BL618DG&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
烧录示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常见关键配置：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_NETDEV=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_TTY=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MR_VIRTUALCHAN=y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETHUB_AT_USE_VCHAN=n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 编译并启动 host 软件 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 编译 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产物：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;output/mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/bflbwifictrl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/libnethub_vchan.a&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/nethub_vchan_app&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 加载内核模块 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd bsp/common/msg_router/linux_host/userspace/nethub&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需卸载：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 启动 host daemon ===&lt;br /&gt;
&lt;br /&gt;
默认 TTY 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显式指定 TTY：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c tty -p /dev/ttyAT0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VCHAN 模式：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifid -c vchan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. 基础验证流程 ==&lt;br /&gt;
&lt;br /&gt;
建议按下面顺序验证：&lt;br /&gt;
&lt;br /&gt;
=== 5.1 查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 扫描 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 连接 AP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;&amp;lt;ssid&amp;gt;&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 再次查看状态 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果连接成功，通常可以看到：&lt;br /&gt;
&lt;br /&gt;
* backend 已连接&lt;br /&gt;
* Wi-Fi 状态为 &amp;lt;code&amp;gt;CONNECTED&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 获取到地址后显示 &amp;lt;code&amp;gt;IP / Gateway / Netmask / DNS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.5 断开连接 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 常用命令 ==&lt;br /&gt;
&lt;br /&gt;
当前公共命令固定为 9 条：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ota&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;start_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;stop_ap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. SDIO 硬件信息 ==&lt;br /&gt;
&lt;br /&gt;
当前客户 bringup 路径建议直接按 &amp;lt;code&amp;gt;SDIO&amp;lt;/code&amp;gt; 使用。&lt;br /&gt;
&amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留架构骨架，不作为当前推荐 bringup 路径。&lt;br /&gt;
&lt;br /&gt;
=== 7.1 芯片支持情况 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 接口类型&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
| 支持&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|-&lt;br /&gt;
| SPI&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
| 规划中&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7.2 SDIO 引脚 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 功能引脚&lt;br /&gt;
! BL616 / BL618&lt;br /&gt;
! BL618DG&lt;br /&gt;
! BL616CL&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT2&lt;br /&gt;
| GPIO10&lt;br /&gt;
| GPIO43&lt;br /&gt;
| GPIO6&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DAT3&lt;br /&gt;
| GPIO11&lt;br /&gt;
| GPIO44&lt;br /&gt;
| GPIO7&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CMD&lt;br /&gt;
| GPIO12&lt;br /&gt;
| GPIO45&lt;br /&gt;
| GPIO8&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_CLK&lt;br /&gt;
| GPIO13&lt;br /&gt;
| GPIO46&lt;br /&gt;
| GPIO9&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA0&lt;br /&gt;
| GPIO14&lt;br /&gt;
| GPIO47&lt;br /&gt;
| GPIO10&lt;br /&gt;
|-&lt;br /&gt;
| SDIO_DATA1&lt;br /&gt;
| GPIO15&lt;br /&gt;
| GPIO48&lt;br /&gt;
| GPIO11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 8. USER Virtual Channel ==&lt;br /&gt;
&lt;br /&gt;
如果客户需要在 host 与 device 之间传输私有消息，可使用 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道和控制通道是并列关系&lt;br /&gt;
* 它不是独立物理接口，而是承载在当前 host link 上的逻辑通道&lt;br /&gt;
&lt;br /&gt;
device 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
host 侧头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
更多说明见 [[NetHubVirtualChannel|NetHub USER Virtual Channel]]。&lt;br /&gt;
&lt;br /&gt;
== 9. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 启动失败 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* device 和 host 的控制 backend 是否匹配&lt;br /&gt;
* &amp;lt;code&amp;gt;/dev/ttyAT0&amp;lt;/code&amp;gt; 是否存在&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt; 是否已经成功加载&lt;br /&gt;
* SDIO 硬件链路是否正常&lt;br /&gt;
&lt;br /&gt;
=== 9.2 &amp;lt;code&amp;gt;connect_ap&amp;lt;/code&amp;gt; 成功但 host 没有网络 ===&lt;br /&gt;
&lt;br /&gt;
优先检查：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; 是否已经进入 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 是否已经获取地址&lt;br /&gt;
* 系统里的 &amp;lt;code&amp;gt;NetworkManager&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;dhcpcd&amp;lt;/code&amp;gt; 等服务是否覆盖了 NetHub 配置&lt;br /&gt;
&lt;br /&gt;
说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt; 默认以 &amp;lt;code&amp;gt;ENABLE_NETIF_AUTO_CONFIG=1&amp;lt;/code&amp;gt; 编译 userspace&lt;br /&gt;
* device 上报 &amp;lt;code&amp;gt;GOTIP&amp;lt;/code&amp;gt; 后，host 会自动配置 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt; 的 IP、网关和 DNS&lt;br /&gt;
&lt;br /&gt;
=== 9.3 &amp;lt;code&amp;gt;build.sh unload&amp;lt;/code&amp;gt; 提示模块被占用 ===&lt;br /&gt;
&lt;br /&gt;
优先确认：&lt;br /&gt;
&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
* 是否还有 &amp;lt;code&amp;gt;nethub_vchan_app&amp;lt;/code&amp;gt; 正在运行&lt;br /&gt;
&lt;br /&gt;
通常直接执行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
脚本会先尝试停止已知持有者，再执行卸载。&lt;br /&gt;
&lt;br /&gt;
== 10. 延伸阅读 ==&lt;br /&gt;
&lt;br /&gt;
* [[NetHubArchitecture|NetHub 架构说明]]&lt;br /&gt;
* [[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NetHubArchitecture&amp;diff=233</id>
		<title>NetHubArchitecture</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NetHubArchitecture&amp;diff=233"/>
		<updated>2026-03-13T09:16:39Z</updated>

		<summary type="html">&lt;p&gt;张良：​创建页面，内容为“= NetHub 架构说明 =  本文档面向需要理解模块边界和 API 的开发者。  == 1. 当前架构结论 ==  * 当前物理主路径是 &amp;#039;&amp;#039;&amp;#039;SDIO&amp;#039;&amp;#039;&amp;#039; * &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留 backend 骨架，不作为当前推荐 bringup 路径 * device 侧 Wi-Fi backend 支持 &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt; * 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都是当前 host link 上的逻辑通道，不是独立物理接口 * host 控制 backend 运行…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NetHub 架构说明 =&lt;br /&gt;
&lt;br /&gt;
本文档面向需要理解模块边界和 API 的开发者。&lt;br /&gt;
&lt;br /&gt;
== 1. 当前架构结论 ==&lt;br /&gt;
&lt;br /&gt;
* 当前物理主路径是 &#039;&#039;&#039;SDIO&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;USB / SPI&amp;lt;/code&amp;gt; 目前仍保留 backend 骨架，不作为当前推荐 bringup 路径&lt;br /&gt;
* device 侧 Wi-Fi backend 支持 &amp;lt;code&amp;gt;fhost / wl80211&amp;lt;/code&amp;gt;&lt;br /&gt;
* 控制通道和 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt; 都是当前 host link 上的逻辑通道，不是独立物理接口&lt;br /&gt;
* host 控制 backend 运行时二选一：&amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. 功能视角架构图 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Host&lt;br /&gt;
  |&lt;br /&gt;
  | network data / control payload / USER payload&lt;br /&gt;
  v&lt;br /&gt;
Host Link (current main path: SDIO)&lt;br /&gt;
  |&lt;br /&gt;
  +-- Data Channel   &amp;lt;--&amp;gt; nethub data bridge&lt;br /&gt;
  +-- Control Channel &amp;lt;-&amp;gt; nethub ctrlpath &amp;lt;-&amp;gt; ATModule&lt;br /&gt;
  +-- USER VCHAN      &amp;lt;-&amp;gt; nethub vchan user path&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Device&lt;br /&gt;
  |&lt;br /&gt;
  +-- nethub&lt;br /&gt;
  |    +-- data bridge&lt;br /&gt;
  |    +-- hard-coded Wi-Fi RX filter&lt;br /&gt;
  |    +-- active Wi-Fi selector (STA / AP)&lt;br /&gt;
  |    +-- ctrlpath&lt;br /&gt;
  |    +-- virtual channel&lt;br /&gt;
  |&lt;br /&gt;
  +-- Wi-Fi backend (fhost / wl80211) + lwIP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
从功能上看，&amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 主要做 4 件事：&lt;br /&gt;
&lt;br /&gt;
* 维护 &amp;lt;code&amp;gt;Wi-Fi &amp;lt;-&amp;gt; HostLink&amp;lt;/code&amp;gt; 的数据桥接&lt;br /&gt;
* 用硬编码 filter 决定报文是 &amp;lt;code&amp;gt;local&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt;、还是 &amp;lt;code&amp;gt;both&amp;lt;/code&amp;gt;&lt;br /&gt;
* 维护当前生效的 Wi-Fi 通道选择 &amp;lt;code&amp;gt;STA / AP&amp;lt;/code&amp;gt;&lt;br /&gt;
* 在同一 host link 上提供控制通道和可选的 &amp;lt;code&amp;gt;USER virtual channel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. 技术/API 视角架构图 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
  |&lt;br /&gt;
  +-- device public API&lt;br /&gt;
  |    +-- nethub.h&lt;br /&gt;
  |    +-- nethub_vchan.h&lt;br /&gt;
  |    +-- nethub_filter.h&lt;br /&gt;
  |&lt;br /&gt;
  +-- host public API&lt;br /&gt;
       +-- bflbwifi.h&lt;br /&gt;
       +-- virtualchan/nethub_vchan.h&lt;br /&gt;
&lt;br /&gt;
device side&lt;br /&gt;
  nethub_bootstrap()&lt;br /&gt;
    -&amp;gt; profile select&lt;br /&gt;
    -&amp;gt; endpoint register&lt;br /&gt;
    -&amp;gt; hub lifecycle&lt;br /&gt;
    -&amp;gt; Wi-Fi bridge&lt;br /&gt;
    -&amp;gt; host backend (current main path: sdio)&lt;br /&gt;
&lt;br /&gt;
host side&lt;br /&gt;
  bflbwifictrl&lt;br /&gt;
    -&amp;gt; IPC&lt;br /&gt;
    -&amp;gt; bflbwifid&lt;br /&gt;
    -&amp;gt; libbflbwifi&lt;br /&gt;
    -&amp;gt; channel facade&lt;br /&gt;
       +-- tty backend&lt;br /&gt;
       +-- vchan backend&lt;br /&gt;
    -&amp;gt; mr_sdio.ko + msg_router&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Device 侧公共接口 ==&lt;br /&gt;
&lt;br /&gt;
头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;components/net/nethub/include/nethub_filter.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
核心 API：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_bootstrap()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_shutdown()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_get_status()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_active_wifi_channel()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_upld_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_dnld_register()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_recv_register()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_wifi_rx_filter()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
边界说明：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_ctrl_*&amp;lt;/code&amp;gt; 对应 host link 上的逻辑控制通道&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_*&amp;lt;/code&amp;gt; 对应 host link 上的逻辑 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_set_wifi_rx_filter()&amp;lt;/code&amp;gt; 用于完全替换内建 Wi-Fi RX filter，必须在 &amp;lt;code&amp;gt;nethub_bootstrap()&amp;lt;/code&amp;gt; 前调用&lt;br /&gt;
&lt;br /&gt;
== 5. Host 侧公共接口 ==&lt;br /&gt;
&lt;br /&gt;
头文件：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/bflbwifictrl/include/bflbwifi.h&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
控制面能力：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_use_tty()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ctrl_config_use_vchan()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_init_ex()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_get_ctrl_status()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_connect()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_disconnect()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_sta_get_state()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_scan()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_get_version()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_restart()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ota_upgrade()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ap_start()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bflbwifi_ap_stop()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USER virtual channel 能力：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_deinit()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_send()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_user_register_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_get_state_snapshot()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;nethub_vchan_register_link_event_callback()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. 关键数据流 ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 connect_ap ===&lt;br /&gt;
&lt;br /&gt;
# 用户执行 &amp;lt;code&amp;gt;bflbwifictrl connect_ap &amp;amp;lt;ssid&amp;amp;gt; &amp;amp;lt;password&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# CLI 通过本地 IPC 把命令发给 &amp;lt;code&amp;gt;bflbwifid&amp;lt;/code&amp;gt;&lt;br /&gt;
# daemon 调用 &amp;lt;code&amp;gt;libbflbwifi&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;libbflbwifi&amp;lt;/code&amp;gt; 通过 &amp;lt;code&amp;gt;tty&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;vchan&amp;lt;/code&amp;gt; backend 下发控制消息&lt;br /&gt;
# device 侧 &amp;lt;code&amp;gt;ATModule&amp;lt;/code&amp;gt; 执行 Wi-Fi 控制&lt;br /&gt;
# device 侧上报响应和状态，host 侧刷新状态并返回结果&lt;br /&gt;
&lt;br /&gt;
=== 6.2 数据面 ===&lt;br /&gt;
&lt;br /&gt;
# host 网络流量进入 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;&lt;br /&gt;
# kernel/msg_router 通过 SDIO 与 device 通信&lt;br /&gt;
# device 侧 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; 把 host data 转给当前 active Wi-Fi&lt;br /&gt;
# Wi-Fi RX 包经过 &amp;lt;code&amp;gt;nethub&amp;lt;/code&amp;gt; filter 判断后，决定是本地处理、发给 host，还是两边都处理&lt;br /&gt;
&lt;br /&gt;
== 7. 推荐阅读顺序 ==&lt;br /&gt;
&lt;br /&gt;
* 首次 bringup：[[NetHubQuickBringup|NetHub 快速上手]]&lt;br /&gt;
* 理解 &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; 通道：[[NetHubVirtualChannel|NetHub USER Virtual Channel]]&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=232</id>
		<title>NethubUserManual old</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=232"/>
		<updated>2026-03-06T06:24:56Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Nethub User Manual=&lt;br /&gt;
&lt;br /&gt;
基于BL616C/BL618M/BL618DG/BL616CL 的 Linux 主机通信方案，提供内核模块和用户态控制工具。&lt;br /&gt;
&lt;br /&gt;
==系统架构==&lt;br /&gt;
&lt;br /&gt;
[[文件:Arch_host_device.png|800px|center|thumb|主机-设备架构图]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;说明&#039;&#039;&#039;：当前控制通道通过 tty 传输，后续将支持通过 VirtualChannel 传输 AT 命令。&lt;br /&gt;
&lt;br /&gt;
===组件说明===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 组件 !! 类型 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifictrl || 用户态 || 命令行工具，通过 Unix Socket 与守护进程通信&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifid || 用户态 || 守护进程，负责设备通信和 WiFi 连接管理&lt;br /&gt;
|-&lt;br /&gt;
| libbflbwifi || 用户态 || 静态库，提供 WiFi 控制 API&lt;br /&gt;
|-&lt;br /&gt;
| nethub_vchan_app || 用户态 || VirtualChannel 通信程序，提供私有数据通道（消息包传输，非流式）&lt;br /&gt;
|-&lt;br /&gt;
| mr_sdio.ko || 内核态 || 内核驱动模块，支持 SDIO 接口&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===数据流向===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
用户命令：&lt;br /&gt;
bflbwifictrl → bflbwifid → libbflbwifi → /dev/ttyAT → 内核驱动 → 设备&lt;br /&gt;
&lt;br /&gt;
URC事件：&lt;br /&gt;
设备 → 内核驱动 → /dev/ttyAT → bflbwifid → 解析处理 → 网卡配置&lt;br /&gt;
&lt;br /&gt;
工作流程：&lt;br /&gt;
加载内核模块 → 启动守护进程 → TTY 通信建立 → 准备就绪&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==快速开始==&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif|center|NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
本演示展示了完整的操作流程：编译 → 加载内核模块 → 启动守护进程 → WiFi 连接 → 网络通信 → 消息收发。&lt;br /&gt;
&lt;br /&gt;
===设备端编译和烧录===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd examples/wifi/nethub&lt;br /&gt;
&lt;br /&gt;
# 编译命令形如&lt;br /&gt;
make CHIP=&amp;lt;芯片名称&amp;gt; BOARD=&amp;lt;开发板名称&amp;gt;&lt;br /&gt;
# 如果用的BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
# 如果用的BL616cl&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 烧录命令形如&lt;br /&gt;
make flash CHIP=&amp;lt;芯片名称&amp;gt; COMX=&amp;lt;串口名称&amp;gt;&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===主机端编译和测试===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 假设已经将 bsp/common/msg_router/linux_host 复制到host，并在其目录下&lt;br /&gt;
cd linux_host/userspace/nethub/&lt;br /&gt;
&lt;br /&gt;
# 编译和加载内核模块&lt;br /&gt;
./build.sh build&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&lt;br /&gt;
# 启动守护进程（默认使用 /dev/ttyAT0）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0&lt;br /&gt;
&lt;br /&gt;
# 连接 AP（有密码）&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;SSID&amp;quot; &amp;quot;password&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==开发指南==&lt;br /&gt;
&lt;br /&gt;
===系统要求===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;内核版本&#039;&#039;&#039;：Linux 3.7+（内核模块需要）&lt;br /&gt;
* &#039;&#039;&#039;架构&#039;&#039;&#039;：x86_64、ARMv7（树莓派）、ARMv8（树莓派 4/5）&lt;br /&gt;
* &#039;&#039;&#039;依赖&#039;&#039;&#039;：gcc、make、libc、pthread&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;兼容性说明&#039;&#039;&#039;：&lt;br /&gt;
* ✅ 用户空间程序（bflbwifid/bflbwifictrl）：无内核版本限制&lt;br /&gt;
* ✅ 内核模块（mr_sdio.ko）：支持 Linux 3.7+&lt;br /&gt;
* ✅ 已测试：Linux raspberrypi 6.12.25+rpt-rpi-v8&lt;br /&gt;
&lt;br /&gt;
===命令参考===&lt;br /&gt;
&lt;br /&gt;
====build.sh 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; || 编译内核模块、virtualchan 和 bflbwifictrl&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; || 清理所有编译产物&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;load&amp;lt;/code&amp;gt; || 加载内核模块 &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unload&amp;lt;/code&amp;gt; || 卸载内核模块&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt; || 扫描附近 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connect_ap &amp;lt;SSID&amp;gt; [密码]&amp;lt;/code&amp;gt; || 连接到 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt; || 断开连接&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; || 查看连接状态&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; || 查看固件版本&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===功能特性===&lt;br /&gt;
&lt;br /&gt;
====bflbwifid（守护进程）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TTY 通信&#039;&#039;&#039;：与 WiFi 模块通过串口通信&lt;br /&gt;
* &#039;&#039;&#039;AT 协议&#039;&#039;&#039;：解析和封装 AT 指令&lt;br /&gt;
* &#039;&#039;&#039;状态管理&#039;&#039;&#039;：维护 WiFi 连接状态&lt;br /&gt;
* &#039;&#039;&#039;Unix Socket&#039;&#039;&#039;：提供 IPC 通信接口&lt;br /&gt;
* &#039;&#039;&#039;GOTIP 自动配置&#039;&#039;&#039;（可选）：收到 IP 后自动配置 Linux 网卡&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl（命令行工具）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CLI 接口&#039;&#039;&#039;：通过 Unix Socket 与守护进程通信&lt;br /&gt;
* &#039;&#039;&#039;简洁易用&#039;&#039;&#039;：提供常用 WiFi 操作命令&lt;br /&gt;
* &#039;&#039;&#039;状态查询&#039;&#039;&#039;：实时显示连接信息&lt;br /&gt;
&lt;br /&gt;
====GOTIP 自动配置功能（默认启用）====&lt;br /&gt;
&lt;br /&gt;
当 WiFi 模块获取 IP 后，会自动：&lt;br /&gt;
# 解析 URC：&amp;lt;code&amp;gt;+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置网卡：&amp;lt;code&amp;gt;ip addr add&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ip route add default&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置 DNS：写入 &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意事项&#039;&#039;&#039;：&lt;br /&gt;
* 部分host需要禁用 NetworkManager：&amp;lt;code&amp;gt;sudo systemctl disable --now NetworkManager&amp;lt;/code&amp;gt;&lt;br /&gt;
* 需要禁用 dhcpcd：&amp;lt;code&amp;gt;sudo systemctl disable --now dhcpcd&amp;lt;/code&amp;gt;&lt;br /&gt;
* 默认网卡名为 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;（可在代码中修改）&lt;br /&gt;
&lt;br /&gt;
===代码修改与编译===&lt;br /&gt;
&lt;br /&gt;
====修改代码后重新编译====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 只编译 bflbwifictrl&lt;br /&gt;
cd bflbwifictrl&lt;br /&gt;
make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
# 或使用 build.sh 编译所有&lt;br /&gt;
cd ..&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====重新加载内核模块====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Virtual Channel 私有数据收发===&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 提供了一套独立于 AT 命令的私有数据传输通道，可用于用户自定义应用数据的双向传输。&lt;br /&gt;
&lt;br /&gt;
====概述====&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 支持三种数据类型：&lt;br /&gt;
* &#039;&#039;&#039;USER (0x01)&#039;&#039;&#039;：用户私有数据（推荐用于用户自定义应用）&lt;br /&gt;
* &#039;&#039;&#039;AT (0x02)&#039;&#039;&#039;：AT 命令数据(todo)&lt;br /&gt;
* &#039;&#039;&#039;SYSTEM (0x03)&#039;&#039;&#039;：系统相关数据(todo)&lt;br /&gt;
&lt;br /&gt;
====设备端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;components/net/nethub/transport/sdio/sdio_virtualchan/virtualchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(virtualchan_dnld_cb_t dnld_cb, void *cb_arg);&lt;br /&gt;
typedef int (*virtualchan_dnld_cb_t)(void *arg, uint8_t *data_buff, uint16_t data_size);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====主机端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
/* 回调函数类型定义 */&lt;br /&gt;
typedef void (*nethub_vchan_recv_callback_t)(const void *data, size_t len);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====数据格式说明====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;消息帧格式&#039;&#039;&#039;（自动处理，用户无需关心）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
| data_type| reserved  | len   | data[] |&lt;br /&gt;
| 1 byte   | 1 byte    | 2 bytes| N bytes|&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data_type&#039;&#039;&#039;：数据类型（USER=0x01, AT=0x02, SYSTEM=0x03）&lt;br /&gt;
* &#039;&#039;&#039;reserved&#039;&#039;&#039;：保留字段（固定为 0）&lt;br /&gt;
* &#039;&#039;&#039;len&#039;&#039;&#039;：用户数据长度&lt;br /&gt;
* &#039;&#039;&#039;data[]&#039;&#039;&#039;：实际用户数据&lt;br /&gt;
&lt;br /&gt;
====完整示例====&lt;br /&gt;
&lt;br /&gt;
参考以下完整示例代码：&lt;br /&gt;
* &#039;&#039;&#039;设备端&#039;&#039;&#039;：&amp;lt;code&amp;gt;examples/wifi/nethub/app/src/virtualchan/app_vchan.c&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;主机端&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan_app.c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====使用限制====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 项目 !! 限制&lt;br /&gt;
|-&lt;br /&gt;
| 最大数据长度 || 1500 字节（可配置）&lt;br /&gt;
|-&lt;br /&gt;
| 传输方式 || 消息包传输（非流式）&lt;br /&gt;
|-&lt;br /&gt;
| 通信方向 || 双向（设备 ↔ Host）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====运行测试程序====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 编译（在 nethub 目录下）&lt;br /&gt;
cd virtualchan&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
# 运行测试程序&lt;br /&gt;
sudo ./nethub_vchan_app&lt;br /&gt;
&lt;br /&gt;
# 在程序中使用命令&lt;br /&gt;
nethub_vchan&amp;gt; send user hello              # 发送 ASCII 字符串&lt;br /&gt;
nethub_vchan&amp;gt; send user hex 0102030405     # 发送十六进制数据&lt;br /&gt;
nethub_vchan&amp;gt; test flow 100 512            # 流量测试（100个包，每包512字节）&lt;br /&gt;
nethub_vchan&amp;gt; test mtu 1024                # MTU测试（发送1024字节）&lt;br /&gt;
nethub_vchan&amp;gt; status                       # 查看统计信息&lt;br /&gt;
nethub_vchan&amp;gt; help                         # 查看帮助&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==常见问题==&lt;br /&gt;
&lt;br /&gt;
===找不到串口设备===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看可用串口&lt;br /&gt;
ls /dev/ttyACM* /dev/ttyUSB*&lt;br /&gt;
&lt;br /&gt;
# 添加用户到 dialout 组（避免每次都用 sudo）&lt;br /&gt;
sudo usermod -aG dialout $USER&lt;br /&gt;
# 然后重新登录&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IP 配置后自动消失===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;原因&#039;&#039;&#039;：NetworkManager 或 dhcpcd 覆盖了手动配置。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;解决&#039;&#039;&#039;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 禁用 NetworkManager&lt;br /&gt;
sudo systemctl stop NetworkManager&lt;br /&gt;
sudo systemctl disable NetworkManager&lt;br /&gt;
&lt;br /&gt;
# 禁用 dhcpcd&lt;br /&gt;
sudo systemctl stop dhcpcd&lt;br /&gt;
sudo systemctl disable dhcpcd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===查看调试日志===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看守护进程日志&lt;br /&gt;
tail -f /var/log/bflbwifi.log&lt;br /&gt;
&lt;br /&gt;
# 查看内核日志&lt;br /&gt;
dmesg -w&lt;br /&gt;
&lt;br /&gt;
# 守护进程前台运行（查看实时输出）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0 --foreground&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===编译错误===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 确保安装必要的开发包&lt;br /&gt;
sudo apt-get install build-essential libc-dev-i386&lt;br /&gt;
&lt;br /&gt;
# 树莓派需要安装 32 位兼容库&lt;br /&gt;
sudo apt-get install libc6:i386 libstdc++6:i386&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=231</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=231"/>
		<updated>2026-03-04T03:34:22Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting Started =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/bouffalolab/bouffalo_sdk 如何获取SDK]&lt;br /&gt;
* [[如何在Ubuntu上搭建编译环境]]&lt;br /&gt;
* [[如何在Windows上搭建编译环境]]&lt;br /&gt;
* [[如何获取开发板]]&lt;br /&gt;
* [[烧录固件到开发板]]&lt;br /&gt;
&lt;br /&gt;
= Bouffalo SDK =&lt;br /&gt;
&#039;&#039;&#039;BouffaloSDK&#039;&#039;&#039; 是 Bouffalo Lab 提供的 IOT 和 MCU 软件开发包，支持博流智能所有系列芯片，也是 &#039;&#039;&#039;bl_mcu_sdk&#039;&#039;&#039; 和 &#039;&#039;&#039;bl_iot_sdk&#039;&#039;&#039; 的结合体。&lt;br /&gt;
&lt;br /&gt;
[[文件:BouffaloSDK.png|无框|600x600像素]]&lt;br /&gt;
&lt;br /&gt;
= Peripherals =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[I2S]]&lt;br /&gt;
*[[I2C]]&lt;br /&gt;
*[[CVBS]]&lt;br /&gt;
*[[Watchdog]]&lt;br /&gt;
*[[GSM/GPRS]]&lt;br /&gt;
*[[Codec]]&lt;br /&gt;
*[[PCIe]]&lt;br /&gt;
*[[GPIO]]&lt;br /&gt;
*[[eMMC]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[WiFi]]&lt;br /&gt;
*[[LED]]&lt;br /&gt;
*[[Serial port]]&lt;br /&gt;
*[[PWM]]&lt;br /&gt;
*[[SPI]]&lt;br /&gt;
*[[USB OTG]]&lt;br /&gt;
*[[LCD]]&lt;br /&gt;
*[[CPU]]&lt;br /&gt;
*[[Network]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Bluetooth]]&lt;br /&gt;
*[[HDMI]]&lt;br /&gt;
*[[Camera]]&lt;br /&gt;
*[[Memory]]&lt;br /&gt;
*[[RTC]]&lt;br /&gt;
*[[EEPROM]]&lt;br /&gt;
*[[MIPI-DSI]]&lt;br /&gt;
*[[NPU]]&lt;br /&gt;
*[[VPU]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Products =&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL602]]&lt;br /&gt;
* [[BL702]]&lt;br /&gt;
* [[BL618]]&lt;br /&gt;
* [[BL606P]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BL702L]]&lt;br /&gt;
* [[BL616]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Develop Boards =&lt;br /&gt;
* BL602EVB&lt;br /&gt;
&lt;br /&gt;
= Application Notes =&lt;br /&gt;
* [[NethubUserManual]]&lt;br /&gt;
* [[BL616低功耗开发手册]]&lt;br /&gt;
* [[USB Wi-Fi用户手册]]&lt;br /&gt;
&lt;br /&gt;
= Demos =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:FreeRTOS]]&lt;br /&gt;
* [[Demo:wifi sta]]&lt;br /&gt;
* [[Demo:boot2_isp]]&lt;br /&gt;
* [[Demo:helloworld]]&lt;br /&gt;
* [[Demo:smartconfig ble]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:DMA]]&lt;br /&gt;
* [[Demo:Btble]]&lt;br /&gt;
* [[Demo:coremark]]&lt;br /&gt;
* [[Demo:littlefs]]&lt;br /&gt;
* [[Demo:posix freertos]]&lt;br /&gt;
|width=&amp;quot;32%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
*[[Demo:Flash]]&lt;br /&gt;
* [[Demo:Basical case]]&lt;br /&gt;
* [[Demo:dsp]]&lt;br /&gt;
* [[Demo:cks]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=230</id>
		<title>NethubUserManual old</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=230"/>
		<updated>2026-03-03T04:19:36Z</updated>

		<summary type="html">&lt;p&gt;张良：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Nethub User Manual=&lt;br /&gt;
&lt;br /&gt;
基于BL616C/BL618M/BL618DG/BL616CL 的 Linux 主机通信方案，提供内核模块和用户态控制工具。&lt;br /&gt;
&lt;br /&gt;
==系统架构==&lt;br /&gt;
&lt;br /&gt;
[[文件:Arch_host_device.png|800px|center|thumb|主机-设备架构图]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;说明&#039;&#039;&#039;：当前控制通道通过 tty 传输，后续将支持通过 VirtualChannel 传输 AT 命令。&lt;br /&gt;
&lt;br /&gt;
===组件说明===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 组件 !! 类型 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifictrl || 用户态 || 命令行工具，通过 Unix Socket 与守护进程通信&lt;br /&gt;
|-&lt;br /&gt;
| bflbwifid || 用户态 || 守护进程，负责设备通信和 WiFi 连接管理&lt;br /&gt;
|-&lt;br /&gt;
| libbflbwifi || 用户态 || 静态库，提供 WiFi 控制 API&lt;br /&gt;
|-&lt;br /&gt;
| nethub_vchan_app || 用户态 || VirtualChannel 通信程序，提供私有数据通道（消息包传输，非流式）&lt;br /&gt;
|-&lt;br /&gt;
| mr_sdio.ko || 内核态 || 内核驱动模块，支持 SDIO 接口&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===数据流向===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
用户命令：&lt;br /&gt;
bflbwifictrl → bflbwifid → libbflbwifi → /dev/ttyAT → 内核驱动 → 设备&lt;br /&gt;
&lt;br /&gt;
URC事件：&lt;br /&gt;
设备 → 内核驱动 → /dev/ttyAT → bflbwifid → 解析处理 → 网卡配置&lt;br /&gt;
&lt;br /&gt;
工作流程：&lt;br /&gt;
加载内核模块 → 启动守护进程 → TTY 通信建立 → 准备就绪&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==快速开始==&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif|center|NetHub SDIO 快速入门演示]]&lt;br /&gt;
&lt;br /&gt;
本演示展示了完整的操作流程：编译 → 加载内核模块 → 启动守护进程 → WiFi 连接 → 网络通信 → 消息收发。&lt;br /&gt;
&lt;br /&gt;
===设备端编译和烧录===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 编译命令形如&lt;br /&gt;
make CHIP=&amp;lt;芯片名称&amp;gt; BOARD=&amp;lt;开发板名称&amp;gt;&lt;br /&gt;
# 如果用的BL616&lt;br /&gt;
make CHIP=bl616 BOARD=bl616dk&lt;br /&gt;
# 如果用的BL616cl&lt;br /&gt;
make CHIP=bl616cl BOARD=bl616cldk&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make CHIP=bl618dg BOARD=bl618dgdk CPU_ID=ap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 烧录命令形如&lt;br /&gt;
make flash CHIP=&amp;lt;芯片名称&amp;gt; COMX=&amp;lt;串口名称&amp;gt;&lt;br /&gt;
# 如果用的BL618dg&lt;br /&gt;
make flash CHIP=bl618dg COMX=/dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===主机端编译和测试===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 假设已经将 bsp/common/msg_router/linux_host 复制到host，并在其目录下&lt;br /&gt;
cd linux_host/userspace/nethub/&lt;br /&gt;
&lt;br /&gt;
# 编译和加载内核模块&lt;br /&gt;
./build.sh build&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&lt;br /&gt;
# 启动守护进程（默认使用 /dev/ttyAT0）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0&lt;br /&gt;
&lt;br /&gt;
# 连接 AP（有密码）&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;SSID&amp;quot; &amp;quot;password&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==开发指南==&lt;br /&gt;
&lt;br /&gt;
===系统要求===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;内核版本&#039;&#039;&#039;：Linux 3.7+（内核模块需要）&lt;br /&gt;
* &#039;&#039;&#039;架构&#039;&#039;&#039;：x86_64、ARMv7（树莓派）、ARMv8（树莓派 4/5）&lt;br /&gt;
* &#039;&#039;&#039;依赖&#039;&#039;&#039;：gcc、make、libc、pthread&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;兼容性说明&#039;&#039;&#039;：&lt;br /&gt;
* ✅ 用户空间程序（bflbwifid/bflbwifictrl）：无内核版本限制&lt;br /&gt;
* ✅ 内核模块（mr_sdio.ko）：支持 Linux 3.7+&lt;br /&gt;
* ✅ 已测试：Linux raspberrypi 6.12.25+rpt-rpi-v8&lt;br /&gt;
&lt;br /&gt;
===命令参考===&lt;br /&gt;
&lt;br /&gt;
====build.sh 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; || 编译内核模块、virtualchan 和 bflbwifictrl&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; || 清理所有编译产物&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;load&amp;lt;/code&amp;gt; || 加载内核模块 &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unload&amp;lt;/code&amp;gt; || 卸载内核模块&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl 命令====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 命令 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt; || 扫描附近 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connect_ap &amp;lt;SSID&amp;gt; [密码]&amp;lt;/code&amp;gt; || 连接到 AP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt; || 断开连接&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; || 查看连接状态&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; || 查看固件版本&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===功能特性===&lt;br /&gt;
&lt;br /&gt;
====bflbwifid（守护进程）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TTY 通信&#039;&#039;&#039;：与 WiFi 模块通过串口通信&lt;br /&gt;
* &#039;&#039;&#039;AT 协议&#039;&#039;&#039;：解析和封装 AT 指令&lt;br /&gt;
* &#039;&#039;&#039;状态管理&#039;&#039;&#039;：维护 WiFi 连接状态&lt;br /&gt;
* &#039;&#039;&#039;Unix Socket&#039;&#039;&#039;：提供 IPC 通信接口&lt;br /&gt;
* &#039;&#039;&#039;GOTIP 自动配置&#039;&#039;&#039;（可选）：收到 IP 后自动配置 Linux 网卡&lt;br /&gt;
&lt;br /&gt;
====bflbwifictrl（命令行工具）====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CLI 接口&#039;&#039;&#039;：通过 Unix Socket 与守护进程通信&lt;br /&gt;
* &#039;&#039;&#039;简洁易用&#039;&#039;&#039;：提供常用 WiFi 操作命令&lt;br /&gt;
* &#039;&#039;&#039;状态查询&#039;&#039;&#039;：实时显示连接信息&lt;br /&gt;
&lt;br /&gt;
====GOTIP 自动配置功能（默认启用）====&lt;br /&gt;
&lt;br /&gt;
当 WiFi 模块获取 IP 后，会自动：&lt;br /&gt;
# 解析 URC：&amp;lt;code&amp;gt;+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置网卡：&amp;lt;code&amp;gt;ip addr add&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ip route add default&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置 DNS：写入 &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意事项&#039;&#039;&#039;：&lt;br /&gt;
* 部分host需要禁用 NetworkManager：&amp;lt;code&amp;gt;sudo systemctl disable --now NetworkManager&amp;lt;/code&amp;gt;&lt;br /&gt;
* 需要禁用 dhcpcd：&amp;lt;code&amp;gt;sudo systemctl disable --now dhcpcd&amp;lt;/code&amp;gt;&lt;br /&gt;
* 默认网卡名为 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;（可在代码中修改）&lt;br /&gt;
&lt;br /&gt;
===代码修改与编译===&lt;br /&gt;
&lt;br /&gt;
====修改代码后重新编译====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 只编译 bflbwifictrl&lt;br /&gt;
cd bflbwifictrl&lt;br /&gt;
make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
# 或使用 build.sh 编译所有&lt;br /&gt;
cd ..&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====重新加载内核模块====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Virtual Channel 私有数据收发===&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 提供了一套独立于 AT 命令的私有数据传输通道，可用于用户自定义应用数据的双向传输。&lt;br /&gt;
&lt;br /&gt;
====概述====&lt;br /&gt;
&lt;br /&gt;
Virtual Channel 支持三种数据类型：&lt;br /&gt;
* &#039;&#039;&#039;USER (0x01)&#039;&#039;&#039;：用户私有数据（推荐用于用户自定义应用）&lt;br /&gt;
* &#039;&#039;&#039;AT (0x02)&#039;&#039;&#039;：AT 命令数据(todo)&lt;br /&gt;
* &#039;&#039;&#039;SYSTEM (0x03)&#039;&#039;&#039;：系统相关数据(todo)&lt;br /&gt;
&lt;br /&gt;
====设备端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;components/net/nethub/transport/sdio/sdio_virtualchan/virtualchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_user_send(const void *data, uint16_t len);&lt;br /&gt;
int nethub_vchan_user_recv_register(virtualchan_dnld_cb_t dnld_cb, void *cb_arg);&lt;br /&gt;
typedef int (*virtualchan_dnld_cb_t)(void *arg, uint8_t *data_buff, uint16_t data_size);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====主机端 API====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;参考文件&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;核心 API&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int nethub_vchan_init(void);&lt;br /&gt;
int nethub_vchan_user_send(const void *data, size_t len);&lt;br /&gt;
int nethub_vchan_user_register_callback(nethub_vchan_recv_callback_t callback);&lt;br /&gt;
&lt;br /&gt;
/* 回调函数类型定义 */&lt;br /&gt;
typedef void (*nethub_vchan_recv_callback_t)(const void *data, size_t len);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====数据格式说明====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;消息帧格式&#039;&#039;&#039;（自动处理，用户无需关心）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
| data_type| reserved  | len   | data[] |&lt;br /&gt;
| 1 byte   | 1 byte    | 2 bytes| N bytes|&lt;br /&gt;
+----------+-----------+-------+--------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;data_type&#039;&#039;&#039;：数据类型（USER=0x01, AT=0x02, SYSTEM=0x03）&lt;br /&gt;
* &#039;&#039;&#039;reserved&#039;&#039;&#039;：保留字段（固定为 0）&lt;br /&gt;
* &#039;&#039;&#039;len&#039;&#039;&#039;：用户数据长度&lt;br /&gt;
* &#039;&#039;&#039;data[]&#039;&#039;&#039;：实际用户数据&lt;br /&gt;
&lt;br /&gt;
====完整示例====&lt;br /&gt;
&lt;br /&gt;
参考以下完整示例代码：&lt;br /&gt;
* &#039;&#039;&#039;设备端&#039;&#039;&#039;：&amp;lt;code&amp;gt;examples/wifi/nethub/app/src/virtualchan/app_vchan.c&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;主机端&#039;&#039;&#039;：&amp;lt;code&amp;gt;bsp/common/msg_router/linux_host/userspace/nethub/virtualchan/nethub_vchan_app.c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====使用限制====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 项目 !! 限制&lt;br /&gt;
|-&lt;br /&gt;
| 最大数据长度 || 1500 字节（可配置）&lt;br /&gt;
|-&lt;br /&gt;
| 传输方式 || 消息包传输（非流式）&lt;br /&gt;
|-&lt;br /&gt;
| 通信方向 || 双向（设备 ↔ Host）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====运行测试程序====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 编译（在 nethub 目录下）&lt;br /&gt;
cd virtualchan&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
# 运行测试程序&lt;br /&gt;
sudo ./nethub_vchan_app&lt;br /&gt;
&lt;br /&gt;
# 在程序中使用命令&lt;br /&gt;
nethub_vchan&amp;gt; send user hello              # 发送 ASCII 字符串&lt;br /&gt;
nethub_vchan&amp;gt; send user hex 0102030405     # 发送十六进制数据&lt;br /&gt;
nethub_vchan&amp;gt; test flow 100 512            # 流量测试（100个包，每包512字节）&lt;br /&gt;
nethub_vchan&amp;gt; test mtu 1024                # MTU测试（发送1024字节）&lt;br /&gt;
nethub_vchan&amp;gt; status                       # 查看统计信息&lt;br /&gt;
nethub_vchan&amp;gt; help                         # 查看帮助&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==常见问题==&lt;br /&gt;
&lt;br /&gt;
===找不到串口设备===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看可用串口&lt;br /&gt;
ls /dev/ttyACM* /dev/ttyUSB*&lt;br /&gt;
&lt;br /&gt;
# 添加用户到 dialout 组（避免每次都用 sudo）&lt;br /&gt;
sudo usermod -aG dialout $USER&lt;br /&gt;
# 然后重新登录&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IP 配置后自动消失===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;原因&#039;&#039;&#039;：NetworkManager 或 dhcpcd 覆盖了手动配置。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;解决&#039;&#039;&#039;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 禁用 NetworkManager&lt;br /&gt;
sudo systemctl stop NetworkManager&lt;br /&gt;
sudo systemctl disable NetworkManager&lt;br /&gt;
&lt;br /&gt;
# 禁用 dhcpcd&lt;br /&gt;
sudo systemctl stop dhcpcd&lt;br /&gt;
sudo systemctl disable dhcpcd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===查看调试日志===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看守护进程日志&lt;br /&gt;
tail -f /var/log/bflbwifi.log&lt;br /&gt;
&lt;br /&gt;
# 查看内核日志&lt;br /&gt;
dmesg -w&lt;br /&gt;
&lt;br /&gt;
# 守护进程前台运行（查看实时输出）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0 --foreground&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===编译错误===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 确保安装必要的开发包&lt;br /&gt;
sudo apt-get install build-essential libc-dev-i386&lt;br /&gt;
&lt;br /&gt;
# 树莓派需要安装 32 位兼容库&lt;br /&gt;
sudo apt-get install libc6:i386 libstdc++6:i386&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=229</id>
		<title>NethubUserManual old</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=NethubUserManual_old&amp;diff=229"/>
		<updated>2026-03-03T03:13:46Z</updated>

		<summary type="html">&lt;p&gt;张良：​撤销张良（讨论）的修订版本228&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;基于BL616C/BL618M/BL618DG/BL616CL 的 Linux 主机通信方案，提供内核模块和用户态控制工具。&lt;br /&gt;
&lt;br /&gt;
== 目录 ==&lt;br /&gt;
&lt;br /&gt;
* [[Nethub用户手册#1. 系统架构|1. 系统架构]]&lt;br /&gt;
* [[Nethub用户手册#2. 快速开始|2. 快速开始]]&lt;br /&gt;
* [[Nethub用户手册#3. 开发指南|3. 开发指南]]&lt;br /&gt;
* [[Nethub用户手册#4. 常见问题|4. 常见问题]]&lt;br /&gt;
&lt;br /&gt;
== 1. 系统架构 ==&lt;br /&gt;
[[文件:Arch_host_device.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;说明&#039;&#039;&#039;：当前控制通道通过 tty 传输，后续将支持通过 VirtualChannel 传输 AT 命令。&lt;br /&gt;
&lt;br /&gt;
=== 1.1 组件说明 ===&lt;br /&gt;
相关代码参考 bsp/common/msg_router/linux_host &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!组件&lt;br /&gt;
!类型&lt;br /&gt;
!说明&lt;br /&gt;
|-&lt;br /&gt;
|bflbwifictrl&lt;br /&gt;
|用户态&lt;br /&gt;
|命令行工具，通过 Unix Socket 与守护进程通信&lt;br /&gt;
|-&lt;br /&gt;
|bflbwifid&lt;br /&gt;
|用户态&lt;br /&gt;
|守护进程，负责设备通信和 WiFi 连接管理&lt;br /&gt;
|-&lt;br /&gt;
|libbflbwifi&lt;br /&gt;
|用户态&lt;br /&gt;
|静态库，提供 WiFi 控制 API&lt;br /&gt;
|-&lt;br /&gt;
|nethub_vchan_app&lt;br /&gt;
|用户态&lt;br /&gt;
|VirtualChannel 通信程序，提供私有数据通道（消息包传输，非流式）&lt;br /&gt;
|-&lt;br /&gt;
|mr_sdio.ko&lt;br /&gt;
|内核态&lt;br /&gt;
|内核驱动模块，支持 SDIO 接口&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1.2 数据流向 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
用户命令：&lt;br /&gt;
bflbwifictrl → bflbwifid → libbflbwifi → /dev/ttyAT → 内核驱动 → 设备&lt;br /&gt;
&lt;br /&gt;
URC事件：&lt;br /&gt;
设备 → 内核驱动 → /dev/ttyAT → bflbwifid → 解析处理 → 网卡配置&lt;br /&gt;
&lt;br /&gt;
工作流程：&lt;br /&gt;
加载内核模块 → 启动守护进程 → TTY 通信建立 → 准备就绪&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. 快速开始 ==&lt;br /&gt;
&lt;br /&gt;
本演示展示了完整的操作流程：编译 → 加载内核模块 → 启动守护进程 → WiFi 连接 → 网络通信 → 消息收发。&lt;br /&gt;
&lt;br /&gt;
[[文件:Nethub_sdio_quickstart_demo.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 2.1 编译和加载内核模块 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd nethub/&lt;br /&gt;
./build.sh build&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2 运行 WiFi 守护进程 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 启动守护进程（默认使用 /dev/ttyAT0）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0&lt;br /&gt;
&lt;br /&gt;
# 或查看帮助&lt;br /&gt;
sudo ./output/bflbwifid -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.3 使用 WiFi 控制工具 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 扫描 AP&lt;br /&gt;
sudo ./output/bflbwifictrl scan&lt;br /&gt;
&lt;br /&gt;
# 连接 AP（无密码）&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;SSID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 连接 AP（有密码）&lt;br /&gt;
sudo ./output/bflbwifictrl connect_ap &amp;quot;SSID&amp;quot; &amp;quot;password&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 查看状态&lt;br /&gt;
sudo ./output/bflbwifictrl status&lt;br /&gt;
&lt;br /&gt;
# 断开连接&lt;br /&gt;
sudo ./output/bflbwifictrl disconnect&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. 开发指南 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 系统要求 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;内核版本&#039;&#039;&#039;：Linux 3.7+（内核模块需要）&lt;br /&gt;
* &#039;&#039;&#039;架构&#039;&#039;&#039;：x86_64、ARMv7（树莓派）、ARMv8（树莓派 4/5）&lt;br /&gt;
* &#039;&#039;&#039;依赖&#039;&#039;&#039;：gcc、make、libc、pthread&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;兼容性说明&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
* ✅ 用户空间程序（bflbwifid/bflbwifictrl）：无内核版本限制&lt;br /&gt;
* ✅ 内核模块（mr_sdio.ko）：支持 Linux 3.7+&lt;br /&gt;
* ✅ 已测试：Linux raspberrypi 6.12.25+rpt-rpi-v8&lt;br /&gt;
&lt;br /&gt;
=== 3.2 命令参考 ===&lt;br /&gt;
&lt;br /&gt;
==== build.sh 命令 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!命令&lt;br /&gt;
!说明&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;&lt;br /&gt;
|编译内核模块、virtualchan 和 bflbwifictrl&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt;&lt;br /&gt;
|清理所有编译产物&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;load&amp;lt;/code&amp;gt;&lt;br /&gt;
|加载内核模块 &amp;lt;code&amp;gt;mr_sdio.ko&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;unload&amp;lt;/code&amp;gt;&lt;br /&gt;
|卸载内核模块&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== bflbwifictrl 命令 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!命令&lt;br /&gt;
!说明&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scan&amp;lt;/code&amp;gt;&lt;br /&gt;
|扫描附近 AP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;connect_ap &amp;amp;#x3C;SSID&amp;amp;#x3E; [密码]&amp;lt;/code&amp;gt;&lt;br /&gt;
|连接到 AP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;disconnect&amp;lt;/code&amp;gt;&lt;br /&gt;
|断开连接&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
|查看连接状态&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
|查看固件版本&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3.3 功能特性 ===&lt;br /&gt;
&lt;br /&gt;
==== bflbwifid（守护进程） ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TTY 通信&#039;&#039;&#039;：与 WiFi 模块通过串口通信&lt;br /&gt;
* &#039;&#039;&#039;AT 协议&#039;&#039;&#039;：解析和封装 AT 指令&lt;br /&gt;
* &#039;&#039;&#039;状态管理&#039;&#039;&#039;：维护 WiFi 连接状态&lt;br /&gt;
* &#039;&#039;&#039;Unix Socket&#039;&#039;&#039;：提供 IPC 通信接口&lt;br /&gt;
* &#039;&#039;&#039;GOTIP 自动配置&#039;&#039;&#039;（可选）：收到 IP 后自动配置 Linux 网卡&lt;br /&gt;
&lt;br /&gt;
==== bflbwifictrl（命令行工具） ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CLI 接口&#039;&#039;&#039;：通过 Unix Socket 与守护进程通信&lt;br /&gt;
* &#039;&#039;&#039;简洁易用&#039;&#039;&#039;：提供常用 WiFi 操作命令&lt;br /&gt;
* &#039;&#039;&#039;状态查询&#039;&#039;&#039;：实时显示连接信息&lt;br /&gt;
&lt;br /&gt;
==== GOTIP 自动配置功能（默认启用） ====&lt;br /&gt;
当 WiFi 模块获取 IP 后，会自动：&lt;br /&gt;
&lt;br /&gt;
# 解析 URC：&amp;lt;code&amp;gt;+CW:GOTIP,IP:xxx,gw:xxx,mask:xxx,dns:xxx&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置网卡：&amp;lt;code&amp;gt;ip addr add&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ip route add default&amp;lt;/code&amp;gt;&lt;br /&gt;
# 配置 DNS：写入 &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意事项&#039;&#039;&#039;：&lt;br /&gt;
&lt;br /&gt;
* 部分host需要禁用 NetworkManager：&amp;lt;code&amp;gt;sudo systemctl disable --now NetworkManager&amp;lt;/code&amp;gt;&lt;br /&gt;
* 需要禁用 dhcpcd：&amp;lt;code&amp;gt;sudo systemctl disable --now dhcpcd&amp;lt;/code&amp;gt;&lt;br /&gt;
* 默认网卡名为 &amp;lt;code&amp;gt;mr_eth0&amp;lt;/code&amp;gt;（可在代码中修改）&lt;br /&gt;
&lt;br /&gt;
=== 3.4 代码修改与编译 ===&lt;br /&gt;
&lt;br /&gt;
==== 修改代码后重新编译 ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 只编译 bflbwifictrl&lt;br /&gt;
cd bflbwifictrl&lt;br /&gt;
make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
# 或使用 build.sh 编译所有&lt;br /&gt;
cd ..&lt;br /&gt;
./build.sh build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 重新加载内核模块 ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./build.sh unload&lt;br /&gt;
sudo ./build.sh load&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. 常见问题 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 找不到串口设备 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看可用串口&lt;br /&gt;
ls /dev/ttyACM* /dev/ttyUSB*&lt;br /&gt;
&lt;br /&gt;
# 添加用户到 dialout 组（避免每次都用 sudo）&lt;br /&gt;
sudo usermod -aG dialout $USER&lt;br /&gt;
# 然后重新登录&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2 IP 配置后自动消失 ===&lt;br /&gt;
&#039;&#039;&#039;原因&#039;&#039;&#039;：NetworkManager 或 dhcpcd 覆盖了手动配置。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;解决&#039;&#039;&#039;：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 禁用 NetworkManager&lt;br /&gt;
sudo systemctl stop NetworkManager&lt;br /&gt;
sudo systemctl disable NetworkManager&lt;br /&gt;
&lt;br /&gt;
# 禁用 dhcpcd&lt;br /&gt;
sudo systemctl stop dhcpcd&lt;br /&gt;
sudo systemctl disable dhcpcd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 查看调试日志 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 查看守护进程日志&lt;br /&gt;
tail -f /var/log/bflbwifi.log&lt;br /&gt;
&lt;br /&gt;
# 查看内核日志&lt;br /&gt;
dmesg -w&lt;br /&gt;
&lt;br /&gt;
# 守护进程前台运行（查看实时输出）&lt;br /&gt;
sudo ./output/bflbwifid -p /dev/ttyAT0 --foreground&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.4 编译错误 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 确保安装必要的开发包&lt;br /&gt;
sudo apt-get install build-essential libc-dev-i386&lt;br /&gt;
&lt;br /&gt;
# 树莓派需要安装 32 位兼容库&lt;br /&gt;
sudo apt-get install libc6:i386 libstdc++6:i386&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>张良</name></author>
	</entry>
</feed>