用MacBook M1开发ARM-Linux:I.MX6ULL(一)
背景介绍
最近决定学习i.mx6ull的开发。手上仅有一台macbook m1,因此只能在macbook上折腾开发环境,虽然说编译环境最终还是依赖于linux,但是相比x86_64版本,使用aarch64的linux将面临一些新的问题,所以做一下学习笔记,开发板使用了正点原子的i.mx6ull阿尔法。
虚拟机下的开发环境配置
由于编译环境仍然是linux,因此MacBook要装虚拟机,相比其他arm芯片的电脑,mac的一个优势是能用rosetta2对一些代码进行转译,但是使用中仍然有较大的局限性。因此大部分软件都是直接安装了aarch64版本。imx6ull的在mbp m1上的开发环境包括了linux虚拟机、gnu交叉编译工具、代码编辑器:
- 虚拟机的选择 ,现在m1端一共有三款产品,分别是Parallels, VMware fusion,UTM。其中Parallels是最成熟的产品,经济能力足够的话买个paralles能省下很多事;VMware fusion是个人版免费,但是在网络配置方面有限制,使用资料比较多。UTM是开源的,parallels的平替版,细节上欠缺点,但是免费而且没有使用限制,并且UTM既是虚拟机也是模拟器。
- linux的选择。只要支持arm64版本的均可下载,UTM和parallels均有下载链接;https://mac.getutm.app/gallery/ ,utm下载页面上也有x64版本的ubuntu 14.04可以下载,只能用模拟器的方式降速运行。图形界面卡到爆,命令行界面速度还行,有时候代码需要复制粘贴就比较麻烦了,如果要用教程中提供的uboot等,UTM上模拟命令行界面的x64版本是唯一的选择。而用aarch64版本,则意味着很多东西要重新编译,考虑到后续的开发,笔记以aarch64为主,而且很多aarch64版本很多软件必须用新版,跟旧版软件兼容性较差,可以跟电容爆破工程师的笔记对应着看。
parallels@ubuntu22-04-02-desktop:~$ uname -a
Linux ubuntu22-04-02-desktop 5.15.0-112-generic #122-Ubuntu SMP Thu May 23 07:51:32 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
- 交叉编译器。linaro官网在新的版本中提供了对aarch64架构的支持。所以可以在linaro的下载页进行下载,我选用了稳定的12.3版本。
parallels@ubuntu22-04-02-desktop:/usr/local/arm/gcc-linaro-13.0.0-2022.06-aarch64_arm-linux-gnueabihf$ ls
arm-linux-gnueabihf gcc-linaro-13.0.0-2022.06-linux-manifest.txt lib share
bin include libexec
- 代码编辑器。vscode经过十年发展,已经变得非常成熟。在虚拟机里直接用vscode编写代码是一种选择,不过mac端的vscode更加符合mac用户的审美,所以更推荐使用macbook端的vscode进行远程开发,这里用到vscode插件Remote-SSH。点击查看Remote-SSH的配置方法,这样也符合远程开发的实际需求。
- Tips:原子哥提供的一些开源工具,比如imxdownloder在aarch64环境下也要重新编译才能使用。
gcc imxdownload.c -o imxdownload
开发必装软件列表
软件(组) | 用途 | 平台 |
---|---|---|
vsftpd | 文件传输 | Ubuntu |
ssh | 远程访问 | Ubuntu/Mac |
nfs-kernel-server | 开发板远程 | Ubuntu |
COMTool | 串口综合工具 | Mac |
vscode | 代码编辑 | Ubuntu/Mac |
linaro包 | 交叉编译器 | Ubuntu |
不用虚拟机,Mac原生交叉编译配置
Macbook原生配置了zsh的shell,我在网上也找到了适用于MacBook M1芯片的交叉编译器,因此,不用虚拟机也可以对工程进行编译按照上述虚拟机的方式,先创建一个/usr/local/arm文件夹(目录)
sudo mkdir /usr/local/arm
然后将下载到的arm-unknown-linux-gnueabihf.tar.xz文件移动到该目录下,解压:
sudo mv arm-unknown-linux-gnueabihf.tar.xz /usr/local/arm
tar -xf arm-unknown-linux-gnueabihf.tar.xz
确定一下bin目录的位置,我这边是/usr/local/arm/arm-unknown-linux-gnueabihf/bin,确定完成后,将该目录添加到PATH,我这里的方法是先打开~/.zshrc
sudo vim ~/.zshrc
然后添加一行
export PATH="$PATH:/usr/local/arm/arm-unknown-linux-gnueabihf/bin"
保存并退出~/.zshrc。
最后向终端输入
arm-unknown-linux-gnueabihf-gcc --version
检查输出结果,输出了版本信息则已经配置成功了。
arm-unknown-linux-gnueabihf-gcc (crosstool-NG 1.24.0) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
原子哥的imxdownload在Mac下要作修改,找到“构建烧写的shell命令”,将开头两行注释,作出如下修改。
/* 构建烧写的shell命令 */
/*linux版本*/
//cmdbuf = malloc(SHELLCMD_LEN);
//sprintf(cmdbuf, "sudo dd iflag=dsync oflag=dsync if=load.imx of=%s bs=512 seek=2",argv[2]);
/*mac版本*/
sprintf(cmdbuf, "diskutil unmountDisk %s",argv[2]);
system(cmdbuf);
sprintf(cmdbuf, "sudo dd if=load.imx of=%s bs=512 seek=2",argv[2]);
经过尝试,裸机程序用arm-unknown-linux-gnueabihf-gcc编译完全没有任何问题,但是编译U-boot的时候host主机选项里并没有MacBook,所以U-boot的编译配置之后还要研究。