第四章 嵌入式开发介绍
了解什么是嵌入式开发、交叉编译
学习使用调试器GDB、模拟器QEMU和项目构造工具make
交叉编译
例如构建编译应用程序GCC和运行GCC程序的计算机系统分别成为构建系统和主机系统,最后运行GCC生成的可执行程序的计算机系统成为目标系统。
如下图所示:在一台X86的主机上运行GCC程序,并用riscv64-unknown-elf-gcc编译程序生成a.out,最后下载到另一台riscv64的主机上运行。
不过注意,交叉编译中提到的是计算机系统,在本项目中,我在X86的Ubuntu上写裸机程序,利用riscv64-unknown-elf-gcc编译,最后在模拟器qemu的system模式下运行,也是一种交叉编译。
调试器GDB
启动gdb调试程序时,gdb会fork一个子进程,子进程调用系统函数ptrace,并开始运行a.out,当遇到断点时,则返回父进程gdb
远程调试时,gdb运行在本地调试机,gdbsever运行在目标机,通过二者之间定义的数据格式进行通信。本项目中,目标机就是qemu模拟器,远程调试通过qemu -s启动gdbsever
GDB基本操作
模拟器 QEMU
学习Makefile