windows子系统WSL配置交叉编译环境

如何在 Win10 的 WSL 中搭建交叉编译环境

如何在 Win10 的 WSL 中搭建交叉编译环境

windows子系统WSL配置交叉编译环境

安装 WSL

在 Win10 应用商店安装好 Ubuntu 应用

ubuntu

把交叉编译工具链解压到 WSL 的 /usr/local/arm 目录下。Windows 的目录挂载在 WSL 的 /mnt/

mnt

在 WSL 中安装 32 位的运行环境

安装 qemu and binfmt

sudo apt update
sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

WSL 将通过 qemu-i386-static 实现对 i386 的支持,并将配置文件放入 /var/lib/binfmts/ 中以供将来重新激活。

每次重新启动WSL并希望获得i386支持时,都需要重新激活它

sudo service binfmt-support start

启用i386架构和包

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install gcc:i386

关闭与启用 i385 支持环境

sudo service binfmt-support stop
sudo service binfmt-support start

烧录 sd.bin 镜像

nine

用九鼎提供的烧录工具在 Win10 下进行烧录,注意要把工具设置成兼容 Win7 模式,另外注意烧录的盘符要手动输入(鼠标选择盘符无效),不然烧写到其他盘就麻烦了

解决执行 make 时出现的 cc1 错误

当进行 make 时出现 error trying to exec 'cc1': execvp: No such file or directory

解决思路:

  1. 将工具链 arm-xilinx-linux-gnueabi-gcc 的路径:/home/username/program/bin(本人的电脑路径) 添加到 /etc/profile 或者添加到当前用户根目录里的 .bashrc文件里,

    即加上 export PATH=$PATH:/home/username/program/bin

  2. 设置 arm-xilinx-linux-gnueabi-gcccc1 权限,sudo chmod 755(或者777) arm-xilinx-linux-gnueabi-gcc ;sudo chmod 755(或者777) cc1;保证工具链可执行。

  3. arm-xilinx-linux-gnueabi-gcc 和cc1在Linux系统中各自只能有一个,不能有多个arm-xilinx-linux-gnueabi-gcc,不能有多个cc1。

但后面需要编译出用于烧写 SD 镜像的 sd.bin 时,出现 wrong ELF class: ELFCLASS32,原因是 WSL 是 64 位的,执行 gcc mkv210_image.c -o mkx210 编译命令时调用了 32 位的库。为了解决这个问题,我用了新版本的交叉工具链 arm-2012.09.tar.bz2,这个工具链可以正常编译。同时我又安装了 64 位版本的 gcc,卸载了之前安装的 gcc:i386 版本。之后编译成功用于 SD 卡烧录的镜像 sd.bin