qemu vexpres-a9
发布占位示例:
开发板环境搭建
1 | readelf -h exec_file 查看可执行文件的信息,可以查看它使用什么工具链编译的 |
如果在 QEMU 模拟器中,通常可以通过以下方式退出:
在 QEMU 窗口中,按下 Ctrl + A,然后松开并按 X,这将关闭 QEMU。
或者,您可以直接关闭模拟器窗口。
- 使用Qemu虚拟机的几种选择
- 利用Qemu来运行ARM虚拟机,你有2个选择:
- 简单方式:直接下载别人编译好的映像文件(包含了内核,根文件系统),直接执行即可。
- 缺点是:别人编译好的也许不适合你的需求,没法定制。
- 复杂方式:自己下载内核代码、根文件系统代码(例如:busybox),然后进行编译。
- 优点是:可以按照自己的实际需求,对内核、根文件系统机型裁剪。
- 在第2种复杂模式中,又可以有2个选择:
- ==2-1==. 内核代码、根文件系统代码全部自己手动编译,最后把这些编译结果手动组织在一个文件夹中,形成自己的根目录;
- ==2-2==. 利用 buildroot 整个框架,只需要手动进行配置(比如:交叉编译器在本机上的位置、输出路径、系统的裁剪),然后就可以一键编译出一个完整的系统,可以直接烧写到机器!
buildroot
- 直接使用buildroot编译就会全部配置好了.哦买噶!!!
1 | make configs/qemu_arm_vexpress_defconfig |
qt配置
- 启用C++
- 启用qt5
- 使用make编译如果报错clean并重新编译
- 可能会没有buildroot/output/host/bin/arm-buildroot-linux-gnueabihf-gcc这个工具包,应该是在arn官网下载的,到时候在查一下吧
buildroot/output/host/bin/arm-buildroot-linux-gnueabihf-gcc tmp.c -o tmp -I buildroot/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include -L buildroot/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib -lgpiod
manual build
编译内核
- 下载内核
1
2git https://github.com/torvalds/linux.git
指定版本的 https://www.kernel.org/ (相对内存占用小一点) - 编译内核镜像文件
- 编译zImage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20* 安装依赖模块
* sudo apt-get install flex
* sudo apt-get install bison
* sudo apt install gcc-arm-linux-gnueabi
* sudo apt install g++-arm-linux-gnueabi
* sudo apt install libncurses5-dev libncursesw5-dev
make source 下载资源离线编译
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi- (以32位来编译)
make vexpress_defconfig(vexpress_defconfig为开发板配置,每个支持的开发板都会有个默认配置文件)
编译成功的配置会存放在.config文件中
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig(这样设置是错误的并没有设置到指定参数)
* make zImage -j6(系统镜像)
* make modules
* make dtbs- 编译uImage
1
2
3
4
5
6
7export ARCH=arm // 说明是arm体系
export CROSS_COMPILE=arm-linux-gnueabi- // 使用的交叉编译器
export LOADADDR=0x60003000 // 设置uImage启动的地址 这个地址在linux内核 arch/arm/configs 中相应的开发板来查看<CONFIG_BOOTCOMMAND>
make vexpress_defconfig // 使用内核中的默认vexpress架构的配置
make modules // 编译内核外模块
make dtbs // 编译设备树
make uImage // 编译uImage
编译U-BOOT
1 | export ARCH=arm // 说明是arm体系 |
编译busybox
- busybox是Linux平台上的一个工具集。busybox最大的特点是把不同的工具代码以及公用代码都集成在一起,从而大大减少了可执行文件的体积。非常适合资源有限的嵌入式设备。
1 | 安装依赖 |
使用zImage运行qemu (镜像启动)
1 | #!/bin/bash |
- 现在对上面的文件系统构建步骤进行一下梳理:
- 创建arm-linux的必要文件夹
- 将busybox生成的命令以及etc配置文件放到arm-linux文件系统中去。这里有两个环境变量是需要在执行之前设置的。
- 将交叉编译环境放到arm-linux文件系统中去,这样最后运行Hello程序才能运行
- 创建必要的设备文件
- 通过dd、mkfs -t etx4命令制作文件系统。其中dd命令是一个很有用的命令。它可以用来进行设置分区、设置内存交换空间等操作
- 然后将dd出来的roofs.ext3挂载到/mnt文件夹下,并且把刚才rootfs中配置好的文件放到/mnt中去。也就是放在了roofs.ext3中。
- 最后取消roofs.ext3的挂载
- /etc/init.d/srC 这个文件夹是启动后会指定运行的文件,要创建.(没有会有提示但不会形成致命错误)
1 | run |
使用uImage运行qemu (手动uboot启动)
配置tftp
1 | 安装 |
1 | Loopback interface |
检查日志:
1 | sudo journalctl -xe |
重启网络服务:
1 | sudo systemctl restart networking |
u-boot/include/configs/vexpress_a9.h 在这个文件中可以修改内核的启动地址,设置自动ttp加载内核等命令
1 | #define CONFIG_EXTRA_ENV_SETTINGS \ |