米尔官方为米尔-TI AM62x开发板提供了两种已经制作好的镜像:
可以直接使用上述镜像进行烧录和使用。
因为后续要在这块开发板上,进行应用的开发,所以我选择了参考官方资料,进行完整系统的编译,以及SDK工具的构建,能够把步骤顺利的完成,在后续的开发过程中,进行应用的编译,一般就不会遇到什么大的问题了。
一、硬件环境准备
首先是开发板和SD卡,开发板已经有了,SD卡建议选择一块高速的SD卡,至少32G。
然后是编译环境用的系统硬件,一定要CPU主频高、核心多、内存大,因为编译系统,真的很耗时的。
官方推荐的硬件:Yocto 项目的构建对开发主机的要求比较高,要求处理器具有双核以上 CPU,8GB 以 上 内存,500GB 硬盘或更高配置。可以是安装 Linux 系统的主机,也可以是运行 Linux 系 统的虚拟机。
双核?8G?开什么玩笑,这跑的动嘛?
我所使用的硬件如下:
这款CPU是10核心,20线程的。内存嘛,配这个CPU内存当然不会少了。
另外,编译剩余的磁盘空间,建议最好准备150G备用。注意,是剩余磁盘空间。
二、系统环境准备
官方推荐的系统环境是 Ubuntu20.04 64bit ,我实际使用色环境是Ubunt 23.04 64bit,也成功完成了所需要的编译工作。
为了更好的使用apt下载安装软件包,可以参考: http://tuna.tsinghua.edu.cn/help/ubuntu/ 来进行apt源的设置,以便让下载速度嗖嗖嗖的快。
谁知完成后,使用下面的命令,安装软件包:
apt update
apt upgrade
apt install -y git build-essential \
diffstat texinfo gawk chrpath socat doxygen dos2unix python3 bison \
flex libssl-dev u-boot-tools mono-devel mono-complete curl lrzsz lzop \
python3-distutils pseudo python3-sphinx g++-multilib bc python3-pip \
libc6-dev-i386 jq git-lfs pigz zstd liblz4-tool cpio file autoconf automake \
xinetd tftpd-hpa nfs-kernel-server minicom libncurses5-dev dos2unix screen \
zstd lz4 python3-pyelftools python3-setuptools swig repo
git config --global user.name "你在github的用户名"
git config --global user.email "你在github的邮箱"
git config --list
上述工作做完,就准备好了系统环境了。
三、系统编译SDK准准备
首先,要从 http://down.myir-tech.com/MYD-YM62X/ 下载 03_Tools.zip,下载后解压备用。
我这边的操作步骤如下:
mkdir -p ~/Projects/myir
cd ~/Projects/myir
wget -c http://down.myir-tech.com/MYD-YM62X/03_Tools.zip
unzip 03_Tools.zip
然后,安装系统编译SDK:
cd ~/Projects/myir/03_Tools/Toolchain
chmod u+x arago-2023.04-toolchain-2023.04.sh
./arago-2023.04-toolchain-2023.04.sh
运行后,会提示安装到哪里,我选择安装到:/opt/
安装完成后,应用其对应的环境设置,并检查环境是否生效:
. /opt/arago-2023.04/environment-setup-aarch64-oe-linux
$CC -v
输出如下,表示系统编译SDK环境设置成功:
使用tree命令查看安装的目录结果如下 :
四、系统源码准备
首先,要从 http://down.myir-tech.com/MYD-YM62X/ 下载 04_Sources.zip,下载后解压备用。
我这边的操作步骤如下:
cd ~/Projects/myir
wget -c http://down.myir-tech.com/MYD-YM62X/04_Sources.zip
unzip 04_Sources.zip
然后解压对应的Yocto源码包:
mkdir ~/Projects/myir/myd-ym62x-yocto
cd ~/Projects/myir/myd-ym62x-yocto
unzip ../04_Sources/myd-ym62x-yocto.zip
# 查看目录结构
tree -L 2 ../myd-ym62x-yocto
解压后的文件结构如下:
其中,build和downloads,都是在编译过程中生成的。
另外,官方还提供了从github下载源码的方式,感兴趣的可以了解尝试。为了稳妥起见,我直接用官方提供的压缩包解压了使用。
五、系统镜像构建
通过前面的步骤,现在环境和源码都准备好了,可以开始正式编译系统了。
1. 环境配置:
首先进行环境配置:
cd ~/Projects/myir/myd-ym62x-yocto/oe-layersetup
./oe-layertool-setup.sh -f configs/processor-sdk/processor-sdk-09.00.00-myd-am62x-config.txt
配置完成后,会生成build目录,然后应用配置:
. conf/setenv
2. 下载工具源码包:
正式编译前,需要做一些修改:
cd build
vim conf/local.conf
修改其中的DL_DIR,具体为:~/Projects/myir/myd-ym62x-yocto/oe-layersetup/downloads
然后执行命令,下载需要的软件包:
bitbake myir-image-full --runall=fetch
执行后,会呼啦呼啦的下载软件包。
需要提醒的是,这个步骤,耗时比较长,比较长,比较长。也可以参考官方说明,从百度网盘下载。可是,百度网盘,垃圾,不用会员,比个龟都慢。还是老实用命令下载吧。
这个命令,运行完了,再次运行,连续三次,确保最后输出:
那就说明,都下载好了,可以继续进行了。
然而,实际情况,并没有这么顺利。我在执行这条命令的过程中,老是提示 quectel-cm 下载错误。
研究了一番,做了一点简单的处理,给解决了。
修改这个命令配置文件:
vim ~/Projects/myir/myd-ym62x-yocto/oe-layersetup/sources/meta-myir/meta-myir-bsp/recipes-connectivity/quectel-cm/quectel-cm.bb
具体修改:
#S_SRC ?= "git://github.com/MYIR-TI/quectel-cm.git;protocol=https"
S_SRC ?= "https://github.com/MYIR-TI/quectel-cm.git;branch=master"
SRC_URI[sha256sum] = "54ac7475b83c08fa4eafdfb3377381fd42e87dbcf32290fc1b11260af0f728a8"
然后再次执行:
bitbake myir-image-full --runall=fetch
执行成功后,再次执行两次,确保没有问题。
最后,再手工下载一下:
cd ~/Projects/myir/myd-ym62x-yocto/oe-layersetup/build/arago-tmp-default-glibc/work/aarch64-oe-linux/quectel-cm/1.0-r0
git clone https://github.com/kmilo17pet/quectel-cm.git git
3. 构建系统完整镜像包
现在,就可以用命令,进行系统构建了:
bitbake myir-image-full
执行后,会开始进行各项构建工作,输出如下:
特别提醒,这个过程,是耗时最长,CPU烧得最厉害的阶段了,大家看一看我这个i9-10900吧:
你可能需要10个小时,或者更长的时间,才会完成所有的编译工作。
另外,中途,你还得不时来看看,有没有遇到问题。因为,我这边,在编译过程中,真还就遇到问题了:
我也不清楚它这个的具体产生的原因,看起来不像是因为我的系统版本太高的缘故,是给json.c、json.h打patch打上去有问题。
既然是打patch有问题,那咱就手动打好了,具体操作如下:
vim ./arago-tmp-default-glibc/work/aarch64-oe-linux/systemd/1_250.5-r0.arago7/git/patches/0001-shared-json-allow-json_variant_dump-to-return-an-err.patch
然后参考下图,把红框的部分,给去掉,直接删掉好了:
然后修改json.c文件:
vim arago-tmp-default-glibc/work/aarch64-oe-linux/systemd/1_250.5-r0.arago7/git/src/shared/json.c
找到代码中对应的位置,修改为下面的样子:
然后,继续执行:
bitbake myir-image-full
直到漫长的等待过后,执行完成,再次执行,再次执行,结果如下:
并检查构建的结果:
现在,系统镜像构建完成了,myir-image-full-myd-am62x-20231218090554.rootfs.wic.xz 可以用于烧录到SD卡了。
4. 烧录镜像启动系统
我选择用balenaEtcher进行烧录,源直接选择sz文件,目标选择要烧录的SD卡,即可开始Flash:
烧录完成,把开发板断电,把拨码开关拨到SD卡位置:
再插上SD卡,上电,系统启动后,进入默认的图形界面,点击右上角的小图标,可以打开窗口运行命令:
看起来,负载可真高啊。
经过官方技术人的指导,才知道:6231是单核的性能是不够运行weston,我们默认应该有写判断如果是6231会自动开启lvgl的demo,您只要输入命令systemctl disable weston关掉weston就可以了。
六、构建开发用的SDK工具链
前面安装的SDK是系统编译用的,要为这个系统进行应用开发,则需要应用开发SDK工具链。
在完整镜像构建成功的前提下,应用开发SDK工具链的构建,就较为简单了,一条命令即可:
bitbake -c populate_sdk myir-image-full
构建成功后,再执行两遍,最终输出如下:
这个部分的构建,具体需要多久,我就没有统计了,反正比上面的系统构建时间要短就是了。
构建的结果如下:
生成的应用开发SDK工具链就可以用于安装了来为应用开发提供支持了,后续应用开发过程中,再做对应的分享。
七、总结
总的来说,米尔提供的这套Yocto构建系统的环境和源码,使用起来,还是比较顺利的,除了修改了两个小小的问题,以及需要较多系统资源和较长时间外,其他还没有遇到什么拦路虎。
另外,还在许还有bootloader和kernel等的编译,相信在此基础上,应该都不会有什么问题了。
在研究学习的过程中,遇到了问题及时提出来,米尔的技术人员大力帮助,帮忙解决。
我相信这将会是一场非常愉快的学习体验过程。