79 lines
1.9 KiB
Markdown
Raw Normal View History

2025-10-10 16:07:00 +08:00
# Semihost
Semihost is used when host implements lwip at its own, and firmware takes response of 802.11 SME/MLME, all its network frames except EAPoL frames are passed up to host.
## Usage
### Firmware
* modify `CFG_HOSTED=CONFIG_SEMI_HOSTED` in `sys_config_bk7231u.h`.
```c
/* Host based SDIO/USB/PCI/SPI Wifi Support */
/* fully hosted: no lwip, all mgmt located at host */
#define CONFIG_FULLY_HOSTED 1
/* semi hosted: no lwip, all mgmt located at host */
#define CONFIG_SEMI_HOSTED 2
/* CFG_HOSTED: 0 disabled, CONFIG_FULLY_HOSTED, CONFIG_SEMI_HOSTED */
#define CFG_HOSTED CONFIG_SEMI_HOSTED
```
* compile
```sh
$ make bk7231u -j8 # add V=1 to show verbose log
```
* burn firmware via GUI or CLI
* run firmware
It's high recommended to change the default mac address, now login into the demo board.
```shell
# mac c8478c723101 # change mac address to c8:47:8c:72:31:01
```
### Host
This demo only runs on Linux. MacOS may also works.
* compile serial-tap
```shell
$ cd tools/semihost/serial-tap
$ cmake .
$ make
```
This will generate an excutable binary named `serial_tun`.
* setup a tap device
```shell
$ sudo ./setup-tapif # add a tap0 network adapter
$ sudo ip link set address c8:47:8c:72:31:01 dev tap0 # set tap0's mac address equals to firmware
$ sudo ./serial_tun -i tap0 -p /dev/ttyUSB0
```
If acts as a softap, you must change tap0's mac address the same as softap's mac address, and setup a dhcp server. For example, udhcpd can be used.
```
$ sudo udhcpd udhcpd.conf # setup an dhcp server
```
### Limitation
Now `UART` is used as the physical layer, and the throughput is very low due to UART's low rate.
## Debug
* Tools such as wireshark, tcpdump can be used to analysis packet at link layer.
* TAP devices' mac address must equal to firmware's mac address