仮想マシンでtftpを実行すると、ネットワークにアクセスできません。どの設定を追加する必要がありますか?

仮想マシンでtftpを実行すると、ネットワークにアクセスできません。どの設定を追加する必要がありますか?

私はtftpが動作できる最小限のカーネルを構築しようとしています。
私はbusyboxをinitramfsとして使用しており、arm64仮想マシンでカーネルを実行します。ファイルをインポートするコマンドは次のとおりですtftp -g -r axpu_ldd_kc.ko my_ip_addr(もちろん、私はtftpサーバーが動作しています)。ただし、応答は次のとおりです。tftp
:sendto:Networkは不可能なので、
カーネル構成(linux-5.10.0-rc5)にいくつかのネットワークエントリを追加しましたが、まだ機能しません。
tftpを動作させるために追加する必要があるものがわかりません。以下のdefconfigで何が欠けているのか教えてください。 (qemu 仮想マシンで e1000 を使用)

# CONFIG_SWAP is not set
# CONFIG_CROSS_MEMORY_ATTACH is not set
CONFIG_PREEMPT=y
# CONFIG_CPU_ISOLATION is not set
CONFIG_LOG_BUF_SHIFT=12
CONFIG_LOG_CPU_MAX_BUF_SHIFT=10
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=10
CONFIG_USER_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="../../../../ab21sim/ab21tsim/busybox-1.32.1/initramfs.cpio.gz"
# CONFIG_RD_BZIP2 is not set
# CONFIG_RD_LZMA is not set
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
# CONFIG_RD_LZ4 is not set
# CONFIG_RD_ZSTD is not set
CONFIG_PERF_EVENTS=y
CONFIG_SLAB=y
CONFIG_NR_CPUS=2
# CONFIG_RODATA_FULL_DEFAULT_ENABLED is not set
# CONFIG_ARM64_TAGGED_ADDR_ABI is not set
# CONFIG_ARM64_UAO is not set
# CONFIG_ARM64_RAS_EXTN is not set
# CONFIG_ARM64_CNP is not set
# CONFIG_ARM64_PTR_AUTH is not set
# CONFIG_ARM64_AMU_EXTN is not set
# CONFIG_ARM64_TLB_RANGE is not set
# CONFIG_ARM64_BTI is not set
# CONFIG_ARM64_E0PD is not set
# CONFIG_ARCH_RANDOM is not set
# CONFIG_ARM64_SVE is not set
# CONFIG_EFI is not set
# CONFIG_SECCOMP is not set
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_MQ_IOSCHED_DEADLINE is not set
# CONFIG_MQ_IOSCHED_KYBER is not set
CONFIG_BINFMT_MISC=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_COMPACTION is not set
CONFIG_NET=y
CONFIG_INET=y
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_NAT=y
CONFIG_DEVTMPFS=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=65536
CONFIG_NETDEVICES=y
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_SERIO_LIBPS2=y
CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
# CONFIG_HWMON is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set
# CONFIG_RTC_INTF_SYSFS is not set
# CONFIG_RTC_INTF_PROC is not set
# CONFIG_RTC_INTF_DEV is not set
CONFIG_RTC_DRV_M48T59=y
# CONFIG_VHOST_MENU is not set
# CONFIG_IOMMU_SUPPORT is not set
# CONFIG_NVMEM_SYSFS is not set
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY_USER is not set
CONFIG_AUTOFS4_FS=y
CONFIG_ISO9660_FS=y
CONFIG_PROC_KCORE=y
# CONFIG_MISC_FILESYSTEMS is not set
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity"
CONFIG_DEBUG_INFO=y
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y
# CONFIG_SCHED_DEBUG is not set
# CONFIG_RCU_TRACE is not set

ところで、qemuコマンドは次のようになります。

/home/ckim/ProjX/QEMU/qemu-6.2.0/build-baremetal/aarch64-softmmu/qemu-system-aarch64 -machine ab21q,gic-version=max,secure=off,virtualization=true -cpu max -kernel /home/ckim/ProjX/LinuxDevDrv/kernel-release-RD-INFRA-2020.11.30/arch/arm64/boot/Image -m 2048M -ngraphic -netdev ユーザー,id=net0,tftp=/opt/tftp -device e1000 ,netdev=net0 -machine iommu=smmuv3 --append "root=/dev/ram init=/init nokaslr Earlycon ip=dhcp Hugepages=16"

-netdev-device e1000オプションを使用すると、ネットワークバックエンドがqemuに実装され、user mode外部の世界と通信できます。仮想マシンのIPアドレスは10.0.2.15です。私は以前このユーザーネットワーキングモデルを何度も使用してきました。 (フルカーネルのデフォルト設定では、このtftpはうまく動作しますが、テストをすばやく実行するために、カーネルの画像サイズをほぼ36MBから約6MBに縮小したいと思います。)ここでqemuネットワークモードを確認してください。https://wiki.qemu.org/Documentation/Networking
追加:(dirktの要求に応じて)私のVMの内部にDHCPサーバーがあり(上記のネットワークガイドを参照)、私のVMには静的IPアドレスがあります。そして私のマスター。私は仮想マシンのDHCPクライアントが動作し、DHCPサーバーがqemuプログラムによって実行されると信じています。したがって、qemuプログラムは仮想マシンにネットワーク環境を提供します。仮想マシンにログインしてデバッグできます。 (しかし今日は別のことをしています)これがip addrコマンドレスポンスです。

/ # tftp -g -r axpu_ldd_kc.ko 129.254.32.30
tftp: sendto: Network is unreachable
/ # ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0

ADD2:(dirktのコメントに従って)
PCIとPCIE、e1000(Intel Ethernetカード)を追加しました。それがすべてであることを願っています。しかしそれは真実ではない。以下はシェルの結果です。

ifconfig: SIOCSIFADDR: No such device
route: SIOCADDRT: Network is unreachable
/bin/sh: can't access tty; job control turned off
/ # tftp -g -r axpu_ldd_kc.ko 129.254.32.30
tftp: sendto: Network is unreachable

ベストアンサー1

おすすめ記事