vmware qemu arm32运行环境

  • 编译内核
##### arm32
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- multi_v7_defconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig

// 开启 ebpf内核选项支持

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage modules dtbs -j$(nproc)

##### arm64
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules

-开启ebpf

General setup  --->
    [*] Enable bpf() system call
    [*]   Permanently enable BPF JIT and remove BPF interpreter

General architecture-dependent options  --->
    [*] Kprobes

Kernel hacking  --->
    [*] Tracers  --->
        [*]   Enable kprobes-based dynamic events (NEW)
        [*]   Enable uprobes-based dynamic events (NEW)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
Settings  --->
   Build Options  --->
       [ ] Build static binary (no shared libs)
       
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

  • 制作rootfs
mkdir rootfs
cp /.../busybox-1.29.3/_install/* rootfs/ -rfd
cp /usr/arm-linux-gnueabi/lib/* rootfs/lib/ -rfp

mkdir rootfs/dev
cd rootfs/dev
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4
sudo mknod -m 666 console c 5 1
sudo mknod -m 666 null c 1 3

mkdir -p rootfs/etc/init.d
// 写入如下文件
cat etc/profile
#!/bin/sh
export HOSTNAME=kami
export USER=root
export HOME=/home
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

cat etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

cat etc/fstab
#device  mount-point    type     options   dump   fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0


cat etc/init.d/rcS
mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

  • 运行
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3

sudo umount /mnt
sudo mount -t ext3 rootfs.ext3 /mnt -o loop
sudo cp -rf rootfs/* /mnt/

mkdir qemu
cp -rf 内核源码目录下/arch/arm/boot/zImage ./qemu
// 不同的内核版本这个文件位置不一样
cp -rf 内核源码目录下/arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb ./qemu
cp rootfs.ext3 ./qemu

cd qemu
qemu-system-arm \
    -M vexpress-a9 \
    -m 512M \
    -kernel ./zImage \
    -dtb ./vexpress-v2p-ca9.dtb \
    -nographic \
    -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
    -sd rootfs.ext3
  • 更改rootfs
anlan@anlan:~/Desktop/perf$ dd if=/dev/zero of=./rootfs.ext4 bs=1M count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.157908 s, 212 MB/s
anlan@anlan:~/Desktop/perf$ mkfs.ext4 rootfs.ext4 
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done                            
Creating filesystem with 8192 4k blocks and 8192 inodes

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

anlan@anlan:~/Desktop/perf$ mkdir fs_ext4
anlan@anlan:~/Desktop/perf$ sudo mount -o loop rootfs.ext4 fs_ext4
anlan@anlan:~/Desktop/perf$ sudo cp -rf ./rootfs/* fs_ext4/
anlan@anlan:~/Desktop/perf$ sudo umount fs_ext4 
anlan@anlan:~/Desktop/perf$ gzip --best -c rootfs.ext4  > ./qemu/rootfs.ext4.img.gz

cd ./qemu
qemu-system-arm \
    -M vexpress-a9 \
    -m 512M \
    -kernel ./zImage \
    -dtb ./vexpress-v2p-ca9.dtb \
    -nographic \
    -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
    -initrd ./rootfs.ext4.img.gz
  • 配置网络
qemu-system-arm \
    -M vexpress-a9 \
    -m 512M \
    -kernel ./zImage \
    -dtb ./vexpress-v2p-ca9.dtb \
    -nographic \
    -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
    -initrd ./rootfs.ext4.img.gz \
    -device virtio-net-device,netdev=net0 \
    -netdev user,id=net0

ip addr add 10.0.2.15/24 dev eth0  # 设置IP和子网掩码
ip link set eth0 up                 # 启用网卡
ip route add default via 10.0.2.2   # 设置默认网关(QEMU user模式网关通常是10.0.2.2)
  • 配置nfs
宿主机
// 安装 nfs server
sudo apt-get install nfs-kernel-server
// 配置要映射的目录
# /etc/exports: the access control list for filesystems which may be exported
#       to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/anlan/Desktop/nfs_share *(rw,sync,no_root_squash,no_subtree_check,insecure)
// 重启服务
sudo service nfs-kernel-server restart
sudo exportfs

客户机配置好网络之后
mount -t nfs -o nolock 192.168.1.17:/home/anlan/Desktop/nfs_share /mnt

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容