标签:mat fas err specific vendor use advance 结构体 hand
怎么就到网络了呢,还是因为猴哥的好奇心很重,搞明白了文件系统之后[在此猴哥就不谦虚了],对IO产生了浓厚的兴趣,那么在整个计算机中IO主要来自于两个模块:1)存储 2)网络。
存储部分,主要是处理pagecache中的page和盘上的block之间的对应关系,那么网络呢?
猴哥本子上的无线网卡型号是:
04:00.0 Network controller: Intel Corporation Wireless 7260 (rev 6b)
Subsystem: Intel Corporation Wireless-N 7260
Flags: bus master, fast devsel, latency 0, IRQ 35
Memory at f1400000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [c8] Power Management version 3
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [40] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 28-b2-bd-ff-ff-eb-1a-77
Capabilities: [14c] Latency Tolerance Reporting
Capabilities: [154] Vendor Specific Information: ID=cafe Rev=1 Len=014 <?>
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
所以,找到对应的源码是:drivers/net/wireless/iwlwifi
许多教科书中都告诉说:当接受数据块的时候,是在驱动中分配了skb_buffer结构体,发现这个函数是:iwl_mvm_rx_rx_mpdu使用perf抓这个函数调用栈,是怎么样一步步来到iwl_mvm_rx_rx_mpdu呢?
iwl_pcie_irq_handler
---->iwl_mvm_rx
------->iwl_mvm_rx_rx_mpdu
在 iwl_mvm_rx_rx_mpdu 中会调用调用 alloc_skb 去分配一个 sk_buff 来整真正的数据。
如果从iwl_mvm_rx_rx_mpdu处层层向上去解析,你就真的能看到这个数据包是怎么一步步解析出来的,真的很爽,不同于文件系统,这里的内存是驱动分配出来的,并且是从slab中调用kmem_cache_alloc_node分配出来的,也就是说,kmem_cache_alloc_node中进行的内存的分配,谁告诉我不能在中断里进行内存分配的来着?????
再看__alloc_skb中的代码,里面有对其中重要数据结构初始化的代码,太重要了,建议先把那本大红书中关于sk_buff结构体看看。
好了,至此,我们就
标签:mat fas err specific vendor use advance 结构体 hand
原文地址:http://www.cnblogs.com/honpey/p/6158654.html