赞
踩
本小弟由于项目需要,准备做一个XXX设备。采用平台方案为:ZYNQ(ZU9EG)+ Android。
本小弟接触过很多ZYNQ的平台,但是Android还从未接触过(除了安卓手机),哈哈哈。所以就上网查询各种资料,开始摸石头过河。
首先在Xilinx的官网去搜索ZYNQ跑Android系统发现内容基本没有,但是搜索到了一个关键的东东《Getting Started with Android 8 v2019.2 for Xilinx Zynq UltraScale MPSoC》然后就开始了搭建之路。
貌似Xilinx官方并没有做ZYNQ平台的Android适配,应该是西门子的几个大哥在做适配。
下载、安装Andorid对计算机的配置要求相对较高,可以省去很多恶心的问题:比如编译中:内存不足,硬盘空间不够。
我的电脑配置:
内存:16GB;
硬盘:1TB;(这个大于200G都可以)
图 1 系统版本
14.04.5 LTS镜像获取地址:
图 2 iso镜像
具体安装过程大家肯定都会,就不BB了。
安装虚拟机的时候有两个大坑,提前跟你们说一下,不然后面会让你很恶心:
图 3虚拟机配置
采用sudo apt-get install openjdk-8-jdk自动安装失败,所以使用手动安装方式。
必须安装OpenJDK而不是JDK,不然后面Android源码编译会出现问题,我吃亏了,哈哈哈~
执行:
1. 添加openjdk8的第三方源
sudo add-apt-repository ppa:openjdk-r/ppa
2. 执行更新
apt-get update
3. 安装openjdk8
sudo apt-get install openjdk-8-jdk
4. 选择版本
sudo update-alternatives –config Java
5. 确认安装成功
java -version
图 4 java install
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install dosfstools e2fsprogs parted
mkdir -p ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
执行命令curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo时一般会失败。
解决办法:
gedit /etc/hosts
在里面添加源:74.125.237.1 dl-ssl.google.com
图 5 添加dl-ssl
如果还是报错就多运行几次该命令:实在下载不下来,其实不下载也可以,因为后面用的是完整的repo project工程。哈哈~~~
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
图 6 curl成功
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
比如:
git config --global user.name "Wang Jin"
git config --global user.email "wangjinmock@163.com"
repo init -u git://github.com/MentorEmbedded/mpsoc-manifest.git -b zynqmp-android_8 -m release_android-8_xilinx-v2019.2.xml
其中参数解释如下:
图 7参数解释
但是在执行上面命令时会报错:
图 8 repo init
解决办法:
网上很多说添加option,添加清华镜像源,即:
--repo-url=https://gerrit-google.tuna.tsinghua.edu.cn/git-repo但是并没有解决我的问题。
下载完整的repo project解决了我的问题。
下载repo project完整工程代码,下载地址:
https://download.csdn.net/download/hongmao6/21044535
将源码拷贝到虚拟机随便路径下解压
图 9 repo project
执行命令:
cd /你的解压路径,例如我的:
cd /home/mock/Downloads/repo
chmod 777 repo修改权限
用完整的repo project生成的repo执行repo init
/home/mock/Downloads/repo/repo init -u git://github.com/MentorEmbedded/mpsoc-manifest.git -b zynqmp-android_8 -m release_android-8_xilinx-v2019.2.xml
解决问题。
图 10 解决问题
执行完成后会在WORKING_DIRECTORY目录下生成一个隐藏文件.repo,执行命令ls -al查看。
图 11生成.repo
.repo文件内容如下:
图 12 .repo内容
完成repo init后就可以下载源码了:
/home/mock/Downloads/repo/repo sync -c 不要用repo sync,也要用repo的完整工程生成的repo。
但是还是出现问题:
图 13 sync –c
解决办法:
网上推荐修改/etc/hosts文件,如下图所示,但是并没有解决我的问题,解决我的问题是修改的xml文件。
图 14添加源
解决这个问题的办法:
图 15 修改xml文件
gedit .repo/manifests/release_android-8_xilinx-v2019.2.xml
因为我下载的是v2019.2版本,所以修改的这个xml,如果默认你可以修改default.xml文件。
解决办法1:把原来的https://android.googlesource.com换成git://codeaurora.org就可以正常下载了,xml里面只有一处android.googlesource.com替换掉就可以了。
解决办法2(推荐使用,下载速度会快很多):修改文件gedit .repo/manifest.xml,把https://android.googlesource.com改为https://aosp.tuna.tsinghua.edu.cn/使用清华源。
图 16 替换源
图 17修改manifest.xml
按照3.5 替换下载源,/home/mock/Downloads/repo/repo sync -c 就可以正常下载Android源码了,要下载很久很久很久很久。。。。。。。我用的家里的网络,200M的带宽,下载了大概7个小时。
图 18 开始下载
图 19部分截图
在下载的中途中,出现了多次问题:
error: Exited sync due to fetch errors
解决问题:
反复执行:/home/mock/Downloads/repo/repo sync -c
因为repo sync会自动检查哪个文件已经下载,下载过了就不会再次下载了。
图 20 Exited sync due to fetch errors
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
不用管这个问题(直接fuck off),在下载的过程中,一直在找源码的server,如果没有就会从源码库里面下载。
图 21 404 Not Found
下载过程中出现如下问题:Unable to create '/home/WORKING_DIRECTORY/.repo/projects/tools/external/gradle.git/shallow.lock': File exists.
解决问题:进入该目录删除shallow.lock文件,然后继续执行/home/mock/Downloads/repo/repo sync -c
出现问题:
Syncing work tree: 99% (596/602) error: The following untracked working tree files would be overwritten by checkout:
error : tools/external/gradle/: platform/tools/external/gradle checkout
解决办法:
cd tools/external/gradle目录;
执行命令:git reset HEAD BUILD依次类推,将所有的问题都删除。
然后继续执行/home/mock/Downloads/repo/repo sync -c就可以了。哈哈~
图 22 sync error
我尼玛,折腾了2天终于下载完成了,源码大小为:67G,我只下载的Android-8 v2019.2分支,之前在家里下载了Android 6居然有105G。
图 23 下载完成
图 24源码文件.
下载路径:
https://download.csdn.net/download/hongmao6/21097484
将文件拷贝到Android源码的顶层目录,即WORKING_DIRECTORY目录下。
执行命令:mkdir -p tmp_mali && tar -xf mali-400-userspace.tar -C ./tmp_mali && mkdir -p vendor/xilinx/zynqmp/proprietary && cp -r tmp_mali/mail/Android/android-6.0.1/MALI-userspace/r6p2-01rel0/* vendor/xilinx/zynqmp/proprietary/ && rm -rf tmp_mali/
图 25mali 400
make -j4编译了1个小时后,出现错误:
arm-linux-androideabi-g++: internal compiler error: Killed (program cc1plus)
扩展虚拟机的内存:
关闭虚拟机,点击设置,将虚拟机的内容扩大为8G(4G也可以),之前我的内存设置为3G(太小了)。
图 26虚拟机设置
然后重新make -j4
make -j4时报错:如果正确安装了OpenJDK不会有这个问题,我之前安装成了JDK,而不是OpenJDK。
You are attempting to build with an unsupported JDK.
Only an OpenJDK based JDK is supported.
图 27 JDK
重新安装OpenJDK就可以了:
apt-get upgrade
sudo apt-get install openjdk-8-jdk
然后重新make -j4
出现错误:ninja: no work to do.(可以忽略这个问题)
解决办法:make clean后重新编译
编译过程中出现错误:
home/WORKING_DIRECTORY/linux-xlnx/scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
解决办法:是因为没有安装openssl的库
apt-get install libssl-dev
然后重新make -j4
编译过程中出现错误:
Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log
SSL error when connecting to the Jack server. Try 'jack-diagnose'
SSL error when connecting to the Jack server. Try 'jack-diagnose'
图 28 jack server error
解决办法:
gedit /etc/java-8-openjdk/security/java.security
删除:文件jdk.tls.disabledAlgorithms =里面的 TLSv1, TLSv1.1变量
删除606行: jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \
删除607行: RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224, \
删除608行: include jdk.disabled.namedCurves
然后重新make -j4
编译过程中出现问题:
Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by android-jack-team@google.com)).
图 29 out of memory error
解决办法:执行下面3条命令:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
sudo ufw disable
sudo git config --global http.sslVerify false
然后重新make -j4
再次编译时出现下面打印才说明成功:
Jack server already installed in "/root/.jack-server"
Server is already running
编译过程中出现问题:
Connection to the Jack server timeout, retrying with debug
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8076 (#0)
* successfully set certificate verify locations:
* CAfile: /root/.jack-server/server.pem
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
* Operation timed out after 0 milliseconds with 0 out of 0 bytes received
* Closing connection 0
Building with Jack:...r_intermediates/with-local/classes.dex
ninja: build stopped: subcommand failed.
图 30错误7
解决办法:
编译过程中出现问题:
Communication error with Jack server (52). Try 'jack-diagnose'
ninja: build stopped: subcommand failed.
图 31 错误8
解决办法:
gedit prebuilts/sdk/tools/jack-admin
1.找到如下语句:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
2.将上述语句修改为:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
3.重新启动jake server
./prebuilts/sdk/tools/jack-admin start-server
dex2oatd F 08-18 08:27:10 73934 73934 heap.cc:438] Check failed: region_space_mem_map != nullptr No region space mem map
Runtime aborting...
Dumping all threads without appropriate locks held: thread list lock mutator lock
All threads:
DALVIK THREADS (0):
"dex2oatd" prio=5 (not attached)
解决办法:
我怀疑是我的内存空间不够,我就加了一根8G的内存条(之前内存只有8G),将虚拟机内存设置为了8G(之前是4G),重新虚拟机,然后继续make -j4就编译完成了。
这个问题我也不懂,反正就这样解决了。疑惑中。。。。。。
看到这样的输出后,就是编译完成了,前前后后历时12个小时,为啥网上别的人只用了几个小时,难道是我CPU不行,有可能,我CPU是i5 4460太老了(公司的电脑)。
图 32编译成功
图 33 编译生成路径
编译完成后,所有生成文件路径为 out/target/product/zcu102该目录下,最重要的是生成的那几个.img文件。
编译完成后,如果你没有重新打开Terminal,直接运行emulator命令就可以了,等待一会儿一会儿一会儿。。。。后就会出现Android的手机界面了,真的不容易呀~~~~~。
如果你重新打开了一个Terminal控制终端,那么需要:
图 34运行成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。