前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ubuntu上搭建arm虚拟运行环境

Ubuntu上搭建arm虚拟运行环境

作者头像
coderhuo
发布2020-01-20 15:50:35
5.2K0
发布2020-01-20 15:50:35
举报
文章被收录于专栏:coderhuo

没有开发板,如何调试运行arm程序? 本文主要讲解如何在Ubuntu上搭建arm交叉编译、运行环境。

一、安装交叉编译工具链

安装交叉编译工具链arm-linux-gnueabihf-gcc:

代码语言:javascript
复制
sudo apt-get install gcc-arm-linux-gnueabihf

安装完毕,可以看到系统上已经新增了这么多交叉编译工具:

代码语言:javascript
复制
helloworld@ubuntu:~$ arm-linux-gnueabihf-
arm-linux-gnueabihf-addr2line     arm-linux-gnueabihf-gcov-7
arm-linux-gnueabihf-ar            arm-linux-gnueabihf-gcov-dump
arm-linux-gnueabihf-as            arm-linux-gnueabihf-gcov-dump-7
arm-linux-gnueabihf-c++filt       arm-linux-gnueabihf-gcov-tool
arm-linux-gnueabihf-cpp           arm-linux-gnueabihf-gcov-tool-7
arm-linux-gnueabihf-cpp-7         arm-linux-gnueabihf-gprof
arm-linux-gnueabihf-dwp           arm-linux-gnueabihf-ld
arm-linux-gnueabihf-elfedit       arm-linux-gnueabihf-ld.bfd
arm-linux-gnueabihf-gcc           arm-linux-gnueabihf-ld.gold
arm-linux-gnueabihf-gcc-7         arm-linux-gnueabihf-nm
arm-linux-gnueabihf-gcc-ar        arm-linux-gnueabihf-objcopy
arm-linux-gnueabihf-gcc-ar-7      arm-linux-gnueabihf-objdump
arm-linux-gnueabihf-gcc-nm        arm-linux-gnueabihf-ranlib
arm-linux-gnueabihf-gcc-nm-7      arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-gcc-ranlib    arm-linux-gnueabihf-size
arm-linux-gnueabihf-gcc-ranlib-7  arm-linux-gnueabihf-strings
arm-linux-gnueabihf-gcov          arm-linux-gnueabihf-strip

执行下面的代码建立软链接,否则后面执行的时候会报动态库找不到的错误:

代码语言:javascript
复制
sudo ln -s /usr/arm-linux-gnueabihf/lib/libc.so.6 /lib/libc.so.6
sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ld-linux-armhf.so.3

编写测试代码main.c

代码语言:javascript
复制
#include <stdio.h>	
int main()
{
    printf("helloworld\n");
    return 0;
}

下面的命令,首先编译main.c生成arm平台下的可执行文件a.out,然后通过file命令可以看到,a.out为arm平台下的elf可执行文件:

代码语言:javascript
复制
helloworld@ubuntu:~$ arm-linux-gnueabihf-gcc main.c 
helloworld@ubuntu:~$ file a.out 
a.out: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 3.2.0, BuildID[sha1]=7592a0494955ca8bb953948ea4cfbefc90b2e2e9, not stripped

二、安装arm模拟器qemu

安装arm模拟器qemu :

代码语言:javascript
复制
sudo apt-get install qemu

执行arm平台的可执行文件a.out。可以看到,程序输出了正确的结果helloworld

代码语言:javascript
复制
helloworld@ubuntu:~$ qemu-arm a.out 
helloworld

说明:qemu可以模拟很多平台,不限于arm。

三、通过gdb调试arm程序

在Ubuntu上用gdb调试arm程序的原理:qemu端作为gdb server启动可执行程序,另一端作为gdb client连接gdb server,进行本地远程调试。

  1. 首先安装多平台的gdb工具: sudo apt-get install gdb-multiarch
  2. 重新编译示例代码main.c,注意,这次加上了参数--static。加上这个参数后,生成的可执行文件为静态链接的。如果不加这个参数,gdb调试的时候单步执行功能不正常,符号表也找不到。 arm-linux-gnueabihf-gcc --static -g main.c
  3. 通过下面的命令启动可执行程序a.out, 选项-g指明了gdb的监听端口,这里选择的是1234。该指令运行后,当前窗口会被阻塞住。 qemu-arm -g 1234 a.out
  4. 新开一个命令行窗口,启动gdb client,进入gdb交互界面: gdb-multiarch a.out
  5. 在gdb交互界面输入以下内容就可以连接到server端: target remote localhost:1234
  6. 接下来,就可以正常使用gdb的相关功能调试程序了: (gdb) b main Breakpoint 1 at 0x102e8: file main.c, line 5. (gdb) c Continuing. Breakpoint 1, main () at main.c:5 5 printf("helloworld\n");

四、参考文档

  1. Linux下ARM程序的编译运行及调试
  2. qemu相关说明文档
  3. CREATE DEBUG ENVIRONMENT FOR ARM ARCHITECTURE ON INTEL PROCESSOR
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安装交叉编译工具链
  • 二、安装arm模拟器qemu
  • 三、通过gdb调试arm程序
  • 四、参考文档
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档