VMwareや他のプラットフォームで実行したい最小のLinuxカーネルを構築するためにbuildrootを使用しようとしています。ただし、カーネルを起動すると、ハードドライブが認識されません(例: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
私が必要とするモジュールはLinuxカーネルでアクティブにmptspi
なりました。FUSION_SPI
ソースツリーを検索した結果がわかりました。ドライバを識別するために使用するスクリプトは次のとおりです。
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/lvmdf
またはlsblk
コマンドを使用してこのディスクパスを見つけることもできます。
mount
コマンドも役に立ちます。