Linux网卡驱动类型
linux网卡驱动_new
dev->netdev_ops = &snulldev_ops;//网络接口管理函数 dev->header_ops = &snull_header_ops;//数据帧头部处理函数
在本驱动中,我们定义了 create、rebuild 连个操作; create 操作在发送数据包之前被调用,用来组装帧头部; rebuild 在进行地址解析(如 IPv4 中的 ARP 协议)之后,重新组装帧头部;
netdev_ops 是 net_device_ops 结构的实例; 该结构体定义了 N 多的操作,本驱动实现了其中的一部分下面一一对他们进行讲解: snull_open 设备 UP 时被调用,本驱动用它完成下面任务: 1、设置接口的硬件地址; 2、调用 netif_start_queue 函数,该调用等于告诉内核,该接口可以接收上层数据包了; snull_release:设备进入 DOWN 状态时被调用,本驱动使用来实现: 1、调用 netif_stop_queue 函数,告诉内核,我以后不接收数据包了; snull_chenge_mtu:这个没有歧义,不再说明; snull_stats:获取设备的统计信息,本驱动直接返回私有结构中的 net_device_ops 内嵌结构的指针; snull_tx:设备的发送函数,完成设备的数据发送工作;这个函数比较重要,但是根 LDD 中没有区别,
从中我们可以看到:当我们定义一个网络接口的 net_device 结构体,通过初始化这两个域,可以把内核 对接口的操作重新实现为我们定义的操作,这是不是面向对象编程中的“多态性”的思想呢? 既然提到了上面的两个操作集合,我们接下来就说说他们吧。 hdader_ops 是 header_ops 结构的实例:
Linux网卡驱动架构分析
Linux⽹卡驱动架构分析⼀、⽹卡驱动架构 由上到下层次依次为:应⽤程序→系统调⽤接⼝→协议⽆关接⼝→⽹络协议栈→设备⽆关接⼝→设备驱动。
⼆、重要数据结构 1、Linux内核中每⼀个⽹卡由⼀个net_device结构来描述。
2、⽹卡操作函数集:net_device_ops,这个数据结构是上⾯net_device的⼀个成员。
3、⽹络数据包:sk_buff。
三、⽹卡驱动代码分析 所⽤⽂件为cs89x0.c,主要分析三个部分:⽹卡初始化、发送数据、接收数据。
㈠⽹卡初始化 ⽹卡驱动初始化主要在函数init_module中完成,部分代码如下:int __init init_module(void){ struct net_device *dev = alloc_etherdev(sizeof(struct net_local)); struct net_local *lp; int ret = 0; ... dev->irq = irq; dev->base_addr = io; ... ret = cs89x0_probe1(dev, io, 1); ...} cs89x0_probe1函数部分代码如下:static int __init cs89x0_probe1(struct net_device *dev, int ioaddr, int modular){ struct net_local *lp = netdev_priv(dev); static unsigned version_printed; int i; int tmp; unsigned rev_type = 0; int eeprom_buff[CHKSUM_LEN]; int retval; ... writeword(ioaddr, ADD_PORT, PP_ChipID); tmp = readword(ioaddr, DATA_PORT); //对硬件的初始化 ... for (i = 0; i < ETH_ALEN/2; i++) //初始化MAC地址 { dev->dev_addr[i*2] = eeprom_buff[i]; dev->dev_addr[i*2+1] = eeprom_buff[i] >> 8; } ... dev->netdev_ops = &net_ops; //初始化netdev_ops ... retval = register_netdev(dev); //注册⽹卡驱动} 由代码可以看出 1、定义并分配net_device结构,使⽤alloc_etherdev函数。
LINUX下安装无线网卡驱动程序
1.1下载驱动程序一、首先弄清楚当前使用的是什么版本的Linux,如:Redhat9.0、Freda core5等。
Linux用的是什么版本的内核,可以用uname –a得知内核版本号。
二、使用的是什么接口类型的无线网卡,常见的接口类型有PCI (台式机)、Cardbus/PCMCIA(笔记本)、USB(台式机、笔记本)等。
三、无线网卡使用的是哪一种类型的芯片,判断方法如下,到相关网站下载与其相对应的驱动程序。
常用的无线网卡驱动及其支持的芯片类型和接口类型如下表1所示。
PCMCIA卡:将无线网卡插入笔记本电脑中,用命令lspci可以看到芯片类型,如:Realtek Semiconductor Co.. Ltd, RTL8180L802.11b MAC (rev 20)其中RTL8180L即为网卡芯片类型,用参数v可以看到更详细的信息。
USB卡:用命令lsusb可以看到芯片类型(fc5没有此命令)。
通过其它方法查找。
驱动程序芯片类型接口类型官方网站下载页Linux-wlan-ng Prism2/2.5/3 Cardbus/PCI/USB /download.shtml Madwifi Atheros系列Cardbus/PCI /islsm ISL38XX USB/PCI http://jbnote.free.fr/prism54usb/index.html表1:网卡驱动程序有关信息1.2驱动程序的安装每款驱动的安装方法各不相同,阅读INSTALL文档,获得驱动程序的具体安装方法及系统内核要求。
阅读驱动程序附带的README文档,获得有关此驱动的详细信息,如驱动所支持的网络模式、接口类型、所包含的模块的功能及无线网卡的配置等。
下面是安装网卡驱动程序的一般步骤:编译网卡驱动程序#make安装驱动程序模块#make install加载模块#modprobe 主模块名安装好驱动后插入无线网卡,命令iwconfig可以查看驱动是否加载成功,如果出现新的设备名,则说明驱动已经装上并且能够识别出无线网卡。
linux查看网卡驱动信息
linux查看⽹卡驱动信息⽅法⼀:1:ethtool -i ethx如:linux:/mnt # ethtool -i eth1driver: e1000eversion: 1.0.2-k2firmware-version: 1.9-0bus-info: 0000:0b:00.0linux:/mnt # ethtool -i eth16driver: igbversion: 2.1.0-k2firmware-version: 1.4-1bus-info: 0000:0a:00.0linux:/mnt #2:使⽤ modinfo igb 查看驱动信息linux:~ # modinfo igbfilename: /lib/modules/2.6.32.12-0.7-default/kernel/drivers/net/igb/igb.koversion: 5.2.5license: GPLdescription: Intel(R) Gigabit Ethernet Network Driverauthor: Intel Corporation, <e1000-devel@>srcversion: 0E80ABCD0117D822FE8B271alias: pci:v00008086d000010D6sv*sd*bc*sc*i*alias: pci:v00008086d000010A9sv*sd*bc*sc*i*alias: pci:v00008086d000010A7sv*sd*bc*sc*i*alias: pci:v00008086d000010E8sv*sd*bc*sc*i*alias: pci:v00008086d00001526sv*sd*bc*sc*i*alias: pci:v00008086d0000150Dsv*sd*bc*sc*i*alias: pci:v00008086d000010E7sv*sd*bc*sc*i*alias: pci:v00008086d000010E6sv*sd*bc*sc*i*alias: pci:v00008086d00001518sv*sd*bc*sc*i*alias: pci:v00008086d0000150Asv*sd*bc*sc*i*alias: pci:v00008086d000010C9sv*sd*bc*sc*i*alias: pci:v00008086d00000440sv*sd*bc*sc*i*alias: pci:v00008086d0000043Csv*sd*bc*sc*i*alias: pci:v00008086d0000043Asv*sd*bc*sc*i*alias: pci:v00008086d00000438sv*sd*bc*sc*i*alias: pci:v00008086d00001516sv*sd*bc*sc*i*alias: pci:v00008086d00001511sv*sd*bc*sc*i*alias: pci:v00008086d00001510sv*sd*bc*sc*i*alias: pci:v00008086d00001527sv*sd*bc*sc*i*alias: pci:v00008086d0000150Fsv*sd*bc*sc*i*alias: pci:v00008086d0000150Esv*sd*bc*sc*i*alias: pci:v00008086d00001524sv*sd*bc*sc*i*alias: pci:v00008086d00001523sv*sd*bc*sc*i*alias: pci:v00008086d00001522sv*sd*bc*sc*i*alias: pci:v00008086d00001521sv*sd*bc*sc*i*alias: pci:v00008086d00001539sv*sd*bc*sc*i*alias: pci:v00008086d0000157Csv*sd*bc*sc*i*alias: pci:v00008086d0000157Bsv*sd*bc*sc*i*alias: pci:v00008086d00001538sv*sd*bc*sc*i*alias: pci:v00008086d00001537sv*sd*bc*sc*i*alias: pci:v00008086d00001536sv*sd*bc*sc*i*alias: pci:v00008086d00001533sv*sd*bc*sc*i*alias: pci:v00008086d00001F45sv*sd*bc*sc*i*alias: pci:v00008086d00001F41sv*sd*bc*sc*i*alias: pci:v00008086d00001F40sv*sd*bc*sc*i*depends: hwmon,dcasupported: externalvermagic: 2.6.32.12-0.7-default SMP mod_unload modversionsparm: InterruptThrottleRate:Maximum interrupts per second, per vector, (max 100000), default 3=adaptive (array of int) parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)parm: Node:set the starting node to allocate memory on, default -1 (array of int)parm: LLIPort:Low Latency Interrupt TCP Port (0-65535), default 0=off (array of int)parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1), default 0=off (array of int)parm: LLISize:Low Latency Interrupt on Packet Size (0-1500), default 0=off (array of int)parm: RSS:Number of Receive-Side Scaling Descriptor Queues (0-8), default 1, 0=number of cpus (array of int)parm: VMDQ:Number of Virtual Machine Device Queues: 0-1 = disable, 2-8 enable, default 0 (array of int)parm: max_vfs:Number of Virtual Functions: 0 = disable, 1-7 enable, default 0 (array of int)parm: MDD:Malicious Driver Detection (0/1), default 1 = enabled. Only available when max_vfs is greater than 0 (array of int) parm: QueuePairs:Enable Tx/Rx queue pairs for interrupt handling (0,1), default 1=on (array of int)parm: EEE:Enable/disable on parts that support the feature (array of int)parm: DMAC:Disable or set latency for DMA Coalescing ((0=off, 1000-10000(msec), 250, 500 (usec)) (array of int)parm: LRO:Large Receive Offload (0,1), default 0=off (array of int)parm: enable_debug:Set to 1 to enable debug tracing into the syslog (uint)parm: debug:Debug level (0=none, ..., 16=all) (int)linux:~ #⽅法⼆:1:dmesg | grep ethx如:linux:~ # dmesg | grep eth17[ 30.351872] igb 0000:0a:00.1: eth17: (PCIe:2.5Gb/s:Width x4) 00:0b:ab:52:fb:b3[ 30.351952] igb 0000:0a:00.1: eth17: PBA No: ffffff-0ff[429171.548763] device eth17 entered promiscuous mode[429173.116530] igb: eth17 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [429173.118867] ADDRCONF(NETDEV_UP): eth17: link is not ready[429173.121176] ADDRCONF(NETDEV_CHANGE): eth17: link becomes ready [429183.236266] eth17: no IPv6 routers present[1641503.272376] igb 0000:0a:00.1: eth17: (PCIe:2.5Gb/s:Width x4) 00:0b:ab:52:fb:b3 [1641503.272460] igb 0000:0a:00.1: eth17: PBA No: ffffff-0ff[1641598.356110] device eth17 entered promiscuous mode[1641598.369229] igb: eth17 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [1641598.372636] ADDRCONF(NETDEV_UP): eth17: link is not ready [1641598.374978] ADDRCONF(NETDEV_CHANGE): eth17: link becomes ready [1641608.564181] eth17: no IPv6 routers present[1701779.787471] igb 0000:0a:00.1: eth17: (PCIe:2.5GT/s:Width x4)[1701779.787473] igb 0000:0a:00.1: eth17: MAC: 00:0b:ab:52:fb:b3[1701779.787555] igb 0000:0a:00.1: eth17: PBA No: FFFFFF-0FF[1702124.805650] device eth17 entered promiscuous mode[1702141.839131] ADDRCONF(NETDEV_UP): eth17: link is not ready [1702144.057474] igb: eth17 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None [1702144.059425] ADDRCONF(NETDEV_CHANGE): eth17: link becomes ready [1702154.705520] eth17: no IPv6 routers present[1712008.630151] igb 0000:0a:00.1: eth17: (PCIe:2.5GT/s:Width x4)[1712008.630153] igb 0000:0a:00.1: eth17: MAC: 00:0b:ab:52:fb:b3[1712008.630235] igb 0000:0a:00.1: eth17: PBA No: FFFFFF-0FF[1712100.136186] device eth17 entered promiscuous mode[1712101.873823] ADDRCONF(NETDEV_UP): eth17: link is not ready [1712104.159209] igb: eth17 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None [1712104.161548] ADDRCONF(NETDEV_CHANGE): eth17: link becomes ready [1712114.854722] eth17: no IPv6 routers presentlinux:~ #2:使⽤ modinfo igb 查看驱动信息(结果同⽅法⼀中的)。
Linux E1000网卡驱动分析
Linux-千兆网卡驱动实现机制浅析作者: Minit, 出处:博客,责任编辑: 罗丽艳,2009-03-29 00:001.引言本分析主要针对e1000网卡,驱动源码为7.3.20-k2。
本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。
通过此分析,希望可以理解驱动程序中的各个部分的关系,对网卡发送和接收数据包有直观的了解,同时也希望对设计网卡驱动程序有帮助。
由于网卡驱动程序与硬件和操作系统都有很紧密的联系,故要把某些问题完全弄清楚,需要很多的经验与相关知识,介于自身的水平有限,且自身经验较少,故肯定存在很多问题,希望本文的读者发现了问题不吝与作者联系。
2.网卡驱动的体系结构网卡作为一个PCI设备,其必须遵守相应的PCI规范,即必须为网卡定义相应的标识号,每个PCI外设由一个总线编号、一个设备编号及一个功能编号来标识。
网卡驱动程序则需要定义相应的pci_device_id结构来表示其支持的PCI外设的标识,通过在驱动程序的pci_device_id中查找设备标识号,将驱动程序与设备联系起来。
网卡作为PCI设备,其包括两类空间,一种是配置空间,CPU不能直接访问,访问这个空间,需要借助BIOS功能;另一种是普通的控制寄存器空间,这部分经过映射后,CPU可以直接访问控制。
在硬件加电初始化时,BIOS统一检查所有的PCI设备,并为每个设备分配一个物理地址,该地址通过BIOS获得并写到设备的配置空间内,驱动程序就可以将网卡的普通控制寄存器映射到一段内存空间内,CPU通过访问映射后的虚拟地址来操控网卡的寄存器。
当操作系统初始化时,其为每个PCI设备分配一个pci_dev结构,并将前面分配的物理地址写到pci_dev的resource字段中。
在网卡驱动程序中则可以通过读取pci_dev中的resource字段获得网卡的寄存器配置空间地址,其由函数pci_resource_start()和pci_resource_end()获得该空间的起始位置,通过ioremap()将该段位置映射到主存中,以便CPU访问控制网卡的I/O和内存空间。
Linux网络设备驱动_PCI网卡
⏹ Linux 网络设备驱动结构Linux的加载和卸载设备的注册初始化和注销设备的打开和释放据包的发送和接收络连接状况数设置和统计数据此驱动所支持的网卡系列初始化网络设备注销网络设备设备挂起函数设备恢复函数打开网络设备关闭网络设备读取包的网卡收发包的状态,统计数据用户的ioctl 命令系统调用硬件处理数据包发送ISR 数据包发送和接收⏹ struct pci_driver如果网络设备(包括wireless )是PCI 规范的,则先是向内核注册该PCI 设备(pci_register_driver),然后由pci_driver 数据结构中的probe 函数指针所指向的侦测函数来初始化该PCI 设备,并且同时注册和初始化该网络设备。
如果网络设备(包括wireless )是PCMCIA 规范的,则先是向内核注册该PCMCIA 设备(register_pccard_driver),然后driver_info_t 数据结构中的attach 函数指针所指向的侦测函数来初始化该PCMCIA 设备,并且同时注册和初始化该网络设备。
1. 申明为PCI 设备:static struct pci_driver tg3_driver = {.name = DRV_MODULE_NAME,//此驱动所支持的网卡系列,vendor_id, device_id.id_table = tg3_pci_tbl,//初始化网络设备的回调函数.probe = tg3_init_one,//注销网络设备的回调函数.remove = __devexit_p(tg3_remove_one),//设备挂起函数.suspend = tg3_suspend,//设备恢复函数.resume = tg3_resume};2. 驱动模块的加载和卸载static int __init tg3_init(void){//先注册成PCI设备,并初始化,如果是其他的ESIA,PCMCIA,用其他函数return pci_module_init(&tg3_driver);}static void __exit tg3_cleanup(void){pci_unregister_driver(&tg3_driver);//注销PCI设备}module_init(tg3_init); //驱动模块的加载module_exit(tg3_cleanup); //驱动模块的卸载3. PCI设备探测函数probe,初始化网络设备主要工作:申请并设置pci资源(内存),申请并设置net_device网络设备结构,IO映射,注册网络设备static int __devinit tg3_init_one(struct pci_dev *pdev, const struct pci_device_id *ent){//初始化设备,使I/O,memory可用,唤醒设备pci_enable_device(pdev);//申请内存空间,配置网卡的I/O,memory资源pci_request_regions(pdev, DRV_MODULE_NAME);pci_set_master(pdev);//设置DMA属性pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff);//网卡 I/O,memory资源的启始地址tg3reg_base = pci_resource_start(pdev, 0);//网卡I/O,memory资源的大小tg3reg_len = pci_resource_len(pdev, 0);//分配并设置网络设备dev = alloc_etherdev(sizeof(*tp));//申明为内核设备模块SET_MODULE_OWNER(dev);//初始化私有结构中的各成员值tp = dev->priv;tp->pdev = pdev;tp->dev = dev;……//锁的初始化spin_lock_init(&tp->lock);//映射I/O,memory地址到私有域中的寄存器结构tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len);dev->irq = pdev->irq;//网络设备回调函数赋值dev->open = tg3_open;dev->stop = tg3_close;dev->get_stats = tg3_get_stats;dev->set_multicast_list = tg3_set_rx_mode;dev->set_mac_aDDRess = tg3_set_mac_addr;dev->do_ioctl = tg3_ioctl;dev->tx_timeout = tg3_tx_timeout;dev->hard_start_xmit= tg3_start_xmit;//网卡的MAC地址赋值dev->addrtg3_get_device_address(tp);//注册网络设备register_netdev(dev);//把网络设备指针地址放入PCI设备中的设备指针中pci_set_drvdata(pdev, dev);}4. 注销网络设备主要工作:注销并释放网络设备,取消地址映射,释放PCI资源static void __devexit tg3_remove_one(struct pci_dev *pdev){struct net_device *dev = pci_get_drvdata(pdev);//注销网络设备unregister_netdev(dev);//取消地址映射iounmap((void *) ((struct tg3 *)(dev->priv))->regs);//释放网络设备kfree(dev);//释放PCI资源pci_release_regions(pdev);//停用PCI设备pci_disable_device(pdev);//PCI设备中的设备指针赋空pci_set_drvdata(pdev, NULL);}5. 网络设备挂起主要工作:停用网卡的中断寄存器,停止网卡收发包,停用网卡某些硬件,设置电源状态static int tg3_suspend(struct pci_dev *pdev, u32 state){//停用网卡的中断寄存器tg3_disable_ints(tp);//停止网卡收发包netif_device_detach(dev);//停止网卡某些硬件,fireware的一些功能tg3_halt(tp);//设置网卡的电源状态tg3_set_power_state(tp, state);}6. 网络设备恢复主要工作:恢复网卡电源,允许收发包,初始化收发包的缓冲区,初始化网卡硬件,打开网卡中断寄存器static int tg3_resume(struct pci_dev *pdev){//恢复网卡电源tg3_set_power_state(tp, 0);//允许网卡收发包netif_device_attach(dev);//初始化收发包的缓冲区tg3_init_rings(tp);//初始化网卡硬件tg3_init_hw(tp);//打开网卡中断寄存器tg3_enable_ints(tp);}struct net_device1. 打开网络设备主要工作:分配中断及注册中断处理函数,初始化硬件及收发缓冲区,初始化定时器及注册超时函数,允许网卡开始传送包static int tg3_open(struct net_device *dev){//分配一个中断request_irq(dev->irq, tg3_interrupt, SA_SHIRQ, dev->name, dev);/* int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct pt_regs *regs),unsigned long irqflags,const char * devname,void *dev_id);irq是要申请的硬件中断号。
Linux环境中网卡设备的驱动
Linux环境中网卡设备的驱动
Linux的网络功能非常强大(它几乎包含了Unix所有的网络功能),并且
具有出色的性能,同时,Linux还是一个免费的操作系统,这些优点使其受到
越来越多的人的青睐。
但是,在桌面系统上,Linux与Windows在易用性上还存在一定的差距,主要表现在其使用上过于复杂,还不适合初级用户,尤其是硬件的配置工作。
比如,在Linux的安装过程中,有一些特殊设备Linux系统不能自动识别(如某
些网卡等),这就需要在系统安装完成之后进行手工设置。
本文以台湾Davicom 公司的dm9102快速以太网卡为例,介绍在Linux环境中设置网卡设备驱动的步骤。
系统环境:TurboLinux4.0.2,网卡、显卡、Modem均集成在主板上。
1.下载驱动
登录到Davicom公司网站上(davicom.tw)下载Linux下的最新驱动程序,版本为2.0.10-20,源程序名为dmfe.c。
2.编译
gcc-DMODULE-D__KERNEL_I/usr/src/linux/net/inet-Wall-Wstrict- prototypesO6cdmfe.c
gcc(GNUCCompiler)为编译命令,编译完成后,在当前目录下产生目标文件dmfe.o。
3.设置模式
利用insmod命令设置模式,其常用的几个命令如下表所示:
其中,insmoddmfe命令的主要输出结果如下:
ID=91021282网卡ID号。
Linux网络体系架构和网卡驱动设计
Linux网络体系架构1、Linux的协议栈层次2、Linux的网络子系统架构Linux的协议栈层次Linux的优点之一在于它丰富而稳定的网络协议栈。
其范围从协议无关层(例如通用socket层接口或设备层)到各种具体的网络协议实现。
对于网络的理论介绍一般采用OSI(Open System Interconnection)模型,但是Linux中网络栈的介绍一般分为四层Internet模型。
网络接口层—>网际层—>传输层—>应用层网络接口层: 把数据链路层和物理层合并在一起,提供访问物理设备的驱动程序,对应的网络协议主要是以太网协议。
网际层协议管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确地到达目的机器。
重要的网络层协议包括:ARP(地址解析协议)、ICMP(Internet 控制消息协议)和IP(网际协议)传输层的功能包括:格式化信息流、提供可靠传输。
传输层包括TCP和UDP应用层的主要任务是服务于应用,如利用FTP传输一个文件。
常见的应用层协议有:HTTP、FTP、Telnet等。
Linux服务器的配置文档主要针对应用层中的协议。
Linux的网络子系统架构从上往下:System call interface—>Protocol agnostic interface—>Network protocols—>Device agnostic interface—>Device driversSystem call interface为用户空间的应用程序提供了一种访问内核网络子系统的方法—socket系统调用。
Protocol agnostic interface提供了一种通用方法来使用传输层协议。
实现一组通用函数来访问各种不同的协议,通过socket实现。
Linux中的socket使用struct sock来描述,这个结构包含了特定socket所需要的所有状态信息,还包括socket所使用的特定协议和在socket上可以执行的一些操作。
26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)
26.Linux-⽹卡驱动介绍以及制作虚拟⽹卡驱动(详解)1.描述⽹卡的驱动其实很简单,它还是与硬件相关,主要是负责收发⽹络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制⽅式进⾏发送,并将接收到的数据包传递给上层协议。
⽹卡设备与字符设备和块设备不同,⽹络设备并不对应于/dev⽬录下的⽂件,不过会存放在/sys/class/net⽬录下如下图所⽰,我们通过ls /sys/class/net/命令,可以看到有两个⽹卡:2.Linux系统对⽹络设备驱动定义了4个层次,这4个层次有到下分为:1)⽹络协议接⼝层:实现统⼀的数据包收发的协议,该层主要负责调⽤dev_queue_xmit()函数发送数据, netif_rx()函数接收数据2)⽹络设备接⼝层:通过net_device结构体来描述⼀个具体的⽹络设备的信息,实现不同的硬件的统⼀3)设备驱动功能层:⽤来负责驱动⽹络设备硬件来完成各个功能, 它通过hard_start_xmit() 函数启动发送操作,并通过⽹络设备上的中断触发接收操作,4)⽹络设备与媒介层:⽤来负责完成数据包发送和接收的物理实体, 设备驱动功能层的函数都在这物理上驱动的层次结构如下图所⽰:3.⽹卡驱动初始化⽽我们的⽹卡驱动程序,只需要编写⽹络设备接⼝层,填充net_device数据结构的内容并将net_device注册⼊内核,设置硬件相关操作,使能中断处理等3.1其中net_device结构体的重要成员,整理后如下所⽰:struct net_device{char name[IFNAMSIZ]; //⽹卡设备名称unsigned long mem_end; //该设备的内存结束地址unsigned long mem_start; //该设备的内存起始地址unsigned long base_addr; //该设备的内存I/O基地址unsigned int irq; //该设备的中断号unsigned char if_port; //多端⼝设备使⽤的端⼝类型 unsigned char dma; //该设备的DMA通道unsigned long state; //⽹络设备和⽹络适配器的状态信息struct net_device_stats* (*get_stats)(struct net_device *dev); //获取流量的统计信息 //运⾏ifconfig便会调⽤该成员函数,并返回⼀个net_device_stats结构体获取信息struct net_device_stats stats; //⽤来保存统计信息的net_device_stats结构体unsigned long features; //接⼝特征,unsigned int flags; //flags指⽹络接⼝标志,以IFF_(Interface Flags)开头//当flags =IFF_UP(当设备被激活并可以开始发送数据包时,内核设置该标志)、 IFF_AUTOMEDIA(设置设备可在多种媒介间切换)、IFF_BROADCAST(允许⼴播)、IFF_DEBUG(调试模式,可⽤于控制printk调⽤的详细程度)、 IFF_LOOPBACK(回环)、IFF_MULTICAST(允许组播)、 IFF_NOARP(接⼝不能执⾏ARP,点对点接⼝就不需要运⾏ ARP)和IFF_POINTOPOINT(接⼝连接到点到点链路)等。
linux无线网络配置无线网卡驱动安装与wlan802.11配置
Linux无线网络配置——无线网卡驱动安装与WLAN 802.11配置Linux无线网络配置——无线网卡驱动安装与WLAN 802.11配置2008-05-10 18:2720739人阅读评论(5)收藏举报Linux无线网络配置——无线网卡驱动安装与WLAN 802.11配置WLAN (Wireless Local Area Network)类似于有线以太网,WLAN 的802.11a 标准使用5 GHz 频段,支持的最大速度为54 Mbps,而802.11b 和802.11g 标准使用2.4 GHz 频段,分别支持最大11 Mbps 和54 Mbps 的速度。
使用Windows操作系统,WLAN配置很简单。
无线网卡厂商将Windows下的驱动随网卡一起销售。
而Linux新兴的操作系统,这方面的驱动不多。
以前购买无线网卡时也没考虑Linux下的驱动程序,于是需要编译驱动程序源码。
现在市场上大部分的无线网卡都是对于Atheros芯片的。
如TP—LINK的310G、350G、510G、550G、650G。
对于Atheros芯片的网卡,可以到网站上找到驱动程序,根据源代码包里面的README和INSTALL文件来获得足够的安装信息。
最新驱动源码包(0.9.2版本)下载地址/madwifi/madwifi-0.9.2.tar .bz2?modtime=1154005765&big_mirror=0下面详细介绍无线网卡驱动程序的安装和WLAN的配置。
操作步骤:下载驱动源码包存放在/root/downloads目录下步骤一、解压源码压缩包1). 进入文件所在目录cd /root/downloads2). 解压.bz2格式的压缩包bunzip2 madwifi-0.9.2.tar.bz2生成.tar格式压缩包3). 解压.tar格式的压缩包tar xvf madwifi-0.9.2.tar步骤二、编译安装驱动4). 进入解压后的目录cd madwifi-0.9.25). 编译驱动程序make查看编译信息,没有error,编译成功,继续安装驱动6). 安装驱动make install步骤三、驱动模块配置7). 插入扫描模块modprobe ath_pci8). 扫描访问接入点modprobe wlan_scan_sta9). 启动无线网卡ath0ifconfig ath0 up获取网卡信息10). wlanconfig ath0 list scan网卡信息如下,default是所在无线局域网的名称,00:d0:f8:e0:a8:88 是无线路由器的物理地址,54M是带宽为54M网卡。
redhatlinux9.0安装atheros ar8151网卡驱动
linux9.0手动安装网卡R8151驱动程序在终端可以发现只有一个默认的lo连接而没有eth0 和显示的网卡具体型号信息在那则回复里面,作者要我们去这里下载驱动。
具体出自该作者,非常感谢/system/lin/201307/42404.shtml虽然该驱动是8161的,估计该系列的都是支持的,我这里直接给出文件的链接,大家可以用wget或者其他下载工具直接下载:/34178/alx-linux-v2.0.0.6.rar1编译和安装编译前提你要安装了kernel-headers 和 kernel-devel。
当然,还有gcc。
非常幸运,开始安装LINUX的时候我已经把所有的安装包都安装好了,省些麻烦.编译将下载下来的压缩包可以在windows解压(rar的格式)后,出现一个目录(alx-linux-v2.0.0.6),最后用U盘考到linux的/usr/local/src目录下面,我们进入这个目录之后,直接执行make就可以了。
再打开解压包里面的src文件夹可以发现,有一个叫做alx.o(2.4内核版本的格式)/或alx.ko(2.6内核版本的格式)的文件,这个就是我们要用的网卡驱动了。
安装直接命令make install显示安装完毕后还要更重要的,看看驱动有没有安装成功,执行一下pwd,打开/lib/modules/2.4.20-8(具体看看你自己安装的linux内核版本不一定都跟我的一样)/kernel/drivers/net/下面有没有alx.o或者alx.ko文件,如果没有的话直接在原解压的安装包里面拷贝一个粘贴到该目录下面就可以了lsmod看看有没有什么信息不一样?拷贝完毕后运行命令modprobe axl.o到了这一步lspci -v还是不能正确显示驱动已经安装好了继续努力~~2配置手动配置网络配置文件信息具体目录为:∙如果载入驱动成功后,使用ifconfig还无法看到eth0的话,使用:1ifconfig -a #这样就可以发现eth0了(eth0是第一个,如果你有其他的网卡会显示eth1...如果还是不能显示的话,继续以下工作打开文件夹/etc/sysconfig/network-scripts/找到名为ifcfg-lo的文件,把该文件复制到其他目录下面,并且重新命名为ifcfg-eth0,再把该文件剪切回/etc/sysconfig/network-scripts下面。
linux查看网卡型号、驱动版本、队列数
linux查看⽹卡型号、驱动版本、队列数⼀、如何查看⽹卡⽣产⼚家和型号?lspci命令查看基本信息 lspci,详细信息lspci -vvv00:00.0 Host bridge: Intel Corporation 5520 I/O Hub to ESI Port (rev 13)00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 13) 00:02.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 2 (rev 13) 00:03.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 3 (rev 13) 00:04.0 PCI bridge: Intel Corporation 5520/X58 I/O Hub PCI Express Root Port 4 (rev 13) 00:05.0 PCI bridge: Intel Corporation 5520/X58 I/O Hub PCI Express Root Port 5 (rev 13) 00:06.0 PCI bridge: Intel Corporation 5520/X58 I/O Hub PCI Express Root Port 6 (rev 13) 00:07.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 7 (rev 13) 00:08.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 8 (rev 13) 00:09.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 13) 00:0a.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 10 (rev 13)00:0d.0 Host bridge: Intel Corporation Device 343a (rev 13)00:0d.1 Host bridge: Intel Corporation Device 343b (rev 13)00:0d.2 Host bridge: Intel Corporation Device 343c (rev 13)00:0d.3 Host bridge: Intel Corporation Device 343d (rev 13)00:0d.4 Host bridge: Intel Corporation 5520/5500/X58 Physical Layer Port 0 (rev 13)00:0d.5 Host bridge: Intel Corporation 5520/5500 Physical Layer Port 1 (rev 13)00:0d.6 Host bridge: Intel Corporation Device 341a (rev 13)00:0e.0 Host bridge: Intel Corporation Device 341c (rev 13)00:0e.1 Host bridge: Intel Corporation Device 341d (rev 13)00:0e.2 Host bridge: Intel Corporation Device 341e (rev 13)00:0e.3 Host bridge: Intel Corporation Device 341f (rev 13)00:0e.4 Host bridge: Intel Corporation Device 3439 (rev 13)00:14.0 PIC: Intel Corporation 5520/5500/X58 I/O Hub System Management Registers (rev 13) 00:14.1 PIC: Intel Corporation 5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers (rev 13)00:14.2 PIC: Intel Corporation 5520/5500/X58 I/O Hub Control Status and RAS Registers (rev 13)00:1c.0 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 100:1c.4 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 500:1d.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1 00:1d.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2 00:1d.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3 00:1d.3 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6 00:1d.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 90)00:1f.0 ISA bridge: Intel Corporation 82801JIB (ICH10) LPC Interface Controller01:03.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev 02)02:00.0 System peripheral: Hewlett-Packard Company iLO3 Slave instrumentation & System support (rev 04)02:00.2 System peripheral: Hewlett-Packard Company iLO3 Management Processor Support and Messaging (rev 04)02:00.4 USB Controller: Hewlett-Packard Company Proliant iLO2/iLO3 virtual USB controller (rev 01)03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)03:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)04:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)04:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)05:00.0 RAID bus controller: Hewlett-Packard Company Smart Array G6 controllers (rev 01) 09:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)09:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)机器上有Broadcom的千兆⽹卡和intel的万兆⽹卡,型号分别是BCM5709和82599EB⼆、查看⽹卡驱动两个办法:⽅法1:lspci -vvv09:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)Subsystem: Intel Corporation Ethernet Server Adapter X520-2Physical Slot: 2Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping-SERR- FastB2B- DisINTx+Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort->SERR- <PERR- INTx-Latency: 0, Cache Line Size: 64 bytesInterrupt: pin B routed to IRQ 34Region 0: Memory at fbd00000 (64-bit, non-prefetchable) [size=1M]Region 2: I/O ports at 5020 [size=32]Region 4: Memory at fbcf0000 (64-bit, non-prefetchable) [size=16K]Capabilities: [40] Power Management version 3Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold-) Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+Address: 0000000000000000 Data: 0000Masking: 00000000 Pending: 00000000Capabilities: [70] MSI-X: Enable+ Count=64 Masked-Vector table: BAR=4 offset=00000000PBA: BAR=4 offset=00002000Capabilities: [a0] Express (v2) Endpoint, MSI 00DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64usExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-MaxPayload 256 bytes, MaxReadReq 4096 bytesDevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-LnkCap: Port #0, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 <32us ClockPM- Surprise- LLActRep- BwNot-LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt-ABWMgmt-DevCap2: Completion Timeout: Range ABCD, TimeoutDis+DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dBTransmit Margin: Normal Operating Range, EnterModifiedCompliance-ComplianceSOS-Compliance De-emphasis: -6dBLnkSta2: Current De-emphasis Level: -6dBCapabilities: [100] Advanced Error ReportingUESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-ECRC- UnsupReq+ ACSViol-UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-ECRC- UnsupReq+ ACSViol-UESvrt: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-ECRC- UnsupReq- ACSViol-CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-Capabilities: [140] Device Serial Number 90-e2-ba-ff-ff-17-8f-48Capabilities: [150] Alternative Routing-ID Interpretation (ARI)ARICap: MFVC- ACS-, Next Function: 0ARICtl: MFVC- ACS-, Function Group: 0Capabilities: [160] Single Root I/O Virtualization (SR-IOV)IOVCap: Migration-, Interrupt Message Number: 000IOVCtl: Enable- Migration- Interrupt- MSE- ARIHierarchy-IOVSta: Migration-Initial VFs: 64, Total VFs: 64, Number of VFs: 64, Function Dependency Link: 01 VF offset: 128, stride: 2, Device ID: 10edSupported Page Size: 00000553, System Page Size: 00000001Region 0: Memory at 00000000e4300000 (64-bit, prefetchable)Region 3: Memory at 00000000e4400000 (64-bit, prefetchable)VF Migration: offset: 00000000, BIR: 0Kernel driver in use: ixgbeKernel modules: ixgbe⽅法2:lsmodModule Size Used bypf_ring 368053 48ipmi_devintf 8023 0ipmi_si 42399 0ipmi_msghandler 35958 2 ipmi_devintf,ipmi_sibonding 122971 0ipv6 322986 1 bondingpower_meter 9349 0hpwdt 6990 0hpilo 7903 0sg 30218 0bnx2 77468 0ixgbe 200013 0dca 7195 1 ixgbemdio 4738 1 ixgbemicrocode 112877 0serio_raw 4824 0iTCO_wdt 12092 0iTCO_vendor_support 3062 1 iTCO_wdti7core_edac 18094 0edac_core 46701 1 i7core_edacshpchp 33488 0ext3 133515 7jbd 54520 1 ext3mbcache 7990 1 ext3hpsa 51776 8radeon 926887 1ttm 67043 1 radeondrm_kms_helper 34744 1 radeondrm 213765 3 radeon,ttm,drm_kms_helperhwmon 2496 2 power_meter,radeoni2c_algo_bit 5768 1 radeoni2c_core 31274 4 radeon,drm_kms_helper,drm,i2c_algo_bitdm_mod 75507 0三、如何查看⽹卡驱动版本也有两种办法:⽅法1) modinfomodinfo bnx2filename: /lib/modules/2.6.32-131.21.1.tb477.el6.x86_64/kernel/drivers/net/bnx2.ko firmware: bnx2/bnx2-rv2p-09ax-6.0.17.fwfirmware: bnx2/bnx2-rv2p-09-6.0.17.fwfirmware: bnx2/bnx2-mips-09-6.2.1a.fwfirmware: bnx2/bnx2-rv2p-06-6.0.15.fwfirmware: bnx2/bnx2-mips-06-6.2.1.fwversion: 2.1.6license: GPLdescription: Broadcom NetXtreme II BCM5706/5708/5709/5716 Driverauthor: Michael Chan <mchan@>srcversion: ECE369A7D0A9096343A3B3Falias: pci:v000014E4d0000163Csv*sd*bc*sc*i*alias: pci:v000014E4d0000163Bsv*sd*bc*sc*i*alias: pci:v000014E4d0000163Asv*sd*bc*sc*i*alias: pci:v000014E4d00001639sv*sd*bc*sc*i*alias: pci:v000014E4d000016ACsv*sd*bc*sc*i*alias: pci:v000014E4d000016AAsv*sd*bc*sc*i*alias: pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i*alias: pci:v000014E4d0000164Csv*sd*bc*sc*i*alias: pci:v000014E4d0000164Asv*sd*bc*sc*i*alias: pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i*alias: pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i*depends:vermagic: 2.6.32-131.21.1.tb477.el6.x86_64 SMP mod_unload modversionsparm: disable_msi:Disable Message Signaled Interrupt (MSI) (int)modinfo ixgbefilename: /lib/modules/2.6.32-131.21.1.tb477.el6.x86_64/kernel/drivers/net/ixgbe/ixgbe.ko version: 3.0.12-k2-1license: GPLdescription: Intel(R) 10 Gigabit PCI Express Network Driverauthor: Intel Corporation, <linux.nics@>srcversion: 612CB82E4460BB4174B1E2Calias: pci:v00008086d00001528sv*sd*bc*sc*i*alias: pci:v00008086d000010F8sv*sd*bc*sc*i*alias: pci:v00008086d0000151Csv*sd*bc*sc*i*alias: pci:v00008086d00001529sv*sd*bc*sc*i*alias: pci:v00008086d0000152Asv*sd*bc*sc*i*alias: pci:v00008086d000010F9sv*sd*bc*sc*i*alias: pci:v00008086d00001514sv*sd*bc*sc*i*alias: pci:v00008086d00001507sv*sd*bc*sc*i*alias: pci:v00008086d000010FBsv*sd*bc*sc*i*alias: pci:v00008086d00001517sv*sd*bc*sc*i*alias: pci:v00008086d000010FCsv*sd*bc*sc*i*alias: pci:v00008086d000010F7sv*sd*bc*sc*i*alias: pci:v00008086d00001508sv*sd*bc*sc*i*alias: pci:v00008086d000010DBsv*sd*bc*sc*i*alias: pci:v00008086d000010F4sv*sd*bc*sc*i*alias: pci:v00008086d000010E1sv*sd*bc*sc*i*alias: pci:v00008086d000010F1sv*sd*bc*sc*i*alias: pci:v00008086d000010ECsv*sd*bc*sc*i*alias: pci:v00008086d000010DDsv*sd*bc*sc*i*alias: pci:v00008086d0000150Bsv*sd*bc*sc*i*alias: pci:v00008086d000010C8sv*sd*bc*sc*i*alias: pci:v00008086d000010C7sv*sd*bc*sc*i*alias: pci:v00008086d000010C6sv*sd*bc*sc*i*alias: pci:v00008086d000010B6sv*sd*bc*sc*i*depends: mdio,dcavermagic: 2.6.32-131.21.1.tb477.el6.x86_64 SMP mod_unload modversionsparm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)parm: FdirMode:Flow Director filtering modes (0=Off, 1=Hashing) default 1 (array of int) parm: max_vfs:Maximum number of virtual functions to allocate per physical function (uint)⽅法2: ethtoolethtool -i eth3driver: bnx2version: 2.1.6firmware-version: bc 5.2.2 NCSI 2.0.6bus-info: 0000:03:00.1ethtool -i eth0driver: ixgbeversion: 3.0.12-k2-1firmware-version: 3.13-0bus-info: 0000:09:00.0四、如何查看⽹络接⼝队列数cat /proc/interrupts | grep eth053: 4143055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-054: 20 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-155: 20 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-256: 20 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-357: 20 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-458: 20 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-559: 20 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-660: 20 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-761: 20 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-862: 20 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-963: 20 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1064: 20 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1165: 20 0 0 0 0 0 0 0 0 0 0 04143035 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1266: 20 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1367: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1468: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1569: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1670: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1771: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1872: 20 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 4143035 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1973: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 0 IR-PCI-MSI-edge eth0-TxRx-2074: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 0 IR-PCI-MSI-edge eth0-TxRx-2175: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 0 IR-PCI-MSI-edge eth0-TxRx-2276: 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4143035 IR-PCI-MSI-edge eth0-TxRx-2377: 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0:lsc可以看到有24个队列另外,ethtool也可以看到:ethtool -S eth0NIC statistics:rx_packets: 0tx_packets: 0rx_bytes: 0tx_bytes: 0rx_pkts_nic: 0tx_pkts_nic: 0rx_bytes_nic: 0tx_bytes_nic: 0lsc_int: 38tx_busy: 0non_eop_descs: 0rx_errors: 0tx_errors: 0rx_dropped: 0tx_dropped: 0multicast: 0broadcast: 0rx_no_buffer_count: 0collisions: 0rx_over_errors: 0rx_crc_errors: 0rx_frame_errors: 0hw_rsc_aggregated: 0hw_rsc_flushed: 0fdir_match: 0fdir_miss: 0rx_fifo_errors: 0rx_missed_errors: 0tx_aborted_errors: 0tx_carrier_errors: 0tx_fifo_errors: 0tx_heartbeat_errors: 0tx_timeout_count: 0tx_restart_queue: 0rx_long_length_errors: 0rx_short_length_errors: 0tx_flow_control_xon: 0rx_flow_control_xon: 0tx_flow_control_xoff: 0rx_flow_control_xoff: 0rx_csum_offload_errors: 0alloc_rx_page_failed: 0alloc_rx_buff_failed: 0fcoe_bad_fccrc: 0rx_fcoe_dropped: 0rx_fcoe_packets: 0rx_fcoe_dwords: 0tx_fcoe_packets: 0tx_fcoe_dwords: 0tx_queue_0_packets: 0 tx_queue_0_bytes: 0tx_queue_1_packets: 0 tx_queue_1_bytes: 0tx_queue_2_packets: 0 tx_queue_2_bytes: 0tx_queue_3_packets: 0 tx_queue_3_bytes: 0tx_queue_4_packets: 0 tx_queue_4_bytes: 0tx_queue_5_packets: 0 tx_queue_5_bytes: 0tx_queue_6_packets: 0 tx_queue_6_bytes: 0tx_queue_7_packets: 0 tx_queue_7_bytes: 0tx_queue_8_packets: 0 tx_queue_8_bytes: 0tx_queue_9_packets: 0 tx_queue_9_bytes: 0tx_queue_10_packets: 0 tx_queue_10_bytes: 0 tx_queue_11_packets: 0 tx_queue_11_bytes: 0 tx_queue_12_packets: 0 tx_queue_12_bytes: 0 tx_queue_13_packets: 0 tx_queue_13_bytes: 0 tx_queue_14_packets: 0 tx_queue_14_bytes: 0 tx_queue_15_packets: 0 tx_queue_15_bytes: 0 tx_queue_16_packets: 0 tx_queue_16_bytes: 0 tx_queue_17_packets: 0 tx_queue_17_bytes: 0 tx_queue_18_packets: 0 tx_queue_18_bytes: 0 tx_queue_19_packets: 0 tx_queue_19_bytes: 0 tx_queue_20_packets: 0 tx_queue_20_bytes: 0 tx_queue_21_packets: 0 tx_queue_21_bytes: 0 tx_queue_22_packets: 0 tx_queue_22_bytes: 0 tx_queue_23_packets: 0 tx_queue_23_bytes: 0 rx_queue_0_packets: 0 rx_queue_0_bytes: 0rx_queue_1_packets: 0 rx_queue_1_bytes: 0rx_queue_2_packets: 0 rx_queue_2_bytes: 0rx_queue_3_packets: 0 rx_queue_3_bytes: 0rx_queue_4_packets: 0 rx_queue_4_bytes: 0rx_queue_5_bytes: 0rx_queue_6_packets: 0 rx_queue_6_bytes: 0rx_queue_7_packets: 0 rx_queue_7_bytes: 0rx_queue_8_packets: 0 rx_queue_8_bytes: 0rx_queue_9_packets: 0 rx_queue_9_bytes: 0rx_queue_10_packets: 0 rx_queue_10_bytes: 0 rx_queue_11_packets: 0 rx_queue_11_bytes: 0 rx_queue_12_packets: 0 rx_queue_12_bytes: 0 rx_queue_13_packets: 0 rx_queue_13_bytes: 0 rx_queue_14_packets: 0 rx_queue_14_bytes: 0 rx_queue_15_packets: 0 rx_queue_15_bytes: 0 rx_queue_16_packets: 0 rx_queue_16_bytes: 0 rx_queue_17_packets: 0 rx_queue_17_bytes: 0 rx_queue_18_packets: 0 rx_queue_18_bytes: 0 rx_queue_19_packets: 0 rx_queue_19_bytes: 0 rx_queue_20_packets: 0 rx_queue_20_bytes: 0 rx_queue_21_packets: 0 rx_queue_21_bytes: 0 rx_queue_22_packets: 0 rx_queue_22_bytes: 0 rx_queue_23_packets: 0 rx_queue_23_bytes: 0。
Red Hat Linux 安装BroadCom网卡驱动
Red Hat Linux 安装BroadCom网卡驱动获取途径:1. 从随机所带的光盘DOSA创建网卡的驱动程序:(1). 将DOSA盘放入运行Windows的PC 的光驱,自动运行,点击Update Drivers/Utilities(2). 选定服务器,选择操作系统(Red Hat Linux),点击Continue(3). 选定服务器使用的网卡点击下载,保存。
2. 或者直接从戴尔驱动网站下载:(1). 打开/cn/zh/techfile/DriverDownloadHelp.htm(2). 选择一种戴尔机型(3). 选择您的操作系统:Red Hat Linux(4). 选择操作系统语言:英语(5). 选择驱动程序类别:网络设备驱动NetWork Drivers(6). 查看结果网卡配置方法如下启动Red Hat Enterprise Linux3后1.从PowerEdge Service and Diagnostic Utilies 下载驱动:选择: Broadcom:NetXtreme Family of Adapters(Driver) 3.6(GUN Zip) 下载: tg3-3.6-1.tar.gz2.安装:rpm -ivh tg3-3.6-1dkms.noarch.rpm,/p>注意:如果安装tg3-3.6-1dkms.noarch.rpm 出错,请根据提示陆续安装要求的rpm包.glibc-kernheaders-2.4-8.34.i386.rpm(在redhat linux CD 3 中)glibc-headers-2.3.2-95.3.i386.rpm(在redhat linux CD 3 中)glibc-devel-2.3.2-95.3.i386.rpm(在redhat linux CD 3 中)gcc-3.2.3-20.i386.rpm(在redhat linux CD 3 中)dkms-1.10.1.noarch.rpm(在tg3-3.6-1.tar.gz中)kernel-source-2.4.21-4.EL.i386.rpm(在redhat linux CD 3 中)tg3-3.6-1dkms.noarch.rpm(在tg3-3.6-1.tar.gz中)3.使用netconfig命令配置网卡,在以下画面中根据的网络规划输入ip地址、子网掩码、默认网关,或者选择从Dhcp服务器动态获得使用命令:service network restart(重启服务器)。
linux网卡驱动的配置
linux⽹卡驱动的配置RedHat5.1下安装Realtek8168⽹卡驱动1.先识别机器上的⽹卡型号:[root@localhost kernel]#kudzu --probe --class=network2、使⽤命令查看kernel包是否都装全了,具体如下:[root@localhost kernel]# rpm -qa | grep kernel如果装全了,会显⽰如下⼏个包:kernel-xen-devel-2.6.18-8.el5kernel-devel-2.6.18-8.el5kernel-2.6.18-8.el5kernel-xen-2.6.18-8.el5kernel-headers-2.6.18-8.el5如果没有装全,就在redhat enterprise Linux 5.0第⼀个ISO的Server⽂件⽬录下可以找到对应的包,拷贝到某⼀具体⽬录下,进⼊⽬录后,⽤如下命令就可以进⾏安装:[root@localhost kernel]# rpm -ivhkernel-devel-2.6.18-8.el5.x86_64.rpm注意:如果不装全这些包,在⽹卡编译时就会报错说找不到src⽬录⽂件。
⽤如下命令查看GCC是否安装,通常都装上的,还是检查⼀下⽐较好。
[*****************.18-8.el5]#whereis-bgccgcc : /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc3、将r8168-8.aaa.bb.tar.bz2解压出来变成r8168-8.aaa.bb⽂件夹形式,拷到U盘在redhat下挂载U盘:插⼊U盘[root@localhost kernel]#mount /dev/sdb1 /mnt/usb4.将r8168-8.aaa.bb⽂件夹拷都本地,如/home⽬录下⾸先将u盘中的驱动程序包拷贝到/home⽬录下[root@localhost media]# cp r8168-8\[1\].011.00.tar.bz2 /home/ [root@localhost media]# cd /home/[root@localhost home]# lsr8168-8[1].011.00.tar.bz25.其次解压驱动程序包[root@localhost home]# tar -vjxf r8168-8\[1\].011.00.tar.bz2r8168-8.011.00/r8168-8.011.00/src/r8168-8.011.00/src/r8168_n.cr8168-8.011.00/src/Makefiler8168-8.011.00/src/r8168_asf.hr8168-8.011.00/src/r8168.hr8168-8.011.00/src/r8168_asf.cr8168-8.011.00/src/Makefile_linux24xr8168-8.011.00/Makefiler8168-8.011.00/readme[root@localhost home]# lsr8168-8.011.00 r8168-8[1].011.00.tar.bz2[root@localhost home]# cd r8168-8[*************************.00]#lsMakefile readme src6.[*************************.00]#makecleanmodulesmake -C src/ cleanmake[1]: Entering directory `/home/r8168-8.011.00/src'rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers *.order make[1]: Leaving directory `/home/r8168-8.011.00/src'make -C src/ modulesmake[1]: Entering directory `/home/r8168-8.011.00/src'make -C /lib/modules/2.6.18-53.el5xen/build SUBDIRS=/home/r8168-8.011.00/src modulesmake[2]: Entering directory `/usr/src/kernels/2.6.18-53.el5-xen-i686'CC [M] /home/r8168-8.011.00/src/r8168_n.o/home/r8168-8.011.00/src/r8168_n.c: 在函数‘rtl8168_tx_clear’中:/home/r8168-8.011.00/src/r8168_n.c:4154: 警告:未使⽤的变量‘dev’CC [M] /home/r8168-8.011.00/src/r8168_asf.oLD [M] /home/r8168-8.011.00/src/r8168.oBuilding modules, stage 2.MODPOSTCC /home/r8168-8.011.00/src/r8168.mod.oLD [M] /home/r8168-8.011.00/src/r8168.komake[2]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-xen-i686'strip --strip-debug r8168.komake[1]: Leaving directory `/home/r8168-8.011.00/src'7.[*************************.00]#makeinstallmake -C src/ installmake[1]: Entering directory `/home/r8168-8.011.00/src'install -m 744 -c r8168.ko /lib/modules/2.6.18-53.el5xen/kernel/drivers/net/ make[1]: Leaving directory `/home/r8168-8.011.00/src'[*************************.00]#depmod–a[*************************.00]#modprober8168[*************************.00]#lsmod|grepr8168r8168 44564 0[*************************.00]#ifconfig-aeth0 Link encap:Ethernet HWaddr 00:24:81:F2:99:75BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)Interrupt:17 Base address:0xc000lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:1195 errors:0 dropped:0 overruns:0 frame:0TX packets:1195 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:1904847 (1.8 MiB) TX bytes:1904847 (1.8 MiB)sit0 Link encap:IPv6-in-IPv4NOARP MTU:1480 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)veth0 Link encap:Ethernet HWaddr 00:00:00:00:00:00BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)veth1 Link encap:Ethernet HWaddr 00:00:00:00:00:00BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)veth2 Link encap:Ethernet HWaddr 00:00:00:00:00:00BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)veth3 Link encap:Ethernet HWaddr 00:00:00:00:00:00BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FFBROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)vif0.1 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FFBROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)vif0.2 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FFBROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)vif0.3 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FFBROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0inet6 addr: fe80::200:ff:fe00:0/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:46 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:8446 (8.2 KiB)xenbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00inet6 addr: fe80::200:ff:fe00:0/64 Scope:LinkUP BROADCAST RUNNING NOARP MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)8.[*************************.00]#ifconfigeth0up[*************************.00]#ifconfigeth0eth0 Link encap:Ethernet HWaddr 00:24:81:F2:99:75inet6 addr: fe80::224:81ff:fef2:9975/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:438 errors:0 dropped:0 overruns:0 frame:0TX packets:16 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:36745 (35.8 KiB) TX bytes:4518 (4.4 KiB)Interrupt:17 Base address:0xc0009.配置ip地址[*************************.00]#ifconfigeth0"10.10.112.1"10.配置⽹关[*************************.00]#routeadddefaultgw"10.10.112.254"然后单击菜单栏的系统下⾯的“管理”下的“⽹络“界⾯,在此界⾯⾥⾯配置下DNS,然后单击保存,即可。
Linux设备之网络驱动介绍
Linux设备之⽹络驱动介绍有线⽹络:以太⽹⽆线⽹络:4G、wifi、蓝⽛、5G总结:内部MAC + 外部PHY + RJ45 座(内置⽹络变压器)就组成了⼀个完整的嵌⼊式⽹络接⼝硬件。
内部的 MAC 外设会通过 MII 或者 RMII 接⼝来连接外部的 PHY 芯⽚, MII/RMII 接⼝⽤来传输⽹络数据。
另外主控需要配置或读取 PHY 芯⽚,也就是读写 PHY 的内部寄存器,所以还需要⼀个控制接⼝,叫做 MIDO, MDIO 很类似 IIC,也是两根线,⼀根数据线叫做 MDIO,⼀根时钟线叫做 MDC。
(1)数据链路层 MAC 是 Media Access Control 的缩写,即媒体访问控制⼦层协议。
该协议位于 OSI 七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。
在发送数据的时候,MAC 协议可以事先判断是否可以发送数据,如果可以发送将给数据加上⼀些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC 协议⾸先判断输⼊的信息并是否发⽣传输错误,如果没有错误,则去掉控制信息发送⾄ LLC 层。
以太⽹ MAC 由 IEEE-802.3 以太⽹标准定义。
(2)物理层 PHY 是物理接⼝收发器,它实现物理层。
包括 MII/GMII(介质独⽴接⼝)⼦层、PCS(物理编码⼦层)、PMA(物理介质附加)⼦层、 PMD(物理介质相关)⼦层、MDI ⼦层。
(3)MII 全称是 Media Independent Interface 即媒体独⽴接⼝ , “媒体独⽴”表明在不对 MAC 硬件重新设计或替换的情况下,任何类型的 PHY 设备都可以正常⼯作。
包括分别⽤于发送器和接收器的两条独⽴信道。
每条信道都有⾃⼰的数据、时钟和控制信号。
MII 数据接⼝总共需要 16 个信号,包括TX_ER,TXD<3:0>,TX_EN,TX_CLK,COL,RXD,RX_EX,RX_CLK,CRS,RX_DV 等。
linux wifi 免驱原理
linux wifi 免驱原理
Linux 支持的Wi-Fi 网卡分为两种类型:一种是基于开源驱动的无线网卡,另一种是需要额外安装专有驱动的网卡。
这里主要介绍基于开源驱动的无线网卡的免驱原理。
开源驱动是指在Linux 内核中已经包含的无线网卡驱动程序,这些驱动程序由Linux 社区开发并与内核一同发布。
这些驱动程序基于开放的标准和协议开发,其代码也是公开的,可以免费使用和修改。
免驱原理主要来源于Linux 内核的驱动支持。
当一个无线网卡的硬件规格和特性与Linux 内核中已有的驱动程序兼容时,Linux 内核会自动加载适当的驱动程序,使网卡可以正常工作,无需额外安装特定的驱动程序。
为了实现免驱,Linux 内核开发者会持续更新与新增支持的无线网卡驱动。
这意味着较新的Linux 内核版本通常支持更多的无线网卡型号,并在内核更新中纳入新的驱动。
此外,一些厂家也会积极参与无线网卡驱动的开发,向Linux 社区提供其无线网卡的技术文档和规格说明,以便Linux 内核能够提供更好的支持。
总结起来,Linux 支持的开源驱动可以让符合兼容性要求的无线网卡在Linux 系统中免驱动使用。
这种免驱原理得益于开放的标准和协议,以及Linux 开发者和厂家的积极参与,使得Linux 在Wi-Fi 网卡兼容性方面取得了不错的进展。
LINUX内核网卡驱动解析
目录
• •
[隐藏]1 1 Linux 网络系统分层结构 2 2 数据包结构
• • • •
2.1 msghdr 结构 2.2 socket 结构 2.3 sk_buff 结构及管理
unsigned int
len,//实际的数据长度 data_len,//数据长度 mac_len,//链路层头的长度 csum;//校验结构
struct icmphdr struct igmphdr struct iphdr struct ipv6hdr unsigned char } h;
*icmph; *igmph; *ipiph; *ipv6h; *raw; //
union { struct iphdr struct ipv6hdr struct arphdr unsigned char } nh; *iph; //IP 层头 *ipv6h; *arph; *raw;
int int struct socket struct sock struct scm_cookie struct msghdr struct iovec struct kiocb };
flags; size; *sock; *sk; *scm; *msg, async_msg; async_iov; *kiocb;
Linux 系统调用建立新的套接字时,需要传递套接字的地址族标识符、 套接字类型以及协议。 内核套接字分配新的 socket 数据结构。Socket 数据结构实际是 VFS 索引节点数据结构的一部分,分配新的 socket 数据结构实际就是分配新的 VFS 索引节点。socket 在文件系统位置如下图所示: