OpenWRT驱动启动解析:ath9k网卡初始化

需积分: 2 6 下载量 166 浏览量 更新于2024-06-28 收藏 572KB DOCX 举报
"这篇文档主要总结了OpenWRT系统中关于init.d启动脚本的知识,同时涉及到了OpenWRT驱动程序的启动流程,特别是ath9k无线网卡驱动的初始化过程。" 在OpenWRT系统中,init.d是一个用于管理系统服务启动、停止和管理的目录,其中包含了各种服务的启动脚本。这些脚本通常遵循一定的规范,如SysVinit服务脚本的约定,用于控制服务的启动顺序、依赖关系以及运行时的行为。在OpenWRT上,你可以通过`/etc/init.d/`目录下的脚本来控制网络、路由、DNS等服务的启动和停止。 具体到驱动程序的启动过程,以ath9k无线网卡驱动为例: 1. `ath_pci_init()`:这是驱动程序的主入口点,位于`linux-3.3.8/drivers/net/wireless/ath/ath9k/pci.c`文件中。它通过调用`pci_register_driver()`函数将`ath_pci_driver`结构体注册到PCI总线驱动,使得系统能够识别并处理匹配的PCI设备。 2. `ath_pci_driver`结构体:包含了驱动的名称、ID表、探测函数`ath_pci_probe()`、移除函数`ath_pci_remove()`以及电源管理操作。当系统检测到匹配的PCI设备时,会通过`probe`指针调用`ath_pci_probe()`函数。 3. `ath_pci_probe()`:这个函数负责实际的设备初始化工作。在`ath_pci_probe()`中,会调用`ieee80211_alloc_hw()`分配一个用于IEEE 802.11硬件的结构体,然后设置设备的相关信息,如私有数据结构`sc`,并将设备数据存储在`pci_set_drvdata()`中。这样就完成了硬件初始化的基本步骤。 OpenWRT的init.d启动脚本与驱动程序初始化的关系在于,当系统启动时,init.d中的脚本会按照特定顺序启动网络服务,包括无线网络服务。而ath9k驱动的初始化则是在内核加载阶段完成的,确保了硬件能够正常工作,以便在用户空间的服务启动后,无线网络可以被正确配置和使用。 在OpenWRT环境中,如果需要自定义服务的启动行为或者添加新的服务,可以编写自己的init.d脚本,并将其放置在相应的目录下。然后通过`/etc/init.d/service_name start`命令启动服务,或使用`/etc/rc.d/SySvinit`的规则来控制服务的启动顺序和依赖。 OpenWRT的init.d启动脚本管理和控制了系统的服务,而驱动程序的初始化则是内核层面的工作,两者共同确保了OpenWRT设备的正常运行。对于开发者而言,理解这两部分知识有助于进行设备的定制和优化。