web-dev-qa-db-ja.com

VMware用の最小限のカーネルを構築するときに `/ dev / sda`がありません

他のプラットフォームの中でも、VMwareで実行したいbuildrootを使用して最小限のLinuxカーネルを構築しようとしています。ただし、カーネルを起動すると、ハードドライブが認識されません(つまり、/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
Kotte

私は自分の問題を醜い方法で解決しました。より良い解決策があると思うので、これを正しいものとしてマークするのを待ちます。

さまざまな解決策を試した後、とりわけ/sys/readlink /sys/block/sda/device/driverなど)から情報を取得しようとしました。しかし、それが何らかのSCSIドライバーであるという情報しか見つけられなかったため、役に立ちませんでした。最後に、デスクトップカーネル構成を使用し、/dev/sd*が表示されるまですべてのモジュールをロードしました。私は最初、scsi_debugをロードすることでだまされました。これは/dev/sdaも示します。必要なモジュールはmptspiで、これはLinuxカーネルの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 ..を使用してソリューションを設定します。

1
Kotte

たぶんあなたのディスクはLVMパーティションにあります。チェック:/ dev/mapper/lvm。また、dfまたはlsblkコマンドを使用して、ディスクのパスを見つけることができます。 mountコマンドも役立ちます。

0
Ali Ghasempour