#虚拟机Ubuntu编译Android开发板OKA40i-C过程记录
观前提示:虽然参考了官方开发板的文档,但是操作过程中,出现了亿点问题。本记录将会从新建虚拟机开始记录,请根据需要来进行阅读。
开发环境:
CPU:AMD Ryzen 7 4800HS with Radeon Graphics 2.90 GHz 内存:16GB
开发板:OKA40i-C 进行Android7.1环境的烧录编译 虚拟机软件:VMware Station 16 Pro
Linux版本:Ubuntu18.04.6(与官方的Ubuntu18.04.5略有不同)
目录:
1.Ubuntu开发环境的部署
注意:由于本人并没有找到官方所留下的已经部署好的Ubuntu环境镜像,因此直接从第三章的开发开始从头进行环境的部署。如果找到的话,最好直接使用官方的环境,直接导入虚拟机即可。此外,本开发没有使用Qt Creator来进行开发,因此在这不做展示。
1.1Ubuntu系统的部署
步骤一:首先打开VMware软件,点击新建虚拟机,选择自定义按钮,点击下一步。
步骤二:保持Workstation 16.x的默认选项,并点击下一步。
步骤三:选择稍后安装操作系统,并点击下一步。
步骤四:按照自己的偏好进行Ubuntu虚拟机位置的存放与命名,并点击下一步。
步骤五:根据自身电脑的配置来选择虚拟机的处理器数量,这里推荐至少4核,更多的CPU内核数量可以显著增加后面Android编译的速度。笔者这里选择了16核心。
注意:制约选择的是CPU的逻辑处理器总数,虚拟机中的处理器内核总数需要小于电脑CPU的逻辑处理器数量。具体观察方式如下图:
步骤六:根据自身电脑的配置来设置内存大小,由于笔者需要对Android源码进行编译,对内存要求较高,因此选择8GB内存。若仅linux源码来进行编译需要4GB。
步骤七,网络部分,I/O控制器和磁盘部分部分均保持默认即可,磁盘部分可以设置为100GB或200GB(因为安卓的源码编译大概需要40GB左右),确认信息无误后,选择完成,建立新的虚拟机。
Tip:虚拟机你所分给其的硬盘空间不会立刻进行使用,而是随着你的不断使用,而去不断申请新的空间,直到最高达到你所设置的硬盘大小。
1.2导入Ubuntu系统
此处新建的虚拟机是没有操作系统的,因此需要我们通过ISO镜像来导入Ubuntu系统。
步骤一:寻找Ubuntu的ISO镜像
以下是Ubuntu18.04.5的官网下载地址;(官方文档给的是18.04.5,18.04.6我没有成功,有兴趣的同学可以去进行尝试)
Index of /releases/18.04.5 (ubuntu.com)
国内无VPN访问或下载速度过慢,可以采用国内的镜像站,此处是地址(笔者使用的是这个方式成功的,在此处感谢大佬的镜像):
Ubuntu 18.04.5 LTS (Bionic Beaver) 官方原版镜像下载 | 任我乐 (renwole.com)
步骤二:使用ISO镜像
下载完成IOS之后,点击我们新建的虚拟机,右键并选择设置,并在“虚拟机设置”菜单中,选择CD/DVD(SATA),导入我们上面所下载的ISO镜像。
步骤三:安装Ubuntu
首先,确保网络正常且稳定!!!一路默认即可,在设置用户名与密码的时候,均使用了ferlinx。(因为我不小心拼错了,官方文档给的应该是forlinx),记得勾选自动登录(可以减少自己的操作量),最后点击continue即可进行安装。
注意:如果实在网络不好,不稳定的话,可以选择skip跳过,直接进入系统
然后进度条读完后,选择restart now并且重启此虚拟机即可。
步骤四:安装VMware Tools(可以显著提高虚拟机使用效率)
重要:此工具必须安装,否则Windows主机与虚拟机之间无法使用复制粘贴 文件拖拽。
步骤一:首先,首先点击 VMware 导航栏上的“虚拟机”,然后在下拉框中点击“安装 VMware Tools”。完成后进入 Ubuntu,桌面会出现 VMware Tools 的光盘,点击进入其中。
步骤二:进入后看到一个压缩文件 VMwareTools-10.3.10-12406962.tar.gz(不同的虚拟机版本可能会不同), 复制文件到主目录下面(即 home 个人用户名的目录下)。
注意:在使用解压命令时,可能需要对文件进行读写的授权,具体的代码如下:
sudo chmod 777 VMwareTools-10.3.23-16594550.tar.gz
sudo tar xvf VMwareTools-10.3.23-16594550.tar.gz
步骤三:解压完成后会出现一个 vmware-tools-distrib 的文件夹,回到终端,输入:cd vmware-tools-distrib 进入该目录。 再输入:sudo ./vmware-install.pl 回车后输入密码,然后就开始安装,遇到询问就输入 yes,其他一 律回车默认安装就可以。
cd vmware-tools-distrib
sudo ./vmware-install.pl
出现此界面,即表示VMwareTools安装成功
1.3安装工具包环境(不包括QT环境)
首先,我们需要安装docker,并且配置好对应的工具包,此操作必须链接互联网。
由于国内访问官网可能速度过慢,此处需要更换aliyun镜像源来提交命令运行的速度。
安装前的准备:
首先点击所有应用(左下角那个按钮),选择Software & Updates。
选择红框部分,选择Others-China-mirrors.aliyun.com
然后输入用户密码,点击Close。跳出弹窗按钮点击Reload即可。当进度条结束后
Tip:如何长时间Update cache未成功,可以考虑重新选择Main Server再选回aliyun镜像源即可。
步骤1:安装系统必要工具(以下操作均在管理员下进行,即ferlinx@Ubuntu18)
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
步骤2:安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
步骤3:写入软件源信息
首先需要安装依赖:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
步骤4:安装并且更新docker-ce(即docker社区版)
sudo apt-get -y update
安装指定版本docker
sudo apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu
步骤5:安装校验
sudo docker version
1.4新建用户
因为sudo的权限过大,一旦进行误操作,将很难进行修改。因此,我们需要一个普通账号来进行一些不需要sudo权限的操作,来防止误操作。
sudo adduser bluesky
密码这里设置的和用户名相同,均是bluesky,后面用户信息均默认即可。
1.5安装docker环境
步骤1:创建docker的存放路径
sudo mkdir r -p /home/forlinx/android //建立android文件夹
cd /home/forlinx/android //跳转至此路径
步骤2:将Windows主机中的分享文件夹中的docker镜像复制进虚拟机中,在校验完其完整性后,再对其进行解压
sudo cp /mnt/hgfs/share/ubuntu14_04lts_for_a40i_android7.tar.gz ./ //将压缩包复制进入虚拟机内
md5sum ubuntu14_04lts_for_a40i_android7.tar.gz //对压缩包进行md5校验(如果有md5工具,可以跳过)
sudo tar xvf ubuntu14_04lts_for_a40i_android7.tar.gz //对压缩包进行解压
步骤3:从备份处加载导入的docker镜像
docker load -i ubuntu14_04lts_for_a40i_android7.tar
步骤4:查看加载的镜像和名字并进行修改
docker images
docker tag 21f1a026ea52 ubuntu14_04lts_for_a40i_android7:1.0.0
步骤5:创建并运行容器
注意:由于这篇文章为了复现尝试了较多次,所以每次的docker容器的名称ID会不同
forlinx@ubuntu:~/android$
docker run -it --privileged=true --cap-add=SYS_ADMIN -v /home/forlinx/android:/home/forlinx/android -p 10022:22 21f1a026ea52 bin/bash
1.6运行docker环境,并且对新建用户进行sudoers用户组授权(这部分专业名词描述可能不对)
以下是docker的基本操作:
查看容器:
docker ps -a //查看所有容器,包括没运行的容器
docker ps //查看正在运行的容器
运行并进入容器:
docker start e291ec638573 //运行容器
docker exec -it e291ec638573 bin/bash //进入容器
为了让普通用户bluesky能够使用sudo命令,因此需要将bluesky配置进sudoers文件中:
chmod u+w /etc/sudoers
vi /etc/sudoers
需要在root ALL=(ALL) ALL 后添加一行
bluesky ALL=(ALL:ALL) NOPASSWD:ALL 或者 bluesky ALL=(ALL:ALL) ALL
区别是第一条不需要输入密码,第二条需要输入密码
修改后还原文件权限(!!!!此操作没有必要做,会将刚刚的授权的内容给重置掉)
chmod u-w /etc/sudoers
1.7编译源码
1.7.1源码包拷贝
通过上文的分享文件夹的拷贝操作来进行(此处share是上文那个分享文件夹的名称)
sudo cp /mnt/hgfs/share/xaa ./ //此操作是将xaa文件从分享文件夹share复制到当前文件夹下
sudo cp /mnt/hgfs/share/xab ./
sudo cp /mnt/hgfs/share/xac ./
sudo cp /mnt/hgfs/share/xad ./
sudo cp /mnt/hgfs/share/xae ./
sudo cp /mnt/hgfs/share/lichee.tar.gz ./
注意:观察下图la命令的显示部分,若文件未被标绿,将无法进行后续的解压操作,因此需要对其进行授权,这里笔者偷懒直接使用此命令:sudo chmod 777 xaa。
将官方文档中的android源码的五个包给合成一个压缩包
cat xa* > android.tar.gz
注意:本人暂时不知道原因,此操作在docker外部进行会显示android.tar.gz没有权限,笔者是进入docker内部,以root身份来进行操作的。(后期应该会注意这部分)
进行解压缩(由于源码大概13GB,所以时间会比较长)
tar xvf android.tar.gz
1.7.2 lichee配置
此处仍然使用了官方的默认方式,并未作更多的修改。
解压缩源码,命令如下:
tar xvf lichee.tar.gz
开始配置lichee的配置文件,需要在~/lichee文件夹下运行./build.sh config,并且根据自己的需要,选择对应需要编译的lichee内核配置。
cd lichee
./build.sh config //打开lichee的配置文件
如果你自己新建fex文件并修改了显示的分辨率,新建的选项将会在这个config显示。
接下来,将会编译lichee内核,根据电脑性能,将会花费数分钟时间。
./build.sh
1.7.3 调整swap分区的大小
-
首先需要确认好虚拟机的内存大小,防止在编译过程中发生报错,至少在6G以上。
-
需要确认系统swap分区的大小(虚拟机应该默认大小为1GB),需要将其至少调至4GB(本人调整至4GB)
sudo swapoff swapfile sudo fallocate -l 4G swapfile sudo mkswap swapfile sudo swapon swapfile sudo vim /etc/fstab
结果如官方文档所示(不需要进行添加操作,校对一下结果就行)
-
在bluesky用户下修改源码属组,避免权限问题
sudo chown bluesky.bluesky -R android sudo chown bluesky.bluesky -R lichee
1.7.4 android内核的编译
首先跳转至android目录
在lichee编译完成的前提下,导入android编译环境变量
source build/envsetup.sh
结果如下:
配置android板卡
lunch 24
复制内核模块和内核至安卓
extract-bsp
编译android系统(此处的-j16表示是用16线程来进行编译的)
make -j16
1.7.5将pack的镜像移动到Windows桌面
sudo docker cp e291ec638573:/home/forlinx/android/lichee/tools/pack/sun8iw11p1_androidm_a40-OKA40i_C_uart0-1080hdmi.img /mnt/hgfs/share/
这样的话,文件将会被移动至虚拟机与Windows电脑的共享文件夹中。
1.8修改镜像的默认分辨率
首先需要进行负责管理镜像的配置文件部分,位置在
/home/forlinx/android/lichee/tools/pack/chips/sun8iw11p1/configs/a40-OKA40i_C
其中,里面的.fex文件就是用于管理镜像的配置文件
首先,新建一个文件用于存储用于更改的配置文件。
sudo mkdir temp
然后选取一个配置文件,将其复制到temp文件中
sudo cp sys_config1024x600.fex ./temp
跳转至该文件夹并且对其进行vi编辑模式来修改,首先保证文件具有写的权限
cd temp
sudo chmod 777 sys_config1024x600.fex
vi sys_config1024x600.fex
我们需要找到此文件中屏幕参数显示部分,如下图所示:
由于笔者仅需要1080p的hdmi输出即可,所以仅需要调整下1080pHDMI输出的配置部分即可。(!!!下文的LCD部分不要删除,下图是错误做法!!!)
接下来,将文件改名,并复制回原目录
sudo mv sys_config1024x600.fex sys_config1080hdmi.fex
sudo cp sys_config1080hdmi.fex ../
接下来,重复上一章的编译操作即可,这里不再重复演示。
参考文档:
https://blog.csdn.net/dpppppp/article/details/110860595
https://www.jianshu.com/p/2beae17c9b12
https://blog.csdn.net/ningmengzier/article/details/111909229
OKA40i-C_Android7.1_用户资料_R5(更新日期_20230525)
如何把docker里的文件复制到本地机_哔哩哔哩_bilibili
[(71条消息) Ubuntu通过阿里云镜像站安装docker,及安装GPG证书的新方式_Chr1s Harris的博客-CSDN博客](https://blog.csdn.net/weixin_44430301/article/details/129561939#:~:text=1 阿里云Docker CE镜像站地址%3A,https%3A%2F%2Fdeveloper.aliyun.com%2Fmirror%2Fdocker-ce%3Fspm%3Da2c6h.13651102.0.0.57e31b11Cs9fUU; 2 安装GPG证书%3A 最新的方式是创建%2Fetc%2Fapt%2Fkeyrings文件夹,然后添加到这个文件夹下面。)