- 编译内核
##### 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)
- 编译busybox
下载地址 https://busybox.net/downloads/
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