首页 > 代码库 > 玩无线网络

玩无线网络

怎么就到网络了呢,还是因为猴哥的好奇心很重,搞明白了文件系统之后[在此猴哥就不谦虚了],对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结构体看看。

好了,至此,我们就

玩无线网络