Google Nexus9 编译AOSP+ kernel

四年前的笔记,由于github不好登上去,可算搬到最后一篇了。今日已达上限15篇文章,明日发表。(2024.8.16)

Google-Nexus9-compile AOSP and kernel

write by 涂涂, commit by Lihua

Aosp上的f2fs

官方文档

https://source.android.google.cn/source/building-kernels?hl=zh-cn
https://source.android.google.cn/setup/build/building-kernels-deprecated

版本选择

AOSP:
android8.0不能刷nexus9,所以下载版本选择android-7.1.1_r39
内核:
nexus 9 代号volantis(flounder)
user_debug选择flounder
内核代码下载选择kernel/tegra

下载AOSP

参考地址:https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
mkdir ~/bin
PATH= ~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
##如果上述 URL 不可访问,可以用下面的:
##curl -sSL ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT’ |base64 -d > ~/bin/repo

chmod a+x ~/bin/repo
然后建立一个工作目录(名字任意)
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
初始化仓库:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
#如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
#REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’
如果需要某个特定的 Android 版本:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.1_r39
同步源码树(以后只需执行这条命令来同步):
repo sync

下载tegra-kernel

#下载tegra代码,由于google下不了,去ustc下载
git clone git://mirrors.ustc.edu.cn/aosp/kernel/tegra.git/

编译内核

只需要第一次切换
git checkout -b android-tegra-flounder-3.10-nougat origin/android-tegra-flounder-3.10-nougat

cd /mnt/tsy/WORKING_DIRECTORY

source build/envsetup.sh
lunch aosp_flounder-userdebug
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
cd /mnt/tsy/tegra
make flounder_defconfig
make -j24

#将编译结果替换aosp中的Image.gz-dtb
cp /mnt/tsy/tegra/arch/arm64/boot/Image.gz-dtb /mnt/tsy/WORKING_DIRECTORY/device/htc/flounder-kernel

参考linaro: https://source.android.google.cn/source/devices?hl=zh-cn

编译aosp

cd /mnt/tsy/WORKING_DIRECTORY
source build/envsetup.sh
lunch aosp_flounder-userdebug
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
make -j24

生成的结果在/mnt/tsy/WORKING_DIRECTORY/out/target/product/flounder中

刷机

解锁
进入开发者模式
开启usb权限
#第一次刷机,在WORKING_DIRECTORY下刷所有的镜像
adb reboot bootloader
fastboot flashall -w

后续的拷贝到笔记本上,只刷boot.img
adb reboot bootloader
fastboot flash boot boot.img
fastboot reboot

交叉编译

./arm/bin/clang -pie test.c -o test
刷完重启,测试
adb push sourceFile distDir

### 在 Ubuntu 系统上编译 AOSP 9 的具体步骤 #### 准备工作 为了成功编译 AOSP 9,在开始之前需要满足一些基本的硬件和软件需求。以下是具体的准备事项: - **硬件要求** 至少需要 16 GB 的内存,推荐使用更大的内存(如 32 GB 或更高)。构建过程中还需要至少 400 GB 的磁盘空间[^4]。 - **操作系统** 推荐使用 Ubuntu LTS 版本,虽然引用中提到的是 Ubuntu 22.04 和 20.04,但由于 AOSP 9 是较旧的版本,建议使用兼容性更好的 Ubuntu 18.04 LTS[^5]。 --- #### 步骤 1: 更新系统 确保系统的包管理器是最新的,并升级已有的软件包: ```bash sudo apt update && sudo apt upgrade -y ``` 这一步非常重要,因为它能减少后续可能遇到的一些依赖冲突问题[^1]。 --- #### 步骤 2: 安装必要的工具与依赖项 AOSP 需要一系列开发工具和库的支持。可以通过以下命令安装这些依赖项: ```bash sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 libncurses5-dev xz-utils libssl-dev python3 python3-pip python-setuptools unzip rsync subversion squashfs-tools bc kpartx debootstrap jq expect ccache -y ``` 如果目标设备需要调试功能,则还需额外安装 `adb` 工具: ```bash sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt update sudo apt install android-tools-adb ``` 完成安装后可通过 `adb version` 来确认是否正确安装[^3]。 --- #### 步骤 3: 创建并设置工作目录 创建一个新的文件夹用于存储 AOSP 源码,并切换到该目录下: ```bash mkdir ~/aosp-android-9 cd ~/aosp-android-9 ``` 初始化 Repo 工具以便于管理多个 Git 存储库: ```bash curl https://storage.googleapis.com/git-repo-downloads/repo > repo chmod a+x ./repo ``` --- #### 步骤 4: 下载 AOSP 源码 通过 Repo 初始化仓库并指定分支为 Android 9 (`pie`): ```bash ./repo init -u https://android.googlesource.com/platform/manifest -b pie ``` 随后同步源码至本地: ```bash ./repo sync --force-sync --no-tags --current-branch --jobs=8 ``` 注意:`--jobs=8` 参数表示同时开启 8 个线程速下载速度,可以根据 CPU 核心数调整数值[^5]。 如果某些模块未能正常下载,可以单独重新尝试: ```bash ./repo sync <module_name> ``` --- #### 步骤 5: 设置构建环境 进入源码根目录并载构建脚本: ```bash source build/envsetup.sh ``` 选择默认的目标产品配置(例如 Pixel 手机对应的 `aosp_arm64`): ```bash lunch aosp_arm64-eng ``` 其中 `-eng` 表示工程模式,适合开发者测试;生产环境中应改为 `-userdebug` 或 `-user`[^4]。 --- #### 步骤 6: 开始编译 启动实际的编译过程: ```bash make -j$(nproc) ``` 这里的参数 `-j$(nproc)` 动态计算核心数量以充分利用多核处理器性能。 完整编译时间取决于机器性能,通常需要几小时甚至更长时间。 --- #### 步骤 7: 启动模拟器或刷入真机 编译完成后可以在终端运行以下命令来启动内置的 Android 模拟器: ```bash emulator ``` 或者将生成的镜像刷入真实设备(需提前解锁 Bootloader 并连接 USB 调试): ```bash fastboot flashall -w ``` --- ### 注意事项 - 如果在同步阶段遇到网络问题,可以考虑更换国内镜像站点(如清华开源镜像站),替换 URL 即可。 - 对于初学者来说,可能会因为遗漏某步而导致失败,请严格按照顺序操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值