快速业务通道

《Essential Linux Device Drivers》第2章(上)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-16
2 内核一瞥在我们开始步入Linux设备驱动的神秘世界之前,让我们先熟悉一些从驱动开发人员应该理解的基本的内核概念.我们将学习到内核定时器、同步机制以及内存分配方法,但是,先让我们从顶层视角开始探索,扫描一下内核发出的启动信息,并在感兴趣的地方设置停下来看一看.启动过程2.1显示了基于x86计算机Linux系统的启动顺序.第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUBLILOSYSLINUXbootloader,之后bootloader会加载压缩后的内核映像并将控制权传递给它.内核取得控制权后,会将自身解压缩并投入运转.2.1 基于x86的硬件上Linux的启动过程 载的常住内存的虚拟磁盘映像.在内核启动后,会将其挂载为初始根文件系统,这个初始根文件系统中存放着挂载实际根文件系统磁盘分区时所依赖的可动态连接的 模块.内核可运行于各种各样的存储控制器硬件平台上,把所有可能的磁盘驱动都直接放进基本的内核映像中并非一种灵活的方式.你所使用的系统的存储设备 的驱动被打包放入了initrd中,在内核启动后、实际的根文件系统被挂载之前,这些驱动才被加载.使用mkinitrd命令可以创建一个initrd映像.2.6内核提供了一种称为initramfs的新功能,它在几个方面较initrd更为优秀.后者模拟了一个磁盘(因而被称为initramdiskinitrd),会带来LinuxI/O子系统的开销(如缓冲),然后前者基本上如同一个被挂载的文件系统一样,由自身获取缓冲(因此被称作initramfs).不同于initrd,基于页缓冲建立的initramfs如同页缓冲一样会动态地变大和缩小,从而减少了其内存消耗.另外,initrd要求你的内核映像包含了initrd所使用的文件系统(例如,如果你的initrdEXT2文件系统,内核包含EXT2驱动),然而initramfs不需要文件系统支持.再者,initramfs只是页缓冲之上的一小层,因此它的代码量很小.用户可以将初始根文件系统打包为一个cpio压缩包[2],并通过initrd=命令行参数传递给内核.当然,也可以在内核配置过程中通过INITRAMFS_SOURCE选项直接编译进内核.对于后一种方式而言,用户可以提供cpio压缩包的文件名或者包含initramfs的目录树.在启动过程中,内核会将文件解压缩为一个initramfs根文件系统,如果它找到了/init,它就会执行该顶层的程序.这种获取初始根文件系统的方法对于嵌入式系统而言特别有用,在嵌入式系统中系统资源非常宝贵.使用 my_timer.function = timer_func; add_timer(&my_timer);}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号