- 搭建glibc等底层库启动和初始化调试环境
- 在编译完成的环境使用 devtool modify glibc 会将glibc代码展开在
${yocto根目录}/build/workspace/glibc
2. 使用virtiofsd(qemu的配套工具)启动virtiofs,使qemu可以访问host的glibc代码目录
sudo virtiofsd --socket-path=/tmp/vhostqemu -o source=${yocto根目录}/build/workspace/glibc -o cache=none
3. 使用qemu启动虚拟机,并访问virtiofs
qemu-system-x86_64 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -drive file=${yocto根目录}/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.rootfs.ext4,if=virtio,format=raw -usb -device usb-tablet -usb -device usb-kbd -chardev socket,id=char0,path=/tmp/vhostqemu -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=glibc -object memory-backend-file,id=mem,size=1G,mem-path=/dev/shm,share=on -numa node,memdev=mem -cpu Skylake-Client -machine q35,i8042=off -smp 4 -m 1024 -vga std -serial mon:stdio -display sdl,show-cursor=on -gdb tcp::2345 -kernel ${yocto根目录}/build/tmp/deploy/images/qemux86-64/bzImage -append 'root=/dev/vda rw console=tty0 console=ttyS0,115200 ip=192.168.7.2::192.168.7.1:255.255.255.0::eth0:off:8.8.8.8 net.ifnames=0 oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1 swiotlb=0 nokaslr'
4. 虚拟机启动完成,进入虚拟机,挂载 virtiofs 到虚拟机内的目录
mkdir -p /mnt/glibc
mount -t virtiofs glibc /mnt/glibc
5. 在虚拟机内使用gdb调试glibc
使用gdb调试应用程序加载libc.so,(大部分程序会使用libc.so)
加载glibc所在的文件夹
6. 无法启动systemd,可以使用 Linux启动参数 init=/bin/bash 启动shell 来提供调试环境
发表回复