他のプラットフォームの中でも、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
足りないものはありますか?典型的なデスクトップカーネルの構成ファイルを見つけて、それに基づいて構成を行うことはできますか?どのモジュールを構築する必要があるかを理解するために使用できるトリックは他にありますか?たとえば、カーネルのソースコードを検索するために識別子を使用できますか?
私は自分の問題を醜い方法で解決しました。より良い解決策があると思うので、これを正しいものとしてマークするのを待ちます。
さまざまな解決策を試した後、とりわけ/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
..を使用してソリューションを設定します。
たぶんあなたのディスクはLVM
パーティションにあります。チェック:/ dev/mapper/lvm。また、df
またはlsblk
コマンドを使用して、ディスクのパスを見つけることができます。 mount
コマンドも役立ちます。