pixel3 aosp编译

以下内容主要参考网络内容,按照实际验证的顺序和细节补充而成,使流程更清晰,可以傻瓜式照抄。

  1. 根据自己手机刷机前的版本信息,在 https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds 获取版本SP1A.210812.016.A1
    file
    后面repo init时,我们将要用这个版本号,获取准确的版本。

    repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r3
  2. 获取vendor驱动,从 https://developers.google.com/android/drivers?hl=zh-cn 中找到对应版本 https://link.zhihu.com/?target=https%3A//developers.google.com/android/drivers/%23crosshatchsp1a.210812.016.a1, 这个待会编译时,要解压到vendor下

  3. 安装git, repo:https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/

  4. 运行 repo init,这里考虑到网速的问题,我们使用清华的镜像地址。如果你没有网络困扰,也可以使用上面提到的google android官方地址:

    mkdir ~/work/aosp/
    cd ~/work/aosp/
    repo init -u
    https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r3
  5. repo sync -jxx , xx为你的虚拟软核数

  6. 更新vendor和驱动:

    cd ~/Downloads
    tar xvf qcom-crosshatch-*.tgz
    tar xvf google_devices-crosshatch-*.tgz
    cd ~/work/aosp/
    ~/Downloads/extract-qcom-crosshatch.sh
    ~/Downloads/extract-google_devices-crosshatch.sh
  7. 编译

    source build/envsetup.sh
    lunch 4(aosp_blueline-userdebug)
    m

    m 是构建代码的简单命令

  8. 安装adb kit,安装adb 和fastboot工具集,作者用的是Version 31.0.3-7562133 版本。

  9. 烧录下载

    adb reboot bootloader
    fastboot flashall -w

    flashall 会提示设置ANDROID_PRODUCT_OUT环境变量,设置成实际的out编译目录就好(如果是在windows烧录,就把整个目录下载到windows,然后设置成windows实际的out路径)。
    linux: export ANDROID_PRODUCT_OUT=/xxx/out/target/product/blueline
    windows: set ANDROID_PRODUCT_OUT=/xxx/out/target/product/blueline

  10. 构建内核(可选),可以参考https://zhuanlan.zhihu.com/p/448289040 的后半部分内容。

最后,如果你不想麻烦,也可以取用我们编译好的原生版本:
https://cdn.itranscloud.com/aosp/aosp_blueline-userdebug_12_SP1A.210812.016.A1.7z

ref:https://zhuanlan.zhihu.com/p/448289040

letsencrypt renew的认证路径

在某些重定向的配置场景中,所有请求都被proxy到了远端服务器,这时候certbot rewew的时候就因为无法远程操控well-known路径导致认证失败。
解决就是在proxy的本地创建认证目录:

# letsencrypt认证目录
location /.well-known/ {
    root  /data/wwwroot/xxx;
}

location /{
    # 其他目录的操作在这里
}

openwrt刷机固件基本知识

squashfs-factory.bin -- uboot 裸机第一次刷openwrt时用
squashfs-sysupgrade.bin -- 由openwrt升级到openwrt时用

官方固件的说明
xxx-preloader.bin -》 BL2
xxx-bl31-uboot.fip -》FIP
xxx-initramfs-recovery.itb -》包含rootfs image的运行在ram中的系统,用于flash还不完备时,加载在内存中做调试用,一般刷机不用
xxx-sysupgrade.bin -》 在系统升级页面中升级系统

docker启用ipv6

某些docker应用需要跟ipv6打交道时,就需要docker的网络能获得有效的ipv6地址。

  1. 我们首先要确认host主机自己有有效的ipv6地址
  2. docker 默认使用bridge网络,我们可以检查bridge的属性:docker network inspect bridge
    file
    正常的话应该是true,如果是false,就要先检查docker配置。

注意:如果host的ipv6发生过变化,docker服务(注意是服务,不是指某个容器)需要重启,才能重新获得正确的ipv6

QEMU 机器类型和兼容性【翻译】

如果您想要将最初在较旧的 QEMU 版本上启动的来宾迁移到较新版本的 QEMU,您需要确保两台机器实际上彼此兼容。一旦排除了根本无法迁移的设备之类的东西,并确保两个 QEMU 调用实际上创建了相同的虚拟硬件,这基本上可以归结为使用兼容的机器。

版本化机器类型

如果你只是想创建一台机器而不考虑迁移兼容性,你通常会这样做

qemu-system-ppc64 -machine pseries (...)

这将创建一个这种pseries类型的机器。但在本例中,pseries
实际上是该机器类型的最新版本的别名;
对于 6.2,这将是
pseries-6.2. 您可以通过以下方式找出哪些机器类型已版本化(以及给定二进制文件实际存在哪些机器类型)-machine ?

