XMU->九天揽月->五湖抓鳖->DSP->driver->kernel/OpenWRT->ISP/RTOS
分类: LINUX
2014-09-09 11:51:50
http://wdqfirst.blog.163.com/blog/static/11334741120128921915595/
要点:
硬中断部分
1. net_intr_handle() --- 设备有关,接口由驱动定义。包括关硬件中断、分配skbbuff、拷贝报文到skb->data、释放硬件buffer。
用户也可以在这里挂接自己的处理入口,选择不进入linux协议栈。
2. netif_rx() --- 设备无关,skb入队处理,每个核一个队列,然后 raise_softirq,等待core处理。
http://blog.csdn.net/zhangskd/article/details/22211295 其中有NET_RX_SOFTIRQ的触发,空队列才需要触发标记,非空队列直接加到尾巴上即可
至此上半部结束,重新开打开硬件中断。
软中断部分
http://blog.csdn.net/zhangskd/article/details/21469399 网络接收的软中断流程详解
3. net_rx_action --- 软中断(net_dev_init注册),有napi支持,core响应软中断请求后,回调n->poll(net_dev_init注册)
4. process_backlog --- napi接收,skb出队列,
5. __netif_receive_skb --- 单个skb处理,入口流量控制、桥接、VLAN、2层协议等
6. 进入内核协议栈
7. 进入sock队列,内核中协议栈与socket层的通信
8. 用户态通过socket拿到报文。