WSL上基于Ubuntu18.04搭建arm虚拟环境

本文详细介绍了如何在Windows上的WSL环境中配置ARM交叉编译环境,包括安装32位支持、交叉编译工具链、QEMU模拟器以及图形界面。同时,还讲解了如何在Ubuntu中使用gdb调试ARM程序,并解决可能出现的问题,如权限、依赖和命令未找到等。
摘要由CSDN通过智能技术生成


)

引言

由于平时使用win10较多,电脑可能带不动虚拟机,所以寻找了一个wsl下做arm虚拟环境开发方案。所谓工欲善其事必先利其器

WSL配置

可参考在Windows10上用WSL优雅开发

查看系统信息

# 安装screenfetch
sudo apt install screenfetch
# 启动sceenfetch
screenfetch

ARM交叉编译环境搭建

为Ubuntu开启32位支持(非必要)

sudo dpkg --add-architecture i386

安装32位的库和宿主的工具(非必要)

# 宿主开发环境
sudo apt install -y build-essential
# 32位库
sudo apt install -y lib32ncurses5 lib32z1
sudo apt install -y lib32stdc++6

安装交叉编译工具链

# 安装gcc
sudo apt install gcc
# 安装arm-linux-gcc
sudo apt-get install gcc-arm-linux-gnueabihf
# 安装arm-linux-g++
sudo apt-get install g++-arm-linux-gnueabihf

如果出现
:::
E:Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
:::
那么可以运行以下代码修复依赖

sudo apt-get update  --fix-missing 

检查安装

# 查看gcc版本
gcc -v
# 查看arm-linux-gcc版本
arm-linux-gnueabihf-gcc -v
# 查看arm-linux-g++版本
arm-linux-gnueabihf-g++ -v

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

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

安装arm模拟器qemu

sudo apt-get install qemu

注意:qemu是需要图形界面的,所以需要装一个图形界面。

为WSL安装图形界面
  • 1.在windows上安装VcXsrv
    原理是WSL会把界面信息发送给VcXsrv,由VcXsrv来绘制界面
    Windows上打开XLaunch,一般选择Multiple Window,然后一直下一步,也可以根据提示保存默认配置,之后不用重复配置。
    XLaunch会一直在后台运行,要启动WSL图形界面,是需要确定XLaunch启动了。

  • 2.在WSL上安装xfce desktop,选择xfce4桌面,它的优点是轻量、美观、占用系统资源少

sudo apt-get install xfce4-terminal
sudo apt-get install xfce4
sudo apt install dbus-x11

为了方便,打开Ubuntu bash,运行如下代码:

echo "export DISPLAY=:0.0" >> ~/.bashrc

这样,每次打开图形界面程序就不需要额外指定DISPLAY了。

之后需要关掉所有bash重启wsl!!!

  • 运行
startxfce4

或者

xfce4-session

:::
https://blog.csdn.net/yq_forever/article/details/103632662

https://blog.csdn.net/w_weilan/article/details/82862913

https://www.jianshu.com/p/8404e34feefe

:::

gdb调试arm程序

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

  • 1.首先安装多平台的gdb工具
sudo apt-get install gdb-multiarch

:::
gdb-multiarch
顾名思义,它是gdb支持多中硬件体系架构的版本。之所以要安装gdb-multiarch,是因为Ubuntu默认安装的gdb只支持x86/x64架构
:::

  • 2.编译代码,注意加上参数–static。加上这个参数后,生成的可执行文件为静态链接的。如果不加这个参数,gdb调试的时候单步执行功能不正常,符号表也找不到。
arm-linux-gnueabihf-gcc 编译文件 -static -o 输出文件 -nostdlib 
  • 3.启动qemu,-g指明了gdb的监听端口,这里选择的是1234
qemu-arm -g 1234 编译的输出文件
  • 4.新开一个命令行窗口,启动gdb client,进入gdb交互界面
gdb-multiarch 编译的输出文件

在gdb交互界面输入以下内容就可以连接到server端

target remote localhost:1234

简单介绍几个常用的 gdb 指令:
(gdb) disassemble // 查看反汇编
(gdb) x /8xw 0x0000808e // 查看内存 (可查具体参数)
(gdb) info register // 查看寄存器
(gdb) continue // 继续执行
(gdb) stepi // 汇编级逐过程
(gdb) nexti // 汇编级逐语句

  • 最后远程sftp服务,其实win10已经挂载在wsl的mnt上,所以sftp服务可有可无

issues

  • su: Authentication failure
    这个问题产生的原因是由于ubtun系统默认是没有激活root用户,需要我们手工进行操作sudo passwd,初始化root。
    :::
    https://blog.csdn.net/cjmcp/article/details/17655187

https://blog.csdn.net/huijiaaa1/article/details/81106337?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

:::

  • qemu: command not found
    建立一条软链接:
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu 

然后再

vi /etc/profile 

添加一行

export PATH=$PATH:/usr/bin/qemu 

再使用

source /etc/profile 

使其生效,就可以使用qemu命令了

  • VIM编辑文件权限问题:“E45: ‘readonly’ option is set (add ! to override)”
    解决方案, :q! 强制关闭文件后,在命令行里输入:sudo !! 后回车再次vim打开文件编辑就正常
    或者在root权限下wq!强制保存退出
    ::: tip 解决
    https://blog.csdn.net/museions/article/details/90313476?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1328767.28821.16174542906693085&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

https://blog.csdn.net/u012569217/article/details/77530004

:::

  • 跨平台仿真arm文件,运行时报错:/lib/ld-linux-armhf.so.3: No such file or directory

编译的时候:

错误编译:arm-linux-gnueabihf-gcc -o ,没有-static

正确编译:arm-linux-gnueabihf-gcc -static -o 需要-static静态参数

::: tip 参考文章
WSL搭建嵌入式开发环境

https://www.jianshu.com/p/d4d892e10adb

https://cloud.tencent.com/developer/article/1578333

:::

安装WSL2上的Ubuntu 18.04,可以按照以下步骤进行操作: Step1: 首先,导出WSL1中的Ubuntu 18.04安装包到一个.tar文件中,可以使用以下命令导出: wsl --export Ubuntu-18.04 d://wslubuntu//ubuntu-18.04.tar Step2: 注销WSL1中的Ubuntu 18.04虚拟机,使用以下命令: wsl --unregister Ubuntu-18.04 Step3: 导入WSL2中的Ubuntu 18.04安装包,指定安装路径和版本,使用以下命令导入: wsl --import Ubuntu-18.04 d://wslubuntu F://ubuntu1804new.tar --version 2 此时,Ubuntu 18.04已经成功安装WSL2中。 另外,如果你想要更改Ubuntu 18.04虚拟机的默认登录用户名为"jarvis",可以使用以下命令: ubuntu1804 config --default-user jarvis 这样就完成了在WSL2上安装Ubuntu 18.04并更改默认登录用户名的过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [安装WSL2+Ubuntu18.04(慢慢更新记录)](https://blog.csdn.net/shi1804134022/article/details/128633049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [WSL2-ubuntu1804安装以及一些个人使用调整](https://blog.csdn.net/fur_pikachu/article/details/127953683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J先生x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值