一、Qemu
Linux 内核调试 二:ubuntu20.04安装qemu
Linux 内核调试 三:《QEMU ARM guest support》翻译
Linux 内核调试 四:qemu-system-arm功能选项整理
Linux 内核调试 六:qemu-system-arm仿真vexpress-a9
Linux 内核调试 八:qemu使用initramfs文件系统
$ sudo ip tuntap add dev tap0 mode tap $ sudo ip link set dev tap0 up $ sudo ip address add dev tap0 192.168.2.128/24 $ ifconfig eth0 192.168.2.120 netmask 255.255.255.0 # tap 模式 ./qemu-system-arm -M vexpress-a9 -m 512M -kernel zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb vexpress-v2p-ca9.dtb -nographic -net nic -net tap,ifname=tap0,script=no,downscript=no # user 模式 qemu-system-x86_64 -M pc -kernel bzImage -drive file=rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda console=tty1 console=ttyS0" -net nic,model=virtio -net user -nographic
二、Gdb
# 1、服务器B上启动 gdbserver # 执行命令:gdbserver + A_IP:1234(端口号) + 执行程序名字 + 执行程序参数,如 gdbserver 1234 test # 其中1234为开启的端口,test为要调试的程序(注意服务器防火墙问题) # 3、本机调试 # a、在本机A上执行: gdb test # b、进入gdb后输入: target remote 服务器B的IP:端口 #c、连接成功后,在A电脑上就可以正常调试了
vscode 调试
- launch.json
.vscode 下 launch.json ,配置调试信息。
// launch.json { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "gdb debug", "type": "cppdbg", "request": "launch", // "miDebuggerServerAddress": "172.18.25.30:1234", "miDebuggerServerAddress": "127.0.0.1:1234", "program": "${workspaceRoot}/vmlinux", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "logging": { "engineLogging": false }, "MIMode": "gdb" } ] }
三、RootFs
# 制作镜像文件: # 使用dd命令建立一个16MB的文件系统映像ramdisk dd if=/dev/zero of=ramdisk bs=1Mcount=16 # 因为ramdisk只是一个块设备,只有将其格式化为特定的文件系统后才能使用,我们将其格式化ext2格式 mke2fs -F -v -m0 ramdisk # 挂载ramdisk,并拷贝制作好的根文件系统到mnt目录下 sudo mount -o loop ramdisk mnt/
四、交叉编译
Gcc
☆ Linux:gcc交叉编译时设置了“–sysroot“会产生哪些影响
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(SYSROOT_PATH /home/admin/tx2-rootfs) set(CMAKE_SYSROOT "${SYSROOT_PATH}") message(STATUS "Using sysroot path as ${SYSROOT_PATH}") set(CMAKE_STAGING_PREFIX /home/admin/workspace/staging/) set(CMAKE_INSTALL_PREFIX /usr/local) set(TOOLCHAIN_PATH /usr/local/lib/linaro-7.3.1) set(TOOLCHAIN_HOST ${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu) set(TOOLCHAIN_CC "${TOOLCHAIN_HOST}-gcc") set(TOOLCHAIN_CXX "${TOOLCHAIN_HOST}-g++") set(CMAKE_C_COMPILER ${TOOLCHAIN_CC}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_CXX}) add_link_options("LINKER:-rpath-link,/home/admin/tx2-rootfs/lib/aarch64-linux-gnu:/home/admin/tx2-rootfs/usr/lib/aarch64-linux-gnu") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)