前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rt-thread 树莓派3b 64位在qemu上运行

rt-thread 树莓派3b 64位在qemu上运行

作者头像
bigmagic
发布2020-05-08 14:23:44
2K0
发布2020-05-08 14:23:44
举报
文章被收录于专栏:嵌入式iot

rt-thread 树莓派3b 64位在qemu上运行

  • 1.本文目的
  • 2.代码编译
    • 2.1 工具链的准备
    • 2.2 编译源代码
  • 3.qemu安装
    • 3.1 编译qemu
    • 3.2 运行raspi镜像
  • 4.启动调试
    • 4.1 建立连接
    • 4.2 调试技巧
  • 5.后续

1.本文目的

本文主要描述树莓派64位的编译及运行方式,并且通过在qemu上运行仿真体验一下rt-thread 的64位效果。对于手上没有树莓派但是又想体验一下树莓派64位的朋友来说非常方便。当在qemu上运行通过后,再下载到真实的树莓派3b的板子上运行,效果一致。通过这种方式可以方便调试程序。

准备条件:

Ubuntu16.04

下面的实验步骤在Ubuntu16.04上进行,尽量保证环境的一致性。

2.代码编译

2.1 工具链的准备

推荐采用gcc-arm-8.3-2019.03-x86_64-aarch64-elf进行源代码的编译,由于官方下载速度非常慢,所以我放到网盘上提供下载。

链接: https://pan.baidu.com/s/1ZAba3xbhad-BnimCo5VDGA

提取码: a6t5

解压到opt目录下。

2.2 编译源代码

在github上的rt-thread上进行下载

代码语言:javascript
复制
git clone git@github.com:RT-Thread/rt-thread.git

切换到rt-thread/bsp/raspberry-pi/raspi3-64目录,输入scons开始编译

最后生成kernel8.img文件就是可执行文件。

3.qemu安装

qemu环境可以在官方网站上下载。

下载完成后解压文件。

或者从github中clone代码

代码语言:javascript
复制
git clone git@github.com:qemu/qemu.git
git submodule update --init --recursive

3.1 编译qemu

代码语言:javascript
复制
./configure --help|less

这样可以看到目前所有支持的芯片架构类型.

代码语言:javascript
复制
Standard options:
  --help print this message
  --prefix=PREFIX install in PREFIX [/usr/local]
  --interp-prefix=PREFIX where to find shared libraries, etc.
                           use %M for cpu name [/usr/gnemul/qemu-%M]
  --target-list=LIST set target list (default: build everything)
                           Available targets: aarch64-softmmu alpha-softmmu 
                           arm-softmmu cris-softmmu hppa-softmmu i386-softmmu 
                           lm32-softmmu m68k-softmmu microblaze-softmmu 
                           microblazeel-softmmu mips-softmmu mips64-softmmu 
                           mips64el-softmmu mipsel-softmmu moxie-softmmu 
                           nios2-softmmu or1k-softmmu ppc-softmmu ppc64-softmmu 
                           riscv32-softmmu riscv64-softmmu s390x-softmmu 
                           sh4-softmmu sh4eb-softmmu sparc-softmmu 
                           sparc64-softmmu tricore-softmmu unicore32-softmmu 
                           x86_64-softmmu xtensa-softmmu xtensaeb-softmmu 
                           aarch64-linux-user aarch64_be-linux-user 
                           alpha-linux-user arm-linux-user armeb-linux-user 
                           cris-linux-user hppa-linux-user i386-linux-user 
                           m68k-linux-user microblaze-linux-user 
                           microblazeel-linux-user mips-linux-user 
                           mips64-linux-user mips64el-linux-user 
                           mipsel-linux-user mipsn32-linux-user 
                           mipsn32el-linux-user nios2-linux-user 
                           or1k-linux-user ppc-linux-user ppc64-linux-user 
                           ppc64abi32-linux-user ppc64le-linux-user 
                           riscv32-linux-user riscv64-linux-user 
                           s390x-linux-user sh4-linux-user sh4eb-linux-user 
                           sparc-linux-user sparc32plus-linux-user 
                           sparc64-linux-user tilegx-linux-user 
                           x86_64-linux-user xtensa-linux-user 
                           xtensaeb-linux-user

其中我们可以看到aarch64-softmmu,aarch64-linux-user,aarch64_be-linux-user。对于这三个编译选项:

aarch64-softmmu:

一般选择,用来跑os的,已经开了软件mmu。

aarch64-linux-user:

用于跑app

aarch64_be-linux-user :

与上面不同的是,用来跑big-endian的app程序。

编译

代码语言:javascript
复制
./configure --target-list=arm-softmmu,aarch64-softmmu --enable-debug --enable-sdl
 make
 make install

3.2 运行raspi镜像

正常情况下,当安装完成后,在控制台输入qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio就可以看到程序正常的运行起来了。

代码语言:javascript
复制
bigmagic@bigmagic:~/work/rt-thread/bsp/raspberry-pi/raspi3-64$ qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio

heap: 0x00110738 - 0x00510738
__page_off = 2000

 \ | /
- RT - Thread Operating System
 / | \ 4.0.3 build Feb 8 2020
 2006 - 2019 Copyright by rt-thread team
Hi, this is RT-Thread!!
msh />

4.启动调试

很多情况下,我们完成软件的编写,需要定位的时候,可以利用gdb工具进行代码层面的调试。

4.1 建立连接

如果要启动调试,可以输入以下的命令

代码语言:javascript
复制
qemu-system-aarch64 -M raspi3 -kernel rtthread.elf -serial null -serial stdio -s -S

-S 表示guest虚拟机一启动就会暂停

-s 表示监听tcp:1234端口等待GDB的连接

第一步:

开一个窗口,输入aarch64-elf-gdb.

第二步:

等待连接操作,然后输入target remote localhost:1234连接

第三步:

打开需要调试的文件,输入路径file /home/bigmagic/work/raspberry-pi/src/rt-thread/bsp/raspi3-64/rtthread.elf这个路径是需要调试的文件。

到这里就配置完成了。

4.2 调试技巧

首先可以输入layout src打开源代码显示窗口。

断点

输入断点可以是函数名称,可以是行号,可以是某个文件的具体函数。

代码语言:javascript
复制
break main //也可以写 b main

或者文件的第20行。

代码语言:javascript
复制
break 20

演示效果如下:

其中c是continue的简写。会向下执行,执行到断点处。

如果我们想删除某个断点,有两种方法:

1 delete 命令 简写d

delete break 删除所有的断点

delete break n 删除某个断点 n为断点号

2 clear 命令

clear 行号 删除设在某一行的断点

查看断点信息:info b 查看所有断点信息。

单步调试

进入函数内部单步调试step,简写s。

安装函数一行一行执行next,简写n。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rt-thread 树莓派3b 64位在qemu上运行
    • 1.本文目的
      • 2.代码编译
        • 2.1 工具链的准备
        • 2.2 编译源代码
      • 3.qemu安装
        • 3.1 编译qemu
        • 3.2 运行raspi镜像
      • 4.启动调试
        • 4.1 建立连接
        • 4.2 调试技巧
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档