uIP 移植
Posted by vayu (10) Comment
平台移植:
uIP 的设备驱动程序接口
uIP 内核中有两个函数直接需要底层设备驱动程序的支持。
一是 uip_input()。当设备驱动程序从网络层收到一个数据包时要调用这个函数,
设备驱动程序必须事先将数据包存放到 uip_buf[]中,包长放到 uip_len,然后
交由 uip_input()处理。当函数返回时,如果 uip_len 不为 0,则表明有带外数
据(如 SYN,ACK 等)要发送。当需要 ARP 支持时,还需要考虑更新 ARP 表或发出 ARP
请求和回应。
另一个需要驱动程序支持的函数是 uip_periodic(conn)。这个函数用于 uIP 内
核对各连接的定时轮循,因此需要一个硬件支持的定时程序周期性地用它轮循各
连接,一般用于检查主机是否有数据要发送,如有,则构造 IP 包。
uIP 的应用程序接口
为了将用户的应用程序挂接到 uIP 中,必须将宏 UIP_APPCALL()定义成实际的应
用程序函数名, 这样每当某个 uIP 事件发生时,内核就会调用该应用程序进行
处理。如果要加入应用程序状态的话,必须将宏 UIP_APPSTATE_SIZE 定义成应用
程序状态结构体的长度。在应用程序函数中,依靠 uIP 事件检测函数来决定处理
的方法,另外可以通过判断当前连接的端口号来区分处理不同的连接。
详细请看源码公开的 TCP/IP 协议栈 uIP 的应用
快速向导: 移植 uIP 到其它的平台
实际的 TCP/IP 代码无需任何修改, 但是目标网络设备的驱动程序(以太网控制器
/串
口/其它)和实际的系统集成部分(比如, 主控制循环, 当数据到达或定期时钟超时
需调用 uI
P 函数)需要重写.
移植步骤:
1. 阅读提供的文档.
2. 在 uip-1.0/目录下为你的端口创建新的目录(选择一个简短的 CPU 架构名称,
比如
i386,用于 C 编译器).