2.2寻找磁盘控制器
转载请注明出处 [By SELinux+]
本节为来实验效果,我们将进行稍微的去掉某个驱动,以达到设备无法运行的测试效果。
所有的块设备都显示在/sys/block和/sys/class/block中
[root@qfong.com ~]# tree -d /sys/block/ |egrep "hd|sd|sr" ├── sda -> ../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda └── sr0 -> ../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sr0
和之前的网络设备一样,我们这里寻找sr设备,该设备是一个cdrom,本节我们要卸载cdrom驱动。
[root@qfong.com ~]# ll /sys/block/sr0/ total 0 -r--r--r--. 1 root root 4096 Oct 9 02:14 alignment_offset lrwxrwxrwx. 1 root root 0 Oct 9 02:14 bdi -> ../../../../../../../virtual/bdi/11:0 -r--r--r--. 1 root root 4096 Oct 9 02:14 capability -r--r--r--. 1 root root 4096 Oct 8 20:46 dev lrwxrwxrwx. 1 root root 0 Oct 9 02:14 device -> ../../../2:0:0:0 -r--r--r--. 1 root root 4096 Oct 9 02:14 discard_alignment -r--r--r--. 1 root root 4096 Oct 9 02:14 events -r--r--r--. 1 root root 4096 Oct 9 02:14 events_async -rw-r--r--. 1 root root 4096 Oct 8 20:45 events_poll_msecs -r--r--r--. 1 root root 4096 Oct 9 02:14 ext_range drwxr-xr-x. 2 root root 0 Oct 8 20:46 holders -r--r--r--. 1 root root 4096 Oct 9 02:14 inflight drwxr-xr-x. 2 root root 0 Oct 9 01:07 power drwxr-xr-x. 3 root root 0 Oct 8 20:46 queue -r--r--r--. 1 root root 4096 Oct 8 20:46 range -r--r--r--. 1 root root 4096 Oct 8 20:46 removable -r--r--r--. 1 root root 4096 Oct 9 02:14 ro -r--r--r--. 1 root root 4096 Oct 9 02:14 size drwxr-xr-x. 2 root root 0 Oct 8 20:46 slaves -r--r--r--. 1 root root 4096 Oct 9 02:14 stat lrwxrwxrwx. 1 root root 0 Oct 8 20:46 subsystem -> ../../../../../../../../class/block drwxr-xr-x. 2 root root 0 Oct 9 01:07 trace -rw-r--r--. 1 root root 4096 Oct 8 20:46 uevent
我们现在沿着sysfs中的设备进行寻找这个设备驱动
[root@qfong.com sr0]#ll /sys/devices/pci0000\:00/0000\:00\:1f.2/host2/target2\:0\:0/2\:0\:0\:0/ total 0 drwxr-xr-x. 3 root root 0 Oct 8 20:46 block drwxr-xr-x. 3 root root 0 Oct 8 20:46 bsg --w-------. 1 root root 4096 Oct 9 02:17 delete -r--r--r--. 1 root root 4096 Oct 9 02:17 device_blocked -rw-r--r--. 1 root root 4096 Oct 9 02:17 dh_state lrwxrwxrwx. 1 root root 0 Oct 9 02:17 driver -> ../../../../../../bus/scsi/drivers/sr -r--r--r--. 1 root root 4096 Oct 8 20:46 evt_media_change lrwxrwxrwx. 1 root root 0 Oct 9 02:17 generic -> scsi_generic/sg1 -r--r--r--. 1 root root 4096 Oct 9 02:17 iocounterbits -r--r--r--. 1 root root 4096 Oct 9 02:17 iodone_cnt -r--r--r--. 1 root root 4096 Oct 9 02:17 ioerr_cnt -r--r--r--. 1 root root 4096 Oct 9 02:17 iorequest_cnt -r--r--r--. 1 root root 4096 Oct 9 01:07 modalias -r--r--r--. 1 root root 4096 Oct 8 20:46 model drwxr-xr-x. 2 root root 0 Oct 9 01:07 power -rw-r--r--. 1 root root 4096 Oct 9 02:17 queue_depth -rw-r--r--. 1 root root 4096 Oct 9 02:17 queue_ramp_up_period -r--r--r--. 1 root root 4096 Oct 9 02:17 queue_type --w-------. 1 root root 4096 Oct 9 02:17 rescan -r--r--r--. 1 root root 4096 Oct 9 02:17 rev drwxr-xr-x. 3 root root 0 Oct 8 20:46 scsi_device drwxr-xr-x. 3 root root 0 Oct 8 20:46 scsi_generic -r--r--r--. 1 root root 4096 Oct 8 20:46 scsi_level -rw-r--r--. 1 root root 4096 Oct 9 02:17 state lrwxrwxrwx. 1 root root 0 Oct 8 20:46 subsystem -> ../../../../../../bus/scsi -rw-r--r--. 1 root root 4096 Oct 9 02:17 sw_activity -rw-r--r--. 1 root root 4096 Oct 9 02:17 timeout -r--r--r--. 1 root root 4096 Oct 8 20:46 type -rw-r--r--. 1 root root 4096 Oct 8 20:46 uevent -rw-r--r--. 1 root root 4096 Oct 9 02:17 unload_heads -r--r--r--. 1 root root 4096 Oct 8 20:46 vendor
我们看到这个scsi磁盘控制器控制着该设备,因此scsi设备是我们必须要加到我们内核配置里面的,因为scsi控制着scsi总线上的所有磁盘设备。我们主要目标是找到控制该设备的硬件驱动
接着我们继续寻找硬件的驱动
在sysfs链接中返回上一级目录,继续寻找,试着找出控制硬件的驱动
[root@qfong.com 2:0:0:0]# cd .. [root@qfong.com target2:0:0]# ll total 0 drwxr-xr-x. 7 root root 0 Oct 8 20:46 2:0:0:0 drwxr-xr-x. 2 root root 0 Oct 9 01:07 power lrwxrwxrwx. 1 root root 0 Oct 8 20:46 subsystem -> ../../../../../bus/scsi -rw-r--r--. 1 root root 4096 Oct 8 20:46 uevent
该目录下没有driver的链接,我们继续返回上一级目录
[root@qfong.com target2:0:0]# cd .. [root@qfong.com host2]# ll total 0 drwxr-xr-x. 2 root root 0 Oct 9 01:07 power drwxr-xr-x. 3 root root 0 Oct 8 20:46 scsi_host lrwxrwxrwx. 1 root root 0 Oct 8 20:46 subsystem -> ../../../../bus/scsi drwxr-xr-x. 4 root root 0 Oct 8 20:46 target2:0:0 -rw-r--r--. 1 root root 4096 Oct 8 20:46 uevent
该目录下仍没有driver的链接,我们继续返回上一级目录
[root@qfong.com host2]# cd .. [root@qfong.com 0000:00:1f.2]# ll total 0 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata1 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata2 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata3 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata4 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata5 drwxr-xr-x. 5 root root 0 Oct 8 20:46 ata6 -rw-r--r--. 1 root root 4096 Oct 9 04:35 broken_parity_status -r--r--r--. 1 root root 4096 Oct 8 20:46 class -rw-r--r--. 1 root root 256 Oct 8 20:46 config -r--r--r--. 1 root root 4096 Oct 9 04:35 consistent_dma_mask_bits -r--r--r--. 1 root root 4096 Oct 8 20:46 device -r--r--r--. 1 root root 4096 Oct 9 04:35 dma_mask_bits lrwxrwxrwx. 1 root root 0 Oct 8 20:46 driver -> ../../../bus/pci/drivers/ahci -rw-------. 1 root root 4096 Oct 9 04:35 enable lrwxrwxrwx. 1 root root 0 Oct 9 04:35 firmware_node -> ../../LNXSYSTM:00/device:00/PNP0A03:00/device:1f
该目录下我们看到了为的驱动程序了。该驱动为 driver -> ../../../bus/pci/drivers/ahci
achi便是我们要寻找的驱动,但是achi驱动是inter芯片组的驱动,对我们来说这个驱动不是我们真正想要的,我们要分析我们的设备,cdrom是在scsi设备上的,我们要找到scsi的接口。接下来,我们继续寻找最终的驱动
[root@qfong.com linux-2.6.38.x86_64]# find -type f -name Makefile |xargs grep "ahci" ./drivers/ata/Makefile:obj-$(CONFIG_SATA_AHCI)+= ahci.o libahci.o ./drivers/ata/Makefile:obj-$(CONFIG_SATA_ACARD_AHCI)+= acard-ahci.o libahci.o ./drivers/ata/Makefile:obj-$(CONFIG_SATA_AHCI_PLATFORM)+= ahci_platform.o libahci.o
我们回到上一层driver -> ../../../../../../bus/scsi/drivers/sr
我们看到我们的驱动指向的是sr
[root@qfong.com linux-2.6.38.x86_64]# find -type f -name "Makefile" |xargs grep "sr" |grep "CONFIG_" |grep "scsi" ./drivers/scsi/Makefile:obj-$(CONFIG_SCSI_SRP_ATTRS)+= scsi_transport_srp.o ./drivers/scsi/Makefile:obj-$(CONFIG_SCSI_ARCMSR)+= arcmsr/ ./drivers/scsi/Makefile:obj-$(CONFIG_SCSI_SRP)+= libsrp.o ./drivers/scsi/Makefile:obj-$(CONFIG_BLK_DEV_SR)+= sr_mod.o ./drivers/scsi/arcmsr/Makefile:obj-$(CONFIG_SCSI_ARCMSR):= arcmsr.o
我们猜想上图的sr_mod.o应该是我们所要寻找的驱动。
那么他指向的驱动为CONFIG_BLK_DEV_SR
如上图所示:我们看到来scsi CDROM 支持的选项。
当然了,寻找驱动很麻烦,我给大家准备了一个脚本,可以轻易的获得驱动。以上仅是对其分析的方法进行说明