文章目录
IMX8Mnano Android源码拉取编译
参考资料
- 8MNANOD4-EVK官网地址,Android源码发布包及对应版本的指导文档可以从此处下载:https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-nano-applications-processor:8MNANOD4-EVK
- 主要参考从上述网址中获取到《ANDROID_13.0.0_1.0.0_DOCS》/《Android_User’s_Guide.pdf》进行移植,不过因为中国的网络原因,中间会出现很多问题,接下来的过程我会把解决方法写上
- 开源Android使用指导 https://source.android.google.cn/docs/setup/start/initializing?hl=zh-cn
环境准备
- 系统使用Ubuntu18.04,可以从网上寻找镜像源进行下载:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.04/
- 虚拟机,我使用的VMware,可自行选择
- Ubuntu软件源更换为国内服务器,打开软件和更新->下载自->其他站点->中国->选择腾讯或者清华源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQqh3QmX-1681873505723)(./pictures/Ubuntu%E8%BD%AF%E4%BB%B6%E6%BA%90%E6%9B%B4%E6%94%B9.png)]
执行如下指令
sudo apt update
sudo apt upgrade
- 安装所需的软件包 (Ubuntu 18.04)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
sudo apt-get install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop git curl
sudo apt-get install u-boot-tools mtd-utils android-sdk-libsparse-utils android-sdk-ext4-utils device-tree-compiler gdisk m4 zlib1g-dev bison flex make libssl-dev gcc-multilib libghc-gnutls-dev swig liblz4-tool liblz4-tool libdw-dev dwarves bc cpio tar lz4 rsync ninja-build clang
- 配置git
git config --global user.name "First Last"
git config --global user.email "first.last@company.com"
git config --global http.postBuffer 1148586000
git config --global http.sslVerify false
- 解压安卓系统的发布包,提前把官网下载的Android源码发布包imx-android-13.0.0_1.0.0.tar.gz放入Ubuntu 相应文件夹下,之后的示例都是以放在用户根目录~为例
cd ~ (or any other directory you like)
tar xzvf imx-android-13.0.0_1.0.0.tar.gz
解压后修改imx_android_setup.sh文件
repo init -u https://github.com/nxp-imx/imx-manifest -b imx-android-13 -m imx-android-13.0.0_1.0.0.xml
替换为
repo init -u https://ghproxy.com/github.com/nxp-imx/imx-manifest -b imx-android-13 -m imx-android-13.0.0_1.0.0.xml
并在
if [ "$rc" != 0 ]; then
echo "---------------------------------------------------"
echo "-----Repo Init failure"
echo "---------------------------------------------------"
return 1
fi
和
rc=$?
if [ "$rc" != 0 ]; then
echo "---------------------------------------------------"
echo "------Repo sync failure"
echo "---------------------------------------------------"
return 1
fi
后各增加一行
find -name 'aosp-android-13.0.0_1.0.0.xml'|xargs perl -pi -e 's|https://android.googlesource.com/|https://aosp.tuna.tsinghua.edu.cn/|g'
构建IMX Android镜像
获取IMX Android release source code
接下来参照官方指导执行如下命令
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=${PATH}:~/bin
进入到~/bin目录下打开repo文件,修改repo地址REPO_URL为清华源
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/git-repo'
开始拉取源码
source ~/imx-android-13.0.0_1.0.0/imx_android_setup.sh
拉取过程中在获取github代码时可能会经常失败(如果没有本节下面的可以跳过),没关系,可以直接ctrl+c先打断进行,然后进入到~android_build/.repo/manifests目录下打开imx-android-13.0.0_1.0.0.xml,将如下网址:
<remote name="imx-android" fetch="https://github.com/nxp-imx-android" review="" />
<remote name="imx-linux-sdk" fetch="https://github.com/nxp-imx" review="" />
<remote name="imx-proprietary" fetch="https:github.com/nxp/" review="" />
<remote name="wireless-regdb" fetch="https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/" review="" />
<remote name="github" fetch="https:github.com/" review="" />
替换为
<remote name="imx-android" fetch="https://ghproxy.com/github.com/nxp-imx-android" review="" />
<remote name="imx-linux-sdk" fetch="https://ghproxy.com/github.com/nxp-imx" review="" />
<remote name="imx-proprietary" fetch="https://ghproxy.com/github.com/nxp/" review="" />
<remote name="wireless-regdb" fetch="https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/" review="" />
<remote name="github" fetch="https://ghproxy.com/github.com/" review="" />
然后重新执行
source ~/imx-android-13.0.0_1.0.0/imx_android_setup.sh
或
repo sync
然后就是等待,第一次拉取有60G左右。
如果重新使用的是repo sync的方式后面可能还需要多个步骤,这是因为在imx_android_setup.sh最后有如下几个指令,将所有专有软件包imx-android-13.0.0_1.0.0.tar中部分内容复制到安卓构建文件夹~/android_build下面
# Copy all the proprietary packages to the android build folder
cp -r "$REL_PACKAGE_DIR"/vendor/nxp "$android_builddir"/vendor/
cp -r "$REL_PACKAGE_DIR"/EULA.txt "$android_builddir"
cp -r "$REL_PACKAGE_DIR"/SCR* "$android_builddir"
但是因为上述打断操作,执行不到这边,所以~/android_build里面就缺失了这些文件,就需要手动拷贝
- ~/imx-android-13.0.0_1.0.0/vendor/nxp 拷贝到 ~/android_build/vendor/ 下
- ~/imx-android-13.0.0_1.0.0/EULA.txt 拷贝到 ~/android_build/ 下
- ~/imx-android-13.0.0_1.0.0/SCR-android-13.0.0_1.0.0.txt 拷贝到 ~/android_build/ 下
默认情况下,在前面的命令完成执行后,当前的工作目录将更改为IMX安卓源代码根目录。把此目录导出为Android源码根目录环境变量
export MY_ANDROID=`pwd`
不过上述方式只对当前终端起作用,为避免之后每次都要重新把MY_ANDROID的路径配置一遍,可以直接把环境变量配置到全局配置
sudo vim /etc/profile
在文件末尾添加后保存退出
export MY_ANDROID='/home/dx/android_build'
构建Android镜像文件
首次编译环境准备
- 下载配置交叉编译工具链
从网址 https://developer.arm.com/downloads/-/gnu-a 下载 gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz, 放入Ubuntu解压并配置环境变量
sudo tar -xvJf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt
export AARCH64_GCC_CROSS_COMPILE=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
同样上述方式只对当前终端起作用,为避免之后每次都要重新把AARCH64_GCC_CROSS_COMPILE配置一遍,可以直接把环境变量配置到全局配置
sudo vim /etc/profile
在文件末尾添加后保存退出
export AARCH64_GCC_CROSS_COMPILE="/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-"
- 设置clang工具
sudo git clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/prebuilts/clang/host/linux-x86 /opt/prebuilt-android-clang
cd /opt/prebuilt-android-clang
sudo git checkout 0fc0715d9392ca616605c07750211d7ca71f4e36
export CLANG_PATH=/opt/prebuilt-android-clang
为避免之后每次都要重新把CLANG_PATH配置一遍,可以直接把环境变量配置到全局配置
sudo vim /etc/profile
在文件末尾添加后保存退出
export CLANG_PATH="/opt/prebuilt-android-clang"
- 开始构建镜像
此处注意内存最好分配大一些(或者交换分区配置大一些,这个方式我没有实测,我直接分配了28G内存),我是用-j2最大时候内存都占用了28G,内存不足会报错,编译报错时可以注意下是否在内存占用爆满后没多久就报错了。
然后参照官方指导执行如下命令,等待编译完成即可
cd ${MY_ANDROID}
source build/envsetup.sh
lunch evk_8mn-userdebug
./imx-make.sh -j2 2>&1 | tee build-log.txt
- 构建完成
构建完成则会在${MY_ANDROID}/out文件下找到构建好的镜像文件
烧录镜像文件
参考《ANDROID_13.0.0_1.0.0_DOCS》/《Android_Quick_Start_Guide.pdf》使用uuu方式下载,将8MNANOD4-EVK设置为为Download mode:SW1101设置为1000
进入镜像文件存放路径下
如在Ubuntu环境下烧录到EMMC则运行
sudo ./uuu_imx_android_flash.sh -f imx8mn -a -e -u ddr4 -d ddr4
如在Ubuntu环境下烧录到SD卡(>32G)则运行
sudo ./uuu_imx_android_flash.sh -f imx8mn -a -e -u ddr4 -d ddr4 -t sd -c 28
如在Windows环境下烧录到EMMC则运行
uuu_imx_android_flash.bat -f imx8mn -a -e -u ddr4 -d ddr4
如在Windows环境下烧录到SD卡(>32G)则运行
uuu_imx_android_flash.bat -f imx8mn -a -e -u ddr4 -d ddr4 -t sd -c 28
烧录完成则切换启动方式重新启动即可运行
启动后界面如下
串口调试信息输出