
一、ACK代码下载
1 2 3
| mkdir android-kernel && cd android-kernel repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH repo sync
|
如需查看可与之前的“repo init”命令搭配使用的 repo 分支 (BRANCH) 列表,请参阅内核分支及其构建系统
本文将以android15-6.6的内核代码为例作为演示:
1 2 3
| mkdir android-kernel && cd android-kernel repo init -u https://android.googlesource.com/kernel/manifest -b common-android15-6.6 repo sync
|
二、ACK编译
2.1 使用 Bazel (Kleaf) 构建
1
| tools/bazel build //common:kernel_aarch64_dist
|
2.2 使用 build.sh(旧版)构建
注意通用内核是通用的可自定义内核,因此不会定义默认配置。如需了解如何为通用内核指定 build 配置,请参阅自定义内核 build。例如,如需为 aarch64 平台构建 GKI 内核,请运行以下命令:
$ BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
2.3 android15-6.6 ack编译
1
| tools/bazel build //common:kernel_aarch64_dist
|

三、更改KMI接口
在使用了GKI的项目中,当我们使用的一些函数没有在KMI接口中放出来,此时我们需要更改ack的abi并提交给google,比如我收到了这样的请求,需要向google申请白名单(mmc_set_blocklen和nr_free_buffer_pages函数)
3.1 修改android/abi_gki_aarch64_xiaomi
1 2 3 4 5 6 7 8 9 10 11 12 13
|
@@ -97,6 +97,8 @@ __tracepoint_android_vh_mem_cgroup_charge __tracepoint_android_vh_filemap_add_folio __tracepoint_android_vh_shrink_node + mmc_set_blocklen + nr_free_buffer_pages #required by metis.ko module __traceiter_android_vh_rwsem_read_wait_start
|
3.2 更新abi
1
| tools/bazel run //common:kernel_aarch64_abi_update
|

3.3 提交代码
在执行完成第3.2步骤后,android/目录下会出现一个文件的改动(xml或者是stg文件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
@@ -340138,6 +340138,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x3e10b518 } +function { + id: 0x9c0fbfcd + return_type_id: 0x6720d32f + parameter_id: 0x026525e9 + parameter_id: 0x4585663f +} function { id: 0x9c0ff674 return_type_id: 0x6720d32f @@ -398549,6 +398555,15 @@ elf_symbol { type_id: 0x9326478c full_name: "mmc_send_tuning" } +elf_symbol { + id: 0x0654cb12 + name: "mmc_set_blocklen" + is_defined: true + symbol_type: FUNCTION + crc: 0x74d61bc3 + type_id: 0x9c0fbfcd + full_name: "mmc_set_blocklen" +} elf_symbol { id: 0xa466e3d3 name: "mmc_set_bus_mode" @@ -399960,6 +399975,15 @@ elf_symbol { type_id: 0x4585663f full_name: "nr_cpu_ids" } +elf_symbol { + id: 0xb8d3aa55 + name: "nr_free_buffer_pages" + is_defined: true + symbol_type: FUNCTION + crc: 0x27fa66e1 + type_id: 0x31accd53 + full_name: "nr_free_buffer_pages" +} elf_symbol { id: 0x1cfcf940 name: "nr_ipi_get" @@ -433319,6 +433343,7 @@ interface { symbol_id: 0xd0f0d35f symbol_id: 0xfb31b7b7 symbol_id: 0xfe0604fe + symbol_id: 0x0654cb12 symbol_id: 0xa466e3d3 symbol_id: 0x836750b8 symbol_id: 0x1398d9e3 @@ -433475,6 +433500,7 @@ interface { symbol_id: 0xe3b94e5f symbol_id: 0x16059afd symbol_id: 0x1560f116 + symbol_id: 0xb8d3aa55 symbol_id: 0x1cfcf940 symbol_id: 0x3704ac3f symbol_id: 0xea37502b
|
将android/abi_gki_aarch64.stg和android/abi_gki_aarch64_xiaomi文件提交到google
1 2 3
| git add android/abi_gki_aarch64_xiaomi android/abi_gki_aarch64.stg git commit -s git push aosp HEAD:refs/for/android15-6.6
|
commit的信息模板如下:
1 2 3 4 5 6 7 8 9 10
| ANDROID: GKI: update symbol list file for xiaomi
2 function symbol(s) added 'int mmc_set_blocklen(struct mmc_card*, unsigned int)' 'unsigned long nr_free_buffer_pages()'
bug:xxxxxx
Change-Id: I4bbb6d359d36e3ff768ea2ef0485a9d9f74b7620 Signed-off-by: p-liuqi1 <p-liuqi1@xiaomi.com>
|
中间显示的 “2 function symbol(s) added”这部分,是由第3.2步骤的abi_update的更新的输出结果得来的。