Single

Ubuntu22.04 编译H618 android10记录

前言

这次尝试编译H618的安卓固件

开始前准备

拿到手的好像是两部分,一个是longan.tar.gz,一个是安卓文件,包含了android_aa,android_ab,android_ac,….android_ao,一堆文件,如图下所示:

先是安装cmake和git命令

sudo apt update
sudo apt install cmake git

编译longan

大概搜了下,下面是longan的介绍

longan 是 lichee 和 kunos 合并后的名称,是全志平台统一使用的 linux 开发平台。它集成了 BSP,构建系统,独立 IP 和测试,既可作为 BSP 开发和 IP 验证平台,也可以作为量产的嵌入 式 linux 系统。
longan 的功能包括以下四部分:
1. BSP 开发,包括 bootloader,uboot 和 kernel
2. Linux SDK 开发,包括量产的嵌入式 linux 系统
3. IP 的验证和发布平台,包括 gpu,cedarx,gstreamer,drm/weston,security 以及其 他的私有软件包。IP 随 longan 的发布而发布,减少使用邮件发布;并且给出 IP 的使用方法 和系统集成的 demo 程序,方便第三方快速使用
4. 测试,包括板级测试和系统测试,如 SATA 和 drangonboard。

先是解压压缩包并进入

tar xzvf longan.tar.gz
cd longan

配置编译环境,根据下面的输出配置:安卓-h618-p2 (这里的p2是什么暂时还没搞清楚,先挖个坑)
2023-08-01更新:这里不应该选p2,仔细读了一下代码,后面安卓编译的时候,有h618的配置只有apollo_p1和apollo_perf1这两个配置,所以这里应该选p1

$ ./build.sh config

Welcome to mkscript setup progress
All available platform:
   0. android
   1. linux
Choice [android]: 
All available ic:
   0. h313
   1. h616
   2. h618
   3. h700
Choice [h618]: 
All available board:
   0. fpga
   1. ft
   2. p1
   3. p2
   4. p6
   5. p7
   6. perf1
   7. perf1_axp152
   8. perf2
   9. perf3
  10. qa
Choice [p1]: 
INFO: kernel defconfig: generate /home/qubot/H616-android/longan/kernel/linux-4.9/.config by /home/qubot/H616-android/longan/kernel/linux-4.9/arch/arm64/configs/sun50iw9p1smp_h616_android_defconfig
*** Default configuration is based on 'sun50iw9p1smp_h616_android_defconfig'
#
# configuration written to .config
#

输入完了会保存配置到/home/qubot/H616-android/longan/kernel/linux-4.9/.config
然后可以开始编译

./build.sh

第一次编译的时候遇到了一个报错

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here

如下所示:

在网上查了下,先是在全志在线搜索的,结果发现好像还是没解决,地址:https://bbs.aw-ol.com/topic/3959/ubuntu-22-04-%E7%BC%96%E8%AF%91%E6%8A%A5%E9%94%99-multiple-definition-of-yylloc?_=1690682947075&lang=en-US
他这个解决方法给的是,删掉longan/kernel/linux-4.9/scripts/dtc/dtc-lexer.l和longan/kernel/linux-4.9/scripts/dtc/dtc-lexer.lex.c_shipped这两个文件中的两个定义

 #include "srcpos.h"
 #include "dtc-parser.tab.h"


但是最后又出现另一个错误,说未定义。最后放弃,在网上查找错误,最后在bpi-m4的代码中找到同一个问题:https://github.com/BPI-SINOVOIP/BPI-M4-bsp/issues/4

于是按照他的解决方案,把longan/kernel/linux-4.9/scripts/dtc/dtc-lexer.lex.c中的

YYLTYPE yylloc

替换成了

extern YYLTYPE yylloc


问题解决。
最后编译成功

编译android

安卓部分,第一次看到有点懵,尝试用winrar解压缩,结果发现解压失败。找了半天,打开了md5sum.txt这个文件,上面写了要用下面的命令组合起来

cat android_a* > android.tar.gz

然后解压缩

tar xzvf android.tar.gz
cd android

设置环境变量

source build/envsetup.sh

加载板型
2023-08-01更新:昨天看了代码, 发现版型配置里面apollo_p1和apollo_perf1是h618,所以这里选择apollo_p1或者apollo_perf1都行

//lunch cupid_p2-eng
lunch apollo_p1

拷贝bsp和modules
(这里有一个问题,我编译的618,但是不知道在安卓这里怎么配置平台,他从longan/out文件夹复制的是h616的bsp和module,没办法,为了能继续下去,我把out文件夹的h618改名成了h616,这样才能继续复制)
2023-08-01更新:上面这种办法不行,最后pakc会打包失败

extract-bsp

编译安卓

make -j8

错误:
error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

解决办法:

sudo apt-get install libncurses

引用:
https://blog.csdn.net/druieam/article/details/106818875

8核半个小时只编译了7%
期间暂停了,换成14核,半个小时到了52%
一个半小时,编译到了96%结果kill掉了,问了神奇的chatgpt,好像系统崩了?改成j10 ,重新make

又崩了?

编译成功,截图留念

最后打包:
打包debug固件

pack -d

打包不带debug固件

pack

烧录使用PhoenixSuit软件,这里就不说了,启动

暂无评论

发表评论