#虚拟机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软件,点击新建虚拟机,选择自定义按钮,点击下一步

image-20230619152254188

步骤二:保持Workstation 16.x的默认选项,并点击下一步

image-20230619152309135

步骤三:选择稍后安装操作系统,并点击下一步

image-20230619152321937

步骤四:按照自己的偏好进行Ubuntu虚拟机位置的存放与命名,并点击下一步

image-20230619152659393

步骤五:根据自身电脑的配置来选择虚拟机的处理器数量,这里推荐至少4核,更多的CPU内核数量可以显著增加后面Android编译的速度。笔者这里选择了16核心。

image-20230619152821204

注意:制约选择的是CPU的逻辑处理器总数,虚拟机中的处理器内核总数需要小于电脑CPU的逻辑处理器数量。具体观察方式如下图:

image-20230619153156137

步骤六:根据自身电脑的配置来设置内存大小,由于笔者需要对Android源码进行编译,对内存要求较高,因此选择8GB内存。若仅linux源码来进行编译需要4GB。

image-20230619153442449

步骤七,网络部分,I/O控制器和磁盘部分部分均保持默认即可,磁盘部分可以设置为100GB或200GB(因为安卓的源码编译大概需要40GB左右),确认信息无误后,选择完成,建立新的虚拟机。

image-20230619153654657

image-20230619153727987

image-20230619153748498

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镜像。

image-20230619154313792

步骤三:安装Ubuntu

首先,确保网络正常且稳定!!!一路默认即可,在设置用户名与密码的时候,均使用了ferlinx。(因为我不小心拼错了,官方文档给的应该是forlinx),记得勾选自动登录(可以减少自己的操作量),最后点击continue即可进行安装。

image-20230619155521519

image-20230619155623251

image-20230619155602907

image-20230619155639098

image-20230619155835612

注意:如果实在网络不好,不稳定的话,可以选择skip跳过,直接进入系统

image-20230619155942070

然后进度条读完后,选择restart now并且重启此虚拟机即可。

步骤四:安装VMware Tools(可以显著提高虚拟机使用效率)

重要:此工具必须安装,否则Windows主机与虚拟机之间无法使用复制粘贴 文件拖拽。

步骤一:首先,首先点击 VMware 导航栏上的“虚拟机”,然后在下拉框中点击“安装 VMware Tools”。完成后进入 Ubuntu,桌面会出现 VMware Tools 的光盘,点击进入其中。

image-20230619160942217

image-20230619162241113

步骤二:进入后看到一个压缩文件 VMwareTools-10.3.10-12406962.tar.gz(不同的虚拟机版本可能会不同), 复制文件到主目录下面(即 home 个人用户名的目录下)。

image-20230619162639852

image-20230619162609644

注意:在使用解压命令时,可能需要对文件进行读写的授权,具体的代码如下:

sudo chmod 777 VMwareTools-10.3.23-16594550.tar.gz
sudo tar xvf VMwareTools-10.3.23-16594550.tar.gz

image-20230619162915462

步骤三:解压完成后会出现一个 vmware-tools-distrib 的文件夹,回到终端,输入:cd vmware-tools-distrib 进入该目录。 再输入:sudo ./vmware-install.pl 回车后输入密码,然后就开始安装,遇到询问就输入 yes,其他一 律回车默认安装就可以。

cd vmware-tools-distrib
sudo ./vmware-install.pl

image-20230619163658823

出现此界面,即表示VMwareTools安装成功

image-20230619163731528

1.3安装工具包环境(不包括QT环境)

首先,我们需要安装docker,并且配置好对应的工具包,此操作必须链接互联网。

由于国内访问官网可能速度过慢,此处需要更换aliyun镜像源来提交命令运行的速度。

安装前的准备

首先点击所有应用(左下角那个按钮),选择Software & Updates

image-20230619165909589

image-20230619170139072

选择红框部分,选择Others-China-mirrors.aliyun.com

image-20230619170319933

然后输入用户密码,点击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 -

image-20230617112657807

步骤3:写入软件源信息

首先需要安装依赖:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

image-20230617112720288

步骤4:安装并且更新docker-ce(即docker社区版)

sudo apt-get -y update

image-20230617112733778

安装指定版本docker

sudo apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu

image-20230617112839656步骤5:安装校验

 sudo docker version

image-20230617112930475

1.4新建用户

因为sudo的权限过大,一旦进行误操作,将很难进行修改。因此,我们需要一个普通账号来进行一些不需要sudo权限的操作,来防止误操作。

sudo adduser bluesky

密码这里设置的和用户名相同,均是bluesky,后面用户信息均默认即可。

image-20230617113339082

1.5安装docker环境

步骤1:创建docker的存放路径

sudo mkdir r -p /home/forlinx/android       //建立android文件夹
cd /home/forlinx/android                    //跳转至此路径

image-20230617114530426

步骤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               //对压缩包进行解压

image-20230617114552468

步骤3:从备份处加载导入的docker镜像

docker load -i ubuntu14_04lts_for_a40i_android7.tar

image-20230617114703507

步骤4:查看加载的镜像和名字并进行修改

 docker images
 docker tag 21f1a026ea52 ubuntu14_04lts_for_a40i_android7:1.0.0

image-20230617114842791

步骤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

image-20230617115131085

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

image-20230617124833244

将官方文档中的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的配置文件

image-20230625155907514

如果你自己新建fex文件并修改了显示的分辨率,新建的选项将会在这个config显示。

接下来,将会编译lichee内核,根据电脑性能,将会花费数分钟时间。

./build.sh

image-20230619023759945

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
    

    结果如官方文档所示(不需要进行添加操作,校对一下结果就行)

    image-20230625165040619

  • 在bluesky用户下修改源码属组,避免权限问题

    sudo chown bluesky.bluesky -R android
    sudo chown bluesky.bluesky -R lichee
    

1.7.4 android内核的编译

首先跳转至android目录

在lichee编译完成的前提下,导入android编译环境变量

source build/envsetup.sh

结果如下:

image-20230625165541685

配置android板卡

lunch 24

image-20230625170854577

复制内核模块和内核至安卓

extract-bsp

编译android系统(此处的-j16表示是用16线程来进行编译的)

make -j16

image-20230617160256609

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/

image-20230623225113214

这样的话,文件将会被移动至虚拟机与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

我们需要找到此文件中屏幕参数显示部分,如下图所示:

image-20230623222247178

由于笔者仅需要1080p的hdmi输出即可,所以仅需要调整下1080pHDMI输出的配置部分即可。(!!!下文的LCD部分不要删除,下图是错误做法!!!

image-20230623222521593

接下来,将文件改名,并复制回原目录

sudo mv sys_config1024x600.fex sys_config1080hdmi.fex
sudo cp sys_config1080hdmi.fex ../

image-20230623223223180

接下来,重复上一章的编译操作即可,这里不再重复演示。

参考文档:
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文件夹,然后添加到这个文件夹下面。)

posted @ 2023-06-25 17:18  NaHC03  阅读(51)  评论(0编辑  收藏  举报