欢迎光临散文网 会员登陆 & 注册

详细记录Linux内核块设备总结

2022-08-16 14:25 作者:补给站Linux内核  | 我要投稿

前言

在分析块设备驱动之前,整体规划如下:

本章先重点介绍使用qemu使Linux内核和根文件系统挂载块设备的操作执行过程。 为什么要介绍在qemu中使Linux内核和根文件系统挂载块设备?我们为什么要操作这些繁琐的步骤? 下面着重回答一下为什么要使用QEMU中挂载块设备,是因为我们在上一章《QEMU+GDB调试Linux内核总结(全)》中介绍了要使用gdb调试linux内核代码必须使用qemu启动,并且设置调试模式才能够启动。其实如果有其他的方式和方案也可以,只不过个人觉得这个操作比较方便并且实用性高。而且在gdb调试中随时可以终止调试设置断点,这个在应用层是没有的。在应用层如果终止调试的话直接程序退出了,但是内核中是不会的。 为什么要操作这些繁琐的步骤呢?上面一句话已经回答了这个问题。 为了防止损伤硬盘,我们会以虚拟硬盘的形式挂载在磁盘中,下面第一章中我们会先介绍虚拟磁盘的制作和设置。


【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)     

虚拟磁盘的制作

虚拟磁盘,顾名思义这个磁盘是虚拟的,也可以在磁盘里面写入东西而不会丢失,除非虚拟磁盘损坏(损坏的方式有很多:重新格式化,挂载之后关机之前忘了卸载等都有可能损坏虚拟磁盘,但是好在都是虚拟磁盘的磁盘内容损坏,不会伤及物理磁盘)。虚拟磁盘也是云计算的一个重要的基础,所谓云计算也就是远程虚拟机的集群化部署。 话题扯的有点远了,言归正传,制作虚拟磁盘命令如下:

下面是我执行如上命令的时候的执行记录:

以下是虚拟机启动磁盘后的测试,也就是执行完qemu-system-x86_64 -kernel ./boot/bzImage -initrd ./initramfs.img -hdc ./disk.img -append "console=ttyS0" -nographic之后的执行记录:

OK,经过上述步骤,证明物理磁盘挂载成功到我们编译好的内核版本,下一章进行gdb调试。

qemu启动磁盘+GDB调试内核代码。 上一章中我们已经学会了怎么在内核镜像使用qemu加磁盘并且成功挂载上磁盘的操作。本章中我们学习怎么使用此调试内核代码。 如同内核调试步骤一样,正常的启动虚拟机除了加上-hdc ./disk.img我们的启动命令之外,我们还要添加-S -s的调试步骤。命令如下:

gdb vmlinux


这时候我们看到gdb阻塞到continue回显步骤了,是因为我们打了一个断点,断点函数名称为blkdev_open。 我们只需要在启动的虚拟机里面执行如下:

执行如上命令后,gdb效果如下,可以看到,我们可以正常的查看代码,并且分析代码了。而且分析代码跟我们上述的cat命令有关,否则gdb调试还处于阻塞状态。



好了,本章就先介绍如何使用qemu挂载虚拟硬盘,并且使用gdb调试和块设备相关的代码。下一章重点介绍块设备驱动代码框架。



详细记录Linux内核块设备总结的评论 (共 条)

分享到微博请遵守国家法律