如何下载以及编译ACK?

一、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(旧版)构建

1
build/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
diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi
index 1d10d4f..f102702 100644
--- a/android/abi_gki_aarch64_xiaomi
+++ b/android/abi_gki_aarch64_xiaomi
@@ -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
diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg
index 093b3bee1c23..9abc368f6d92 100644
--- a/android/abi_gki_aarch64.stg
+++ b/android/abi_gki_aarch64.stg
@@ -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.stgandroid/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的更新的输出结果得来的。