1. Android Partition 구조 자료수집
Android에서 구성되는 Partition의 구조가 어떻게 변화가 되고 있는지 궁금해서 관련자료들을 수집하고 간단하게 정리한다.
우선 Android의 Booting 부터 이해를 해야 될 것이며, OTA와 관련된 부분을 별도로 다시 보도록 하자.
1.1 Android Verified Boot(VBoot) 2.0
AVB(Android Verified Boot) or Verified Boot(VBoot)라고 하며, 일종의 Linux라고 하면 Security Boot라고 보면 될 것 같다.
- AVB 의 vbmeta 기본구조
boot/system/vendor를 같이 관리 목적이며, 상위에서 설명했듯이 Security Boot와 유사하다.
다만 3개의 Partition을 한번에 관리하는 것이 큰 목적이다.
더불어 system/vendor는 hashtree로 구성하여 좀 더 많은 보안정보를 넣고 마지막에 vbmeta에 대한 sign하는 Key 정보를 넣어 구성
- AVB의 VBMeta의 확장구조
boot/system/vendor를 같이 2개 이상으로 구성하고 싶다면 아래와 같이 Chained 연결하여 구성하여, OTA를 쉽게 구성할 수 있을 것이다.
구조를 보면 xyz Partition을 Public Key로 연결하는 구조
- Rollback Protection
VBmeta의 Rollback Index 와 RIL 값이 존재하며, 이는 OTA에서 Upgrade를 했을 경우 중요한 정보이다.
- Stored Rollback Index
- RIL #0: 상위 head 의 vbmeta의 Rollback Index 42
- RIL #1: 상위 tail 의 xyz Rollback index 101
상위와 같이 두개의 Rollback Index를 관리하며, 증가는 하며 이를 관리한다.
관련 tool은 avbtool 이 존재하며 세부내용은 아래링크참조
- Recommended Boot Flow
Stored Rollback Index가 Update되는 순간은 아래와 같이 Device Lock 이며, Key 값이 다르면, 이를 Update하는 것으로 보인다.
Boot Flow이지 OTA Flow가 아니므로 주의
vbmeta 와 a/b slot
https://android.googlesource.com/platform/external/avb/+/master/README.md
https://source.android.com/security/verifiedboot/avb
https://source.android.com/security/verifiedboot/avb
VBoot 2.0 초기 Mount
1.2 OTA(On The Air) Update
OTA를 보면 System Partition 과 Non System Partition으로 볼 수 있으며, Update하는 방법은 서로 다르다.
- 1. OTA System Update (A/B Slot)
우선 상위 AVB를 보면 vbmet 부분을 참조하면 될 것 같으며, boot/system/vendor 와 같이 Update되어진다.
출처
- 2. OTA Other Update
A/B Slot이 아니라 Block 기반의 OTA라고 하는데, 관련내용은 아래 참조
- OTA 기타 관련정보 및 관련소스
동적파티션 (Android 10 이후부터 지원가능)
기존까지는 정적파티션기반으로 되어왔는데, Android 10이후로 Partition 의 Size도 변경가능
2. Android의 Partition Tool 기능
Android에서 GPT 관련설정 Tool 과 관련정보수집
- bpt 의 GPT Table
bpt 의 tool에 json 설정하여 GPT Table을 만드는 방법
- GPT Table 정보
GPT Table의 기본이해
Android 아키텍처 구조