- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. 网络设备初始化网络设备初始化
网络设备初始化网络设备初始化
现代操作系统的灵活性使得初始化过程变得复杂了。首先,设备驱动既可以做为内核模
块加载,也可以是内核的一个静态组件。其次,设备可以在启动时识别,也可以在运行
时加载或者卸载。运行时加载的设备叫做热插拔设备,包括USB ,PCI ,CardBS 和IEEE
1394 (苹果机里面叫做火线)等。我们将会看到热插拔是如何影响内核和用户空间程序
的行为。
在本章中,我们将会看到:
一段网络系统初始化的代码
一个网络设备的初始化
网络设备如何使用中断,以及中断处理程序是如何被分配和释放的。我们还将
看到设备是如何共享中断号的。
用户如何给以模块方式加载的驱动程序提供参数
设备初始化和配置时,用户空间和内核的交互。我们将看到内核如何运行一个
用户空间的辅助程序来给网络设备加载正确的驱动或者生效用户配置。我们还
特别关注与热插拔有关的特性。
虚设备与真实设备有什么区别,以及它们如何与内核交互,如何配置的。
1.1. 系统初始化概述系统初始化概述
系统初始化概述系统初始化概述
我们需要了解内核中网络相关的子系统 (包括网络设备)在什么地方,如何初始化的。
当然,本书的重点是网络子系统的初始化,我不会描述一般的设备和一般的内核服务的
(比如,内存管理)初始化。如果需要了解更多这方面的信息,我推荐阅读Linux Device
Drivers 和Understanding the Linux Kernel 这两本书。
图5-1 简要描述了内核系统在哪里,以何种顺序初始化的 (参见init/main.c )
图5-1 内核初始化
内核启动时,执行start_kernel 函数,它会初始化很多子系统,图5-1 中显示了一部分。
在 start_kernel 结束时,启动init 内核线程,它会完成剩下的初始化动作。与本章内容
相关的大部分初始化动作发生在do_basic_setup 函数里面。
在不同的初始化动作里面,我们主要对以下三个感兴趣:
启动参数
有两个对parse_args 的调用,一个是直接调用,一个是通过parse_early_param 间接
调用,它用于处理系统启动时,启动程序,比如LILO 或GRUB ,传递给内核的参
数。我们将在 “启动时的内核参数”一节中看到这些参数是如何被处理的。
中断和定时器
硬件中断和软件中断分别由init_IRQ 和softirq_init 初始化。中断会在第9 章中描述。
在本章中,我们只关注设备驱动如何注册中断处理程序,以及中断处理程序如何管
理内存。定时器在内核启动过程的前期就被初始化了,这样,后续的任务就可以使
用它。
初始化例程
内核子系统和静态编译的设备驱动都在do_initcalls 中初始化。free_init_mem 会释
放这些不再使用的代码所占用的内存。实现这个功能需要智能例程标记 (
smart
routine tagging )的技术。在第7 章中有更详细的描述。
run_init_process 决定了系统中运行的第一个进程,它是所有其他进程的父进程;它的pid
是 1,并且只有在系统停止时它才停止。通常run_init_process 执行的程序是init ,它是
SysVinit 包的一部分。当然,系统管理员可以通过init=系统系统参数来设定执行其他程
序。如果没有这个参数,内核执行缺省目录下的 init ,如果没有找到 init 程序,内核就
会崩溃。用户同样可以在系统启动时设定传递给init 的参数(参见“启动时的内核参数”
一节)。
1.2. 设备注册和初始化设备注册和初始化
设备注册和初始化设备注册和初始
原创力文档


文档评论(0)