8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
来源: https://pengzhangdev.github.io/android8-partiton-table/
差异简述¶
在Android8.0之后, 就存在两套分区表, 分别对应的是A/B系统和非A/B系统.非A/B系统的分区表与之前分区表一样, 没有变化.
A/B系统的分区表, 是本文的主要描述点.
所谓的A/B系统, 是指设备上存在两套系统, 其分区名也是存在_a 和 _b 的区别.两套系统中, 只有一套为active, 运行状态, 而升级则执行在另一套系统的分区中. 从而达到, 不管升级成功与否, 总有一套系统保证能使用.
而刷机, 包括挂时的分区表中, 都不会添加后缀(_a或_b). 只有在fastboot刷机时, 或者在init挂载时, 找到active的slot, 在指定分区名字后面添加后缀并挂载. 所以, 单纯从源码或者刷机包是无法指定哪些分区被指定为A/B了.
A/B系统带来的好处是:无缝升级, 不需要再进入recovery进行升级.
双系统备份, 不管是系统升级失败, 还是被破坏, 都可以切换到另一个系统, 确保用户设备的正常使用.
分区表与其内容¶
下面主要针对pixel设备进行分析, 也就是Android8的源码中marlin设备.
刷机文件和刷机方式¶
首先我们看下android官网提供的marlin设备刷机文件. 下面是基带和bootloader的刷机文件.
zip包中的文件如下.
如果单纯按照之前对该zip包文件的理解, 文件名字就是对应的分区名. 然而在A/B系统中, 却并不是如此. 而是按照一定的规则查找A/B分区.
首先, 最先注意到的是两个system大小不一致, 但是这个展开来讲有点多, 我们先把A/B系统刷机的第一个规则介绍以下, 代码在后文介绍第二个规则时可以同时看到.
A/B系统fastboot刷机时, 如果没有指定slot, 则默认刷入的是active的slot, 比如如果bootloader标记为slot A 为active, 则所有分区默认刷入slot A, 也就是说boot_a, system_a 等. 但是, 如果bootloader反馈某个分区没有区分A/B, 则默认直接刷入该分区. 比如 vendor 无区分A/B, 则直接刷入vendor.
然后, 我们关注下system.img和system_other.img, 如果单纯理解为这两个image分别刷入A/B分区, 则大小也完全对应不上. 大小问题, 我们稍后再看, 先研究下system_other.img刷入哪个分区.
static struct {
char img_name[17];
char sig_name[17];
char part_name[9];
bool is_optional;
bool is_secondary;
} images[] = {
{"boot.img", "boot.sig", "boot", false, false},
{"boot_other.img", "boot.sig", "boot", true, true},
{"recovery.img", "recovery.sig", "recovery", true, false},
{"system.img", "system.sig", "system", false, false},
{"system_other.img", "system.sig", "system", true, true},
{"vendor.img", "vendor.sig", "vendor", true, false},
{"vendor_other.img", "vendor.sig", "vendor", true, true},
};
其中 is_secondary 如果为true, 则意味着输入非activ