Linux内核开发:从块设备到调试与移植
1. 块设备简介
块设备的介绍主要围绕请求函数、相关结构和 ioctl 调用。Radimo 是一个简单的驱动,未展示块设备驱动如何处理真实硬件外设。实际硬件通常依赖中断控制数据流,在此情况下,请求函数无法立即表明请求是否成功完成,中断处理程序会在设备发出操作结果信号时处理。内核中有许多中断驱动的块设备驱动示例可供学习。
块设备用于承载文件系统,通常支持基于分区的访问。Linux 在 linux/genhd.h 中定义的 partition 和 gendisk 结构里提供了通用分区支持,其实现可在 drivers/block/gendisk.c 中找到,使用该支持的各种驱动也位于此处。为 Radimo 添加分区支持并非难事,这是熟悉通用磁盘子系统的不错练习。
多数内核中的块设备属于特定类别,如 SCSI、IDE 或 CD - ROM 驱动。Linux 为这些设备提供了特殊接口,应加以利用。内核中的现有示例以及 Documentation/ 或 Linux 文档项目中的文档是宝贵资源。
2. 调试
设备驱动和普通程序一样,几乎都存在 bug。内核级代码不会像普通程序那样出现段错误并生成核心转储文件,因此对设备驱动进行事后调试与常规调试大不相同。最佳方法是回到源代码,逐步排查。使用调试器很有价值,但要确保修复的是真正的 bug,而非掩盖问题。
2.1 Oops 追踪
掌握 Oops
超级会员免费看
订阅专栏 解锁全文
1076

被折叠的 条评论
为什么被折叠?



