xref: /aosp_15_r20/development/gki/kmi_abi_chk/README (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker
2*90c8c64dSAndroid Build Coastguard Worker#
3*90c8c64dSAndroid Build Coastguard Worker# How to build the KMI ABI test kernel module, kmi_sym.ko
4*90c8c64dSAndroid Build Coastguard Worker#
5*90c8c64dSAndroid Build Coastguard Worker
6*90c8c64dSAndroid Build Coastguard Worker1. Set up the GKI source.
7*90c8c64dSAndroid Build Coastguard Worker   # Set up and export GKI_DIR to be used for kernel module building
8*90c8c64dSAndroid Build Coastguard Worker   $ cd $GKI_DIR
9*90c8c64dSAndroid Build Coastguard Worker   $ repo init -u https://android.googlesource.com/kernel/manifest \
10*90c8c64dSAndroid Build Coastguard Worker       -b common-android12-5.10
11*90c8c64dSAndroid Build Coastguard Worker   $ repo sync
12*90c8c64dSAndroid Build Coastguard Worker   See "GKI Monthly Branch Handbook" for details.
13*90c8c64dSAndroid Build Coastguard Worker2. Build arm64 GKI under $GKI_DIR
14*90c8c64dSAndroid Build Coastguard Worker   $ BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh -j16
15*90c8c64dSAndroid Build Coastguard Worker3. Download a supported kernel symbol file, vmlinux.symvers, from GKI AB:
16*90c8c64dSAndroid Build Coastguard Worker   $ export GKI_BID=7618735
17*90c8c64dSAndroid Build Coastguard Worker   https://ci.android.com/builds/submitted/$GKI_BID/kernel_aarch64/latest
18*90c8c64dSAndroid Build Coastguard Worker   $ cp vmlinux.symvers $ANDROID_BUILD_TOP/development/gki/kmi_abi_chk/vmlinux.symvers-$GKI_BID
19*90c8c64dSAndroid Build Coastguard Worker4. Replace the Module.symvers just built with the supported kernel symbol file.
20*90c8c64dSAndroid Build Coastguard Worker   $ cp vmlinux.symvers $GKI_DIR/out/android12-5.10/common/Module.symvers
21*90c8c64dSAndroid Build Coastguard Worker5. Create the KMI symbol list include file:
22*90c8c64dSAndroid Build Coastguard Worker   $ cd development/gki/kmi_abi_chk
23*90c8c64dSAndroid Build Coastguard Worker   $ cp $GKI_DIR/out/android12-5.10/common/Module.symvers vmlinux.symvers-$GKI_BID
24*90c8c64dSAndroid Build Coastguard Worker   $ awk '{printf("\t.xword\t%s\n",$2)}' vmlinux.symvers-$GKI_BID >> kmi_sym_list-$GKI_BID.inc
25*90c8c64dSAndroid Build Coastguard Worker   Note that kmi_sym_list-7618735.inc included in the current directory is a
26*90c8c64dSAndroid Build Coastguard Worker   version modified from the one based on vmlinux.symvers of build 7618735, the
27*90c8c64dSAndroid Build Coastguard Worker   initial GKI 5.10 released in July, 2021. Search b/197035344 for details.
28*90c8c64dSAndroid Build Coastguard Worker6. Build the kernel module
29*90c8c64dSAndroid Build Coastguard Worker   $ make ARCH=arm64 CROSS_COMPILE=aarch64 LLVM=1 LLVM_IAS=1 LTO=thin
30*90c8c64dSAndroid Build Coastguard Worker
31*90c8c64dSAndroid Build Coastguard WorkerA few prebuilt test kernel modules, kmi_sym-*.ko, for arm64 GKI 5.10
32*90c8c64dSAndroid Build Coastguard Worker2021-07 and later builds is included under prebuilts/ directory.
33*90c8c64dSAndroid Build Coastguard Worker
34*90c8c64dSAndroid Build Coastguard Worker#
35*90c8c64dSAndroid Build Coastguard Worker# How to use/run KMI test kernel module, kmi_sym.ko, on GKI
36*90c8c64dSAndroid Build Coastguard Worker#
37*90c8c64dSAndroid Build Coastguard Worker
38*90c8c64dSAndroid Build Coastguard Worker1. Copy the test kernel module to the Android device
39*90c8c64dSAndroid Build Coastguard Worker   $ adb push kmi_sym.ko /data/local/tmp
40*90c8c64dSAndroid Build Coastguard Worker2. "Root" the Android device we'd like to run the test
41*90c8c64dSAndroid Build Coastguard Worker   $ adb root
42*90c8c64dSAndroid Build Coastguard Worker3. Check the kernel information on the device
43*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # uname -a
44*90c8c64dSAndroid Build Coastguard Worker   Linux localhost 5.10.43-android12-9-00005-g376ecc372342-ab7614753 #1 SMP PREEMPT Thu Aug 5 15:12:49 UTC 2021 aarch64
45*90c8c64dSAndroid Build Coastguard Worker4. Load the test kernel module
46*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # lsmod | grep kmi_sym
47*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # insmod /data/local/tmp/kmi_sym.ko; echo $?
48*90c8c64dSAndroid Build Coastguard Worker   0
49*90c8c64dSAndroid Build Coastguard Worker5. Verify the test kernel module is loaded successfully
50*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # lsmod | grep kmi_sym
51*90c8c64dSAndroid Build Coastguard Worker   kmi_sym                57344  0
52*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # dmesg | grep KMI
53*90c8c64dSAndroid Build Coastguard Worker   [ 1669.833480] 5317 KMI ABI symbols at 00000000d34c59ea
54*90c8c64dSAndroid Build Coastguard Worker6. Unload the test kernel module
55*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # rmmod kmi_sym; echo $?
56*90c8c64dSAndroid Build Coastguard Worker   0
57*90c8c64dSAndroid Build Coastguard Worker   emulator64_arm64:/ # dmesg | grep KMI
58*90c8c64dSAndroid Build Coastguard Worker   [ 1669.833480] 5317 KMI ABI symbols at 00000000d34c59ea
59*90c8c64dSAndroid Build Coastguard Worker   [ 1860.571944] Cleaning up KMI ABI.
60