7.2.6 Kconfig 配置指南
7.2.6 Kconfig 配置指南
📚 本节导读
学习时长:约 10 分钟
难度级别:⭐⭐☆☆☆
前置知识:menuconfig 基本操作、第 2 章项目结构与构建系统
🎯 学习目标
- 掌握网络协议栈各组件的 Kconfig 配置宏(
NET_USING_*/LWIP_USING_*/MOLINK_USING_*) - 了解不同应用场景的典型配置组合
- 能够根据项目需求正确配置网络组件
一、网络基础配置
在 OneOS 项目根目录执行 menuconfig,进入 Components -> Net 菜单。网络组件没有统一的总开关,而是按功能分层开关(Socket / LWIP / Molink / 各协议),分别位于 Net -> Socket、Net -> TCP/IP、Net -> Molink、Net -> Protocols 子菜单。
1.1 Socket 层配置(Net -> Socket)
完整源码(components/net/socket/Kconfig):
menu "Socket"
config NET_USING_BSD
bool "Enable BSD socket API"
default n
if NET_USING_BSD
if NET_USING_LWIP || NET_USING_MOLINK
choice
prompt "protocol stack implement"
default BSD_USING_MOLINK
config BSD_USING_MOLINK
bool "Support OneOS modules stack"
depends on MOLINK_USING_SOCKETS_OPS
config BSD_USING_LWIP
bool "Support lwIP stack"
depends on NET_USING_LWIP
endchoice
config BSD_USING_IPV6
bool
default n
endif
endif
endmenu配置宏:
| 配置宏 | 说明 |
|---|---|
NET_USING_BSD | 启用 BSD Socket API(总开关,默认 n) |
BSD_USING_MOLINK | Socket 底层选 Molink 协议栈(依赖 MOLINK_USING_SOCKETS_OPS) |
BSD_USING_LWIP | Socket 底层选 lwIP 协议栈(依赖 NET_USING_LWIP) |
BSD_USING_IPV6 | 启用 IPv6(被 NET_USING_LWIP_IPV6 自动 select) |
关键理解:
NET_USING_BSD开启后,需在BSD_USING_MOLINK(用蜂窝/WiFi 模组时)与BSD_USING_LWIP(用以太网 + LWIP 时)之间选一个作为 Socket 的协议栈实现。BSD_USING_IPV6是隐藏项,由 LWIP 的NET_USING_LWIP_IPV6自动 select。
1.2 LWIP 协议栈配置(Net -> TCP/IP)
完整源码(节选,components/net/ip/lwip-2.1.2/Kconfig):
menu "LwIP"
config NET_USING_LWIP
bool "Enable lwIP stack"
default n
if NET_USING_LWIP
choice
prompt "lwIP version"
default NET_USING_LWIP212 if !OS_USING_WIFI
config NET_USING_LWIP212
bool "lwIP v2.1.2"
endchoice
menuconfig NET_USING_LWIP_IPV6
bool "IPV6 protocol"
select BSD_USING_IPV6
default n
config LWIP_USING_DNS
bool "Enble DNS for name resolution"
config LWIP_USING_DHCP
bool
select LWIP_USING_UDP
config LWIP_USING_UDP
bool
default y
config LWIP_USING_TCP
bool
default y配置宏:
| 配置宏 | 说明 |
|---|---|
NET_USING_LWIP | 启用 lwIP 协议栈(总开关,默认 n) |
NET_USING_LWIP212 | 选择 lwIP v2.1.2 版本(choice 唯一项) |
NET_USING_LWIP_IPV6 | 启用 IPv6(menuconfig,自动 select BSD_USING_IPV6,默认 n) |
LWIP_USING_DNS | 启用 DNS 域名解析 |
LWIP_USING_DHCP | 启用 DHCP 客户端(自动 select LWIP_USING_UDP) |
LWIP_USING_UDP | 启用 UDP 协议(默认 y) |
LWIP_USING_TCP | 启用 TCP 协议(默认 y) |
关键理解(易错点):LWIP 内部的 TCP/UDP/DNS/DHCP 开关前缀是
LWIP_USING_(不是NET_USING_)!NET_USING_仅用于NET_USING_LWIP(总开关)和NET_USING_LWIP_IPV6(IPv6)。NET_USING_TCP/NET_USING_UDP/NET_USING_DHCP/NET_USING_DNS这些宏不存在。
二、应用协议配置
2.1 HTTP 客户端(components/net/protocols/http)
| 配置宏 | 说明 |
|---|---|
NET_USING_HTTPCLIENT | 启用 HTTP 客户端(注意拼写 HTTPCLIENT,非 HTTP_CLIENT;自动 select NET_USING_BSD) |
CONFIG_HTTP_SECURE | 启用 HTTP TLS 加密(select SECURITY_USING_MBEDTLS) |
CONFIG_HTTP_RECV_TIMEOUT_MS | HTTP 接收超时(毫秒,默认 5000) |
HTTPCLIENT_USING_GETFILE | 启用 HTTP 文件下载(select OS_USING_VFS/OS_USING_VFS_FATFS,配合 HTTP_REQUEST_BLOCK_SIZE) |
2.2 MQTT 客户端(components/net/protocols/mqtt)
| 配置宏 | 说明 |
|---|---|
NET_USING_MQTT | 启用 MQTT(总开关,默认 n) |
NET_USING_PAHO_MQTT | 选 Paho MQTT 实现(choice) |
NET_USING_MINI_MQTT | 选 Mini MQTT 实现(choice) |
关键理解:
NET_USING_MQTT开启后,在NET_USING_PAHO_MQTT与NET_USING_MINI_MQTT中二选一(choice),对应加载pahomqtt-v1.1.0/Kconfig或minimqtt/Kconfig。
2.3 CoAP(components/net/protocols/coap)
| 配置宏 | 说明 |
|---|---|
COAP_Version | 启用 CoAP(总开关) |
NET_USING_LIBCOAP | 选 LibCoAP 实现(RFC 7252) |
COAP_4_3_0 / COAP_4_2_1 | 选 libcoap 版本(choice,select NET_USING_BSD) |
FREE_COAP | 选 FreeCoAP 实现(select NET_USING_BSD) |
关键理解:CoAP 总开关是
COAP_Version(不是NET_USING_COAP);实现选择是NET_USING_LIBCOAP(含版本 choiceCOAP_4_3_0/COAP_4_2_1)或FREE_COAP(注意FREE_COAP中间无NET_USING_前缀,且不是NET_USING_FREECOAP)。
2.4 LwM2M(components/net/protocols/lwm2m)
| 配置宏 | 说明 |
|---|---|
NET_USING_LWM2M | 启用 LwM2M(自动 select NET_USING_BSD) |
CONFIG_LWM2M_SECURE | 启用 LwM2M DTLS 加密(select SECURITY_USING_MBEDTLS) |
LWM2M_CLIENT_MODE | 启用 LwM2M client 模式 |
2.5 WebSocket(components/net/protocols/websocket)
| 配置宏 | 说明 |
|---|---|
NET_USING_WEBSOCKET_CLIENT | 启用 WebSocket Client(注意是 WEBSOCKET_CLIENT,非 WEBSOCKET;自动 select NET_USING_BSD) |
三、Molink 配置(components/net/molink)
3.1 总开关
完整源码(components/net/molink/Kconfig):
menu "Molink"
config NET_USING_MOLINK
bool "Enable IoT modules support"
select OS_USING_HEAP
default n
if NET_USING_MOLINK
source "$OS_ROOT/components/net/molink/*/Kconfig"
endif
endmenu| 配置宏 | 说明 |
|---|---|
NET_USING_MOLINK | 启用 Molink 模组支持(总开关,自动 select OS_USING_HEAP,默认 n) |
关键理解:Molink 的总开关是
NET_USING_MOLINK(不是MOLINK_USING_*);MOLINK_USING_*是它开启后的功能集/模组子开关。
3.2 功能集开关(components/net/molink/api/Kconfig)
| 配置宏 | 说明 |
|---|---|
MOLINK_USING_GENERAL_OPS | 通用模组操作(mo_at_test/mo_get_imei/mo_get_iccid 等,见 7.2.5) |
MOLINK_USING_NETSERV_OPS | 网络服务操作(mo_get_csq/mo_get_reg/mo_set_attach 等) |
MOLINK_USING_SOCKETS_OPS | Socket 操作(select MOLINK_USING_NETCONN_OPS + OS_USING_LIBC_ADAPTER) |
MOLINK_USING_NETCONN_OPS | 网络连接操作(select OS_USING_MESSAGEQUEUE + MOLINK_USING_IP) |
MOLINK_USING_PING_OPS | Ping 操作(select MOLINK_USING_IP) |
MOLINK_USING_IFCONFIG_OPS | 网卡配置操作(select MOLINK_USING_IP) |
MOLINK_USING_WIFI_OPS | WiFi 操作 |
MOLINK_USING_PPP_OPS | PPP 拨号操作 |
MOLINK_USING_ONENET_NB_OPS | OneNET NB-IoT 专用操作(select MOLINK_USING_IP) |
MOLINK_USING_MQTTC_OPS | MQTT 客户端操作(select OS_USING_MESSAGEQUEUE) |
MOLINK_USING_AUTO_PROBE_OPS | 模组自动探测 |
MOLINK_USING_BLUETOOTH_OPS | 蓝牙操作 |
MOLINK_USING_IP | IP 层支持(被多项自动 select,开启 IPv4) |
3.3 模组选择(components/net/molink/module/Kconfig)
在 Net -> Molink -> module 下按需开启具体模组(每个模组一个 bool 配置,如 MOLINK_USING_EC20):
| 模组 | 配置宏 | 依赖功能集 |
|---|---|---|
| EC20(4G Cat4) | MOLINK_USING_EC20 | MOLINK_USING_GENERAL_OPS/NETSERV_OPS/SOCKETS_OPS 等 |
| BC26(NB-IoT) | MOLINK_USING_BC26 | 同上 |
| M5311(NB-IoT) | MOLINK_USING_M5311 | 同上 |
| ESP8266(WiFi) | MOLINK_USING_ESP8266 | MOLINK_USING_WIFI_OPS |
| SIM7600CE(4G Cat4) | MOLINK_USING_SIM7600CE | 同上 |
关键理解:开启某模组前,须先开启
NET_USING_MOLINK总开关,并确保对应功能集开关(如MOLINK_USING_GENERAL_OPS/NETSERV_OPS)已开——mo_get_csq等接口在对应功能集关闭时不编译。
四、典型配置场景
场景一:以太网 + MQTT 通信设备
Components -> Net
Net -> Socket
[*] Enable BSD socket API
(x) Support lwIP stack (BSD_USING_LWIP)
Net -> TCP/IP
[*] Enable lwIP stack (NET_USING_LWIP)
(x) lwIP v2.1.2
[*] IPV6 protocol (NET_USING_LWIP_IPV6,可选)
Net -> Protocols -> MQTT
[*] Enable MQTT Stack (NET_USING_MQTT)
(x) Paho MQTT (NET_USING_PAHO_MQTT)要点:以太网 + LWIP 时 Socket 协议栈选 BSD_USING_LWIP;MQTT 走 NET_USING_MQTT + NET_USING_PAHO_MQTT。
场景二:NB-IoT 模组 + CoAP 通信设备
Components -> Net
Net -> Molink
[*] Enable IoT modules support (NET_USING_MOLINK)
module -> [*] Enable EC20 (MOLINK_USING_EC20,示例用蜂窝模组)
api -> [*] MOLINK_USING_GENERAL_OPS
[*] MOLINK_USING_NETSERV_OPS
Net -> Socket
[*] Enable BSD socket API
(x) Support OneOS modules stack (BSD_USING_MOLINK)
Net -> Protocols -> CoAP
[*] Enable CoAP (COAP_Version)
(x) LibCoAP: A C implementation (NET_USING_LIBCOAP)
(x) libcoap-v4.3.0 (COAP_4_3_0)要点:蜂窝模组走 Molink,Socket 协议栈选 BSD_USING_MOLINK(依赖 MOLINK_USING_SOCKETS_OPS);CoAP 总开关是 COAP_Version,实现选 NET_USING_LIBCOAP。
场景三:WiFi 模组 + HTTP 通信设备
Components -> Net
Net -> Molink
[*] Enable IoT modules support (NET_USING_MOLINK)
module -> [*] Enable ESP8266 (MOLINK_USING_ESP8266)
api -> [*] MOLINK_USING_GENERAL_OPS
[*] MOLINK_USING_WIFI_OPS
Net -> Socket
[*] Enable BSD socket API
(x) Support OneOS modules stack (BSD_USING_MOLINK)
Net -> Protocols -> httpclient-v1.1.0
[*] Enable Httpclient (NET_USING_HTTPCLIENT)要点:WiFi 模组(ESP8266)走 Molink + MOLINK_USING_WIFI_OPS;HTTP 总开关是 NET_USING_HTTPCLIENT。
📝 本节小结
核心要点回顾
- 无统一总开关:OneOS 网络栈没有
OS_USING_NET这类总开关,按NET_USING_BSD(Socket)、NET_USING_LWIP(LWIP)、NET_USING_MOLINK(Molink)及各NET_USING_XXX协议开关逐层开启。 - Socket 二选一:
NET_USING_BSD后,BSD_USING_MOLINK(蜂窝/WiFi 模组)与BSD_USING_LWIP(以太网)只能选一个作为协议栈。 - LWIP 子开关前缀:LWIP 的 TCP/UDP/DNS/DHCP 用
LWIP_USING_前缀(LWIP_USING_TCP/LWIP_USING_UDP/LWIP_USING_DNS/LWIP_USING_DHCP),IPv6 是NET_USING_LWIP_IPV6。 - 协议实现选择:MQTT 在
NET_USING_PAHO_MQTT/NET_USING_MINI_MQTT间选;CoAP 总开关COAP_Version、实现NET_USING_LIBCOAP(含COAP_4_3_0/COAP_4_2_1)或FREE_COAP。 - 拼写易错:HTTP 是
NET_USING_HTTPCLIENT(非HTTP_CLIENT)、WebSocket 是NET_USING_WEBSOCKET_CLIENT、CoAP 是COAP_Version/FREE_COAP。 - Molink 结构:总开关
NET_USING_MOLINK(select OS_USING_HEAP)→ 功能集MOLINK_USING_GENERAL_OPS/NETSERV_OPS/SOCKETS_OPS/WIFI_OPS→ 具体模组MOLINK_USING_EC20等。 - 功能集依赖:
MOLINK_USING_SOCKETS_OPS依赖MOLINK_USING_NETCONN_OPS+OS_USING_LIBC_ADAPTER,PING_OPS/IFCONFIG_OPS/ONENET_NB_OPS依赖MOLINK_USING_IP。 - 典型组合:以太网→
BSD_USING_LWIP;蜂窝/WiFi→BSD_USING_MOLINK。
关键易错点速查
| 易错点 | 正确做法 |
|---|---|
找 OS_USING_NET 总开关 | 不存在 → 按 NET_USING_BSD/NET_USING_LWIP/NET_USING_MOLINK 逐层开启 |
用 NET_USING_TCP/NET_USING_UDP/NET_USING_DHCP/NET_USING_DNS | 不存在 → LWIP 内用 LWIP_USING_TCP/LWIP_USING_UDP/LWIP_USING_DHCP/LWIP_USING_DNS |
用 NET_USING_IPV6 | 不存在 → 用 NET_USING_LWIP_IPV6(LWIP)或 BSD_USING_IPV6 |
用 NET_USING_HTTP_CLIENT | 不存在 → 用 NET_USING_HTTPCLIENT(无下划线 CLIENT) |
用 NET_USING_FREECOAP | 不存在 → 用 FREE_COAP |
用 NET_USING_WEBSOCKET | 不存在 → 用 NET_USING_WEBSOCKET_CLIENT |
CoAP 总开关用 NET_USING_COAP | 不存在 → 用 COAP_Version |
Molink 总开关用 MOLINK_USING_* | 总开关是 NET_USING_MOLINK;MOLINK_USING_* 是功能集/模组子开关 |
| 开模组但不开对应功能集 | mo_get_csq 等接口不编译 → 同时开 MOLINK_USING_GENERAL_OPS/NETSERV_OPS |
蜂窝模组却选 BSD_USING_LWIP | Socket 层连不上模组 → 用 BSD_USING_MOLINK |
下一步
- 7.2.7 协议选择指南:Kconfig 已掌握配置方法,下一节学习 OneOS 各网络协议的选型指南,结合业务场景(上报频率、实时性、功耗、流量成本)在 MQTT/CoAP/HTTP 之间做出正确决策。