$ qemu-system-ppc64 -machine ?
Supported machines are:
40p                  IBM RS/6000 7020 (40p)
bamboo               bamboo
g3beige              Heathrow based PowerMAC
mac99                Mac99 based PowerMAC
mpc8544ds            mpc8544ds
none                 empty machine
pegasos2             Genesi/bPlan Pegasos II
powernv10            IBM PowerNV (Non-Virtualized) POWER10
powernv8             IBM PowerNV (Non-Virtualized) POWER8
powernv              IBM PowerNV (Non-Virtualized) POWER9 (alias of powernv9)
powernv9             IBM PowerNV (Non-Virtualized) POWER9
ppce500              generic paravirt e500 platform
pseries-2.1          pSeries Logical Partition (PAPR compliant)
pseries-2.10         pSeries Logical Partition (PAPR compliant)
pseries-2.11         pSeries Logical Partition (PAPR compliant)
pseries-2.12         pSeries Logical Partition (PAPR compliant)
pseries-2.12-sxxm    pSeries Logical Partition (PAPR compliant)
pseries-2.2          pSeries Logical Partition (PAPR compliant)
pseries-2.3          pSeries Logical Partition (PAPR compliant)
pseries-2.4          pSeries Logical Partition (PAPR compliant)
pseries-2.5          pSeries Logical Partition (PAPR compliant)
pseries-2.6          pSeries Logical Partition (PAPR compliant)
pseries-2.7          pSeries Logical Partition (PAPR compliant)
pseries-2.8          pSeries Logical Partition (PAPR compliant)
pseries-2.9          pSeries Logical Partition (PAPR compliant)
pseries-3.0          pSeries Logical Partition (PAPR compliant)
pseries-3.1          pSeries Logical Partition (PAPR compliant)
pseries-4.0          pSeries Logical Partition (PAPR compliant)
pseries-4.1          pSeries Logical Partition (PAPR compliant)
pseries-4.2          pSeries Logical Partition (PAPR compliant)
pseries-5.0          pSeries Logical Partition (PAPR compliant)
pseries-5.1          pSeries Logical Partition (PAPR compliant)
pseries-5.2          pSeries Logical Partition (PAPR compliant)
pseries-6.0          pSeries Logical Partition (PAPR compliant)
pseries-6.1          pSeries Logical Partition (PAPR compliant)
pseries              pSeries Logical Partition (PAPR compliant) (alias of pseries-6.2)
pseries-6.2          pSeries Logical Partition (PAPR compliant) (default)
ref405ep             ref405ep
sam460ex             aCube Sam460ex
taihu                taihu
virtex-ml507         Xilinx Virtex ML507 reference design

pseries-x.y如您所见,旧版本有多种机器类型;这些旨在提供与使用较旧的 QEMU 版本创建的默认机器兼容的配置。例如,如果您想要迁移在pseries使用 QEMU 5.1 创建的计算机上运行的来宾,则接收 QEMU 需要启动

qemu-system-ppc64 -machine pseries-5.1 (...)

支持的机器类型

注意:以下内容适用于上游 QEMU。发行版可能在其构建中支持不同版本的机器类型。

此列表自 QEMU 6.2 起;将来可能会添加新版本的机器类型,有时旧版本的机器类型会被弃用和删除。下一个 QEMU 版本的机器类型通常在发布周期的早期引入(至少,这是目标......)

arm,aarch64

virt机器类型支持 2.6 以后的版本。

m68k

virt机器类型支持 6.0 以后的版本。

ppc64

pseries机器类型支持 2.1 之后的版本。

s390x

s390-ccw-virtio机器类型支持 2.4 以后的版本。

i386、x86_64

机器pc-i440fx类型支持1.4以后的版本(以前还有更老的版本,但是已经被删除了),而pc-q35机器类型支持2.4以后的版本。

这里还需要考虑另一件事:pc机器类型别名(从 QEMU 6.2 开始)指向最新的pc-i440fx机器类型;如果您想要最新的
pc-q35机器类型,则必须使用q35.

如何使用这个

如果您只想启动 QEMU 实例并再次关闭它,而不希望将其迁移到任何地方,则可以坚持使用默认机器类型。但是,如果您以后可能想要迁移机器,那么明确指定版本化机器类型可能是个好主意,这样您就不必记住启动时使用的 QEMU 版本。

或者直接使用libvirt之类的管理软件,它会自动帮你把机器类型扩展到最新版本,以后就不用担心了。

兼容机种的使用部分就到此结束;后续文章将介绍如何实际实施。

ref:https://people.redhat.com/~cohuck/2022/01/05/qemu-machine-types.html