网卡 (二) LWIP 的移植
程序员文章站
2024-01-16 21:36:52
...
- 嵌入式网络那些事——LwIP协议深度剖析与实战演练
- 先移植在看代码比较清除 NO OS 和 OS 中怎么处理数据的
第五章(NO OS)和 第14章(OS) 分别讲了怎么移植 LWIP
- NO OS
1 移植
完成头文件的定义
cc.h
lwipopts.h
pref.h
根据使用的具体网卡情况完成 src/netif/ethernetif.c 的编写
2 应用
裸机中循环检测
main
tcpip_init
netif_add(ethernet_input)
int_config
while(1){
// 使用raw api
// 判断置位情况
...
}
中断中
ethernetif_input
low_level_input
netif->input //ethernet_input
// 中断中置位
裸机中中断检测
main
tcpip_init
netif_add(ethernet_input)
while(1){
if (网卡数据来了){
ethernetif_input
low_level_input
netif->input //ethernet_input
}
...
}
- OS
1 移植
完成头文件的定义
cc.h
lwipopts.h
pref.h
根据使用的具体网卡情况完成 src/netif/ethernetif.c 的编写
完成 sys_arch.c 和 sys_arch.h 的编写,主要对接 mbox 和 sem
2 应用
os中中断检测
one task
tcpip_init
//创建协议栈线程
netif_add(tcpip_input);
int_config // 网卡中断配置
sys_thread_new // 创建 http 线程
...
中断中
ethernetif_input
low_level_input
netif->input //tcpip_input
os中循环检测
one task
tcpip_init
//创建协议栈线程
netif_add(tcpip_input);
sys_thread_new // 创建 http 线程
sys_thread_new // 创建 收数据 线程
收数据线程
while(1){
if (网卡数据来了){
ethernetif_input
low_level_input
netif->input //tcpip_input
}
}
http进程
.... // 可以使用 netconn api 或者 socket api