文章目录
- gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建
- 概述
- 实验
- END
gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建
概述
正在迁移Smoothieware_best-for-pnp到MCUXPresso的失败实验中徘徊.
将Smoothieware_best-for-pnp升级到和MCUXPresso相同的10.3
Smoothieware_best-for-pnp编译不过了.
报错代码迁移到MCUXPresso工程, 是可以编译过的.
观察到Smoothieware_best-for-pnp用的是arm-none-eabi-g++.exe, MCUXPresso用的是arm-none-eabi-c++.exe
现在想确认一下arm-none-eabi-c++.exe和arm-none-eabi-g++.exe功能上有啥区别? 是否有可能将Smoothieware_best-for-pnp编译由arm-none-eabi-g++.exe改为arm-none-eabi-c++.exe?
先搭个环境, 将gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2中的arm-none-eabi-g++工程和arm-none-eabi-c++工程源码目录比对一下.
实验
gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 自带文档中推荐用ubuntu16.4.
但是为了偷懒, 先用win10 linux子系统 + 最新的ubuntu22试了一下, 不行, 工具链高了. 反而浪费了时间.
win10 linux 子系统在微软商店中, 并没有ubuntu16.4这个版本.
今天按照官方说明, 用vmware16 + ubuntu16.4.iso搭了一个环境.
直接按照官方说明做, 很顺利. 编译环境有了.
先下载 ubuntu-16.04.7-desktop-amd64.iso, 在vm16中简易安装. 装好后, 会提示是否升级到ubuntu18, 选择否. 估计升级后, 就编译不过了.
检测ssh是否已经启动
sudo ps -e |grep ssh
安装ssh
sudo apt-get install openssh-server
启动ssh
service sshd start
然后用SecureCRT8.7.3 (x64 build 2279) 去连接虚拟机中的ubuntu16, 以后所有命令行都在SecureCRT中去做.
设置虚拟机的共享文件夹, 用来和win10交换文件.
在vm16的ubuntu中, 共享文件夹位置 /mnt/hgfs/, 在这个文件夹中, 就是我们设置好的共享文件夹目录
root@ubuntu:/home/lostspeed# ls /mnt/hgfs/vm_share_dir/
gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2
root@ubuntu:/home/lostspeed#
然后安装源码编译环境
Start root session:
$ sudo su
Enable use of 32bit packages:
$ dpkg --add-architecture i386
Add extra repositories to be used by apt:
$ apt-get update
$ apt-get install software-properties-common
$ add-apt-repository universe
$ cat >/etc/apt/sources.list.d/xenial.list <<EOF
deb http://archive.ubuntu.com/ubuntu xenial main universe
deb-src http://archive.ubuntu.com/ubuntu xenial main universe
deb http://security.ubuntu.com/ubuntu xenial-security main
EOF
Ensure package for Ubuntu Xenial are chosen by default:
$ echo ’APT::Default-Release "xenial";’ > /etc/apt/apt.conf.d/00default
Install packages:
$ apt-get install -y -t xenial \
gcc-mingw-w64-i686 g++-mingw-w64-i686 binutils-mingw-w64-i686
$ apt-get -f install -y \
build-essential autoconf autogen bison dejagnu flex flip \
gawk git gperf gzip nsis openssh-client p7zip-full perl \
python-dev libisl-dev scons tcl texinfo tofrodos wget zip \
texlive texlive-extra-utils libncurses5-dev
现在可以编译gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2了.
拷贝源码包到编译用的目录, 开始编译
mkdir ~/toolchain
cp /mnt/hgfs/vm_share_dir/gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 ~/toolchain
cd ~/toolchain
tar -xjf gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2
cd ./gcc-arm-none-eabi-10.3-2021.10
./install-sources.sh
install-sources.sh 运行时, 需要从网上下载东西. e.g. https://www.python.org/ftp/python/2.7.7/python-2.7.7.msi, 挺慢的.
慢就慢点, 网络连接不断就行.
等着 install-sources.sh 运行完成.
# Build the toolchain(s).
$ ./build-prerequisites.sh
$ ./build-toolchain.sh
编译的时间很久, 等着编译完成. 时间真长啊.
Once the build completes you can find the binary and source tarballs in
‘~/toolchain/gcc-arm-none-eabi-10.3-2021.10/pkg’ along with the
md5 checksum.
root@ubuntu:~/toolchain/gcc-arm-none-eabi-10.3-2021.10/pkg# pwd
/root/toolchain/gcc-arm-none-eabi-10.3-2021.10/pkg
root@ubuntu:~/toolchain/gcc-arm-none-eabi-10.3-2021.10/pkg# ls -l
total 494724
-rw-r--r-- 1 root root 203950080 May 21 00:17 gcc-arm-none-eabi-10.3-2023.05-src.tar.bz2
-rw-r--r-- 1 root root 168324352 May 21 00:13 gcc-arm-none-eabi-10.3-2023.05-win32.zip
-rw-r--r-- 1 root root 134300986 May 21 00:00 gcc-arm-none-eabi-10.3-2023.05-x86_64-linux.tar.bz2
-rw-r--r-- 1 root root 163 May 21 00:17 md5-x86_64-linux.txt
将编译后的gcc的目录从ubuntu传到win10本地, 看了一下, 并没有找到arm-none-eabi-c++和arm-none-eabi-g++的工程目录. 应该是通过makefile来指定要编译的实现和编译后的exe名称.
工程太大了, 对应的makefile暂时没找到.
对arm-none-eabi-c++.exe和arm-none-eabi-g++.exe进行2进制比对, 有点区别. 大部分内容是相同的.
用arm-none-eabi-c++.exe和arm-none-eabi-g++.exe编译工具链发布包自带的例子工程, 都可以编译过, map文件都相同(地址分配都相同, 只是临时文件名称不同).
用bindiff比较2个文件, 函数个数, 函数内容都相同. 可以确定, arm-none-eabi-c++.exe和arm-none-eabi-g++.exe只是名字不同, 功能完全相同, 都是用来编译c++文件的.