我正在尝试使用 buildroot 构建一个最小的 Linux 内核,我想在 VMware 和其他平台上运行它。但是,当我启动内核时,它无法识别硬盘驱动器(即 no /dev/sda
)。我想我已经启用了所有需要的驱动程序,但仍然没有。它可以在 Virtualbox 上运行,但不能在 VMware 上运行。
lspci | less
...
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev01)
...
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
...
我已经开始make x86_64_defconfig
并且我已经启用:
SCSI device support:
<M> SCSI disk support
<M> SCSI generic support
Serial ATA and Parallel ATA drivers (libata)
<M> AHCI SATA support
<M> Platform AHCI SATA support
<M> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support
<M> Generic ATA support
我有什么遗漏的吗?我可以找到典型桌面内核的配置文件并以此为基础进行配置吗?我还可以使用更多技巧来确定需要构建哪些模块吗?例如,我可以使用一些标识符在内核的源代码中进行搜索吗?
答案1
我以丑陋的方式解决了我的问题。我会等待将其标记为正确,因为我认为有更好的解决方案。
在尝试了各种解决方案之后,其中包括尝试从/sys/
(readlink /sys/block/sda/device/driver
等)获取信息。但我只找到信息说它是某种SCSI驱动程序,这对我没有帮助。最后我使用了我的桌面内核配置,并加载了所有模块直到/dev/sd*
出现。起初我被加载欺骗了scsi_debug
,它还呈现了一个/dev/sda
.我需要的模块是mptspi
,它是FUSION_SPI
在 Linux 内核中启用的。我在搜索源代码树后了解到这一点。这是我用来识别驱动程序的脚本:
for MODULE in $(find /lib/modules/$(uname -r) -name '*.ko' -exec basename '{}' .ko ';')
do
echo "Loading $MODULE"
modprobe -D $MODULE
modprobe $MODULE
ls /dev/sd* 2>&1
done
我跑的
./script | tee script.log
mdev
下次我可能会使用/ udev
...设置一些解决方案
答案2
也许您的磁盘位于LVM
分区上。 check : /dev/mapper/lvm 您也可以使用df
或lsblk
命令来查找磁盘的该路径。
mount
命令也会有帮助。