xref: /aosp_15_r20/bionic/libc/kernel/README.md (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker# Bionic Kernel Header Files
2*8d67ca89SAndroid Build Coastguard Worker
3*8d67ca89SAndroid Build Coastguard WorkerBionic comes with a processed set of all of the uapi Linux kernel headers that
4*8d67ca89SAndroid Build Coastguard Workercan safely be included by userland applications and libraries.
5*8d67ca89SAndroid Build Coastguard Worker
6*8d67ca89SAndroid Build Coastguard WorkerThese clean headers are automatically generated by several scripts located
7*8d67ca89SAndroid Build Coastguard Workerin the `tools/` directory. The tools process the original
8*8d67ca89SAndroid Build Coastguard Workerunmodified kernel headers in order to get rid of many annoying
9*8d67ca89SAndroid Build Coastguard Workerdeclarations and constructs that usually result in compilation failure.
10*8d67ca89SAndroid Build Coastguard Worker
11*8d67ca89SAndroid Build Coastguard WorkerThe 'clean headers' only contain type and macro definitions, with the
12*8d67ca89SAndroid Build Coastguard Workerexception of a couple static inline functions used for performance
13*8d67ca89SAndroid Build Coastguard Workerreason (e.g. optimized CPU-specific byte-swapping routines).
14*8d67ca89SAndroid Build Coastguard Worker
15*8d67ca89SAndroid Build Coastguard WorkerThey can be included from C++, or when compiling code in strict ANSI mode.
16*8d67ca89SAndroid Build Coastguard WorkerThey can be also included before or after any Bionic C library header.
17*8d67ca89SAndroid Build Coastguard Worker
18*8d67ca89SAndroid Build Coastguard WorkerDescription of the directories involved in generating the parsed kernel headers:
19*8d67ca89SAndroid Build Coastguard Worker
20*8d67ca89SAndroid Build Coastguard Worker  * `external/kernel-headers/original/uapi/`
21*8d67ca89SAndroid Build Coastguard Worker    Contains the uapi kernel headers found in the Android kernel. Note this
22*8d67ca89SAndroid Build Coastguard Worker    also includes the header files that are generated by building the kernel
23*8d67ca89SAndroid Build Coastguard Worker    sources.
24*8d67ca89SAndroid Build Coastguard Worker
25*8d67ca89SAndroid Build Coastguard Worker  * `external/kernel-headers/original/scsi/`
26*8d67ca89SAndroid Build Coastguard Worker    Contains copies of the kernel scsi header files. These where never
27*8d67ca89SAndroid Build Coastguard Worker    made into uapi files, but some user space code expects that these
28*8d67ca89SAndroid Build Coastguard Worker    headers are available.
29*8d67ca89SAndroid Build Coastguard Worker
30*8d67ca89SAndroid Build Coastguard Worker  * `external/kernel-headers/modified/scsi/`
31*8d67ca89SAndroid Build Coastguard Worker    Contains hand-modified versions of a few files from `original/scsi/`
32*8d67ca89SAndroid Build Coastguard Worker    that removes the kernel specific code from these files so they can
33*8d67ca89SAndroid Build Coastguard Worker    be used as uapi headers. The tools to process the kernel headers will
34*8d67ca89SAndroid Build Coastguard Worker    warn if any scsi header files have changed and require new versions
35*8d67ca89SAndroid Build Coastguard Worker    to be hand-modified.
36*8d67ca89SAndroid Build Coastguard Worker
37*8d67ca89SAndroid Build Coastguard Worker  * `bionic/libc/kernel/uapi/`
38*8d67ca89SAndroid Build Coastguard Worker    Contains the cleaned kernel headers and mirrors the directory structure
39*8d67ca89SAndroid Build Coastguard Worker    in `external/kernel-headers/original/uapi/`.
40*8d67ca89SAndroid Build Coastguard Worker
41*8d67ca89SAndroid Build Coastguard Worker  * `bionic/libc/kernel/tools/`
42*8d67ca89SAndroid Build Coastguard Worker    Contains various Python and shell scripts used to get and re-generate
43*8d67ca89SAndroid Build Coastguard Worker    the headers.
44*8d67ca89SAndroid Build Coastguard Worker
45*8d67ca89SAndroid Build Coastguard WorkerThe tools to get/parse the headers:
46*8d67ca89SAndroid Build Coastguard Worker
47*8d67ca89SAndroid Build Coastguard Worker  * `tools/generate_uapi_headers.sh`
48*8d67ca89SAndroid Build Coastguard Worker    Checks out the Android kernel and generates all uapi header files.
49*8d67ca89SAndroid Build Coastguard Worker    copies all the changed files into external/kernel-headers.
50*8d67ca89SAndroid Build Coastguard Worker
51*8d67ca89SAndroid Build Coastguard Worker  * `tools/clean_header.py`
52*8d67ca89SAndroid Build Coastguard Worker    Prints the clean version of a given kernel header. With the -u option,
53*8d67ca89SAndroid Build Coastguard Worker    this will also update the corresponding clean header file if its
54*8d67ca89SAndroid Build Coastguard Worker    content has changed. You can also process more than one file with -u.
55*8d67ca89SAndroid Build Coastguard Worker
56*8d67ca89SAndroid Build Coastguard Worker  * `tools/update_all.py`
57*8d67ca89SAndroid Build Coastguard Worker    Automatically update all clean headers from the content of
58*8d67ca89SAndroid Build Coastguard Worker    `external/kernel-headers/original/`.
59*8d67ca89SAndroid Build Coastguard Worker
60*8d67ca89SAndroid Build Coastguard Worker## How To Update The Headers
61*8d67ca89SAndroid Build Coastguard Worker
62*8d67ca89SAndroid Build Coastguard WorkerIMPORTANT IMPORTANT:
63*8d67ca89SAndroid Build Coastguard Worker
64*8d67ca89SAndroid Build Coastguard WorkerWHEN UPDATING THE HEADERS, ALWAYS CHECK THAT THE NEW CLEAN HEADERS DO
65*8d67ca89SAndroid Build Coastguard WorkerNOT BREAK THE KERNEL <-> USER ABI, FOR EXAMPLE BY CHANGING THE SIZE
66*8d67ca89SAndroid Build Coastguard WorkerOF A GIVEN TYPE. THIS TASK CANNOT BE EASILY AUTOMATED AT THE MOMENT.
67*8d67ca89SAndroid Build Coastguard Worker
68*8d67ca89SAndroid Build Coastguard WorkerDownload the Android mainline kernel source code:
69*8d67ca89SAndroid Build Coastguard Worker```
70*8d67ca89SAndroid Build Coastguard Worker  > mkdir kernel_src
71*8d67ca89SAndroid Build Coastguard Worker  > cd kernel_src
72*8d67ca89SAndroid Build Coastguard Worker  kernel_src> git clone https://android.googlesource.com/kernel/common/ -b android-mainline
73*8d67ca89SAndroid Build Coastguard Worker```
74*8d67ca89SAndroid Build Coastguard Worker
75*8d67ca89SAndroid Build Coastguard WorkerThe Android mainline kernel source has tags that indicate the kernel
76*8d67ca89SAndroid Build Coastguard Workerversion to which they correspond. The format of a tag is
77*8d67ca89SAndroid Build Coastguard Workerandroid-mainline-XXX, where XXX is the kernel version. For example,
78*8d67ca89SAndroid Build Coastguard Workerandroid-mainline-5.10 corresponds to linux stable kernel 5.10. To check out
79*8d67ca89SAndroid Build Coastguard Workera particular tag:
80*8d67ca89SAndroid Build Coastguard Worker```
81*8d67ca89SAndroid Build Coastguard Worker  kernel_src> cd common
82*8d67ca89SAndroid Build Coastguard Worker  kernel_src/common> git checkout tags/android-mainline-XXX
83*8d67ca89SAndroid Build Coastguard Worker```
84*8d67ca89SAndroid Build Coastguard Worker
85*8d67ca89SAndroid Build Coastguard WorkerIt is expected that a kernel update should only be performed on a valid tag.
86*8d67ca89SAndroid Build Coastguard WorkerFor testing purposes, it is possible that you can use the top of tree
87*8d67ca89SAndroid Build Coastguard Workerversion, but never use that as the basis for importing new kernel headers.
88*8d67ca89SAndroid Build Coastguard Worker
89*8d67ca89SAndroid Build Coastguard WorkerBefore running the command to import the headers, make sure that you have
90*8d67ca89SAndroid Build Coastguard Workerdone a lunch TARGET. The script uses a variable set by the lunch command
91*8d67ca89SAndroid Build Coastguard Workerto determine which directory to use as the destination directory.
92*8d67ca89SAndroid Build Coastguard Worker
93*8d67ca89SAndroid Build Coastguard WorkerAfter running lunch, run this command to import the headers into the Android
94*8d67ca89SAndroid Build Coastguard Workersource tree if there is a kernel source tree already checked out:
95*8d67ca89SAndroid Build Coastguard Worker```
96*8d67ca89SAndroid Build Coastguard Worker  bionic/libc/kernel/tools/generate_uapi_headers.sh --use-kernel-dir kernel_src
97*8d67ca89SAndroid Build Coastguard Worker```
98*8d67ca89SAndroid Build Coastguard Worker
99*8d67ca89SAndroid Build Coastguard WorkerRun this command to automatically download the latest version of the headers
100*8d67ca89SAndroid Build Coastguard Workerand import them if there is no checked out kernel source tree:
101*8d67ca89SAndroid Build Coastguard Worker```
102*8d67ca89SAndroid Build Coastguard Worker  # For testing only, not for use in production!
103*8d67ca89SAndroid Build Coastguard Worker  bionic/libc/kernel/tools/generate_uapi_headers.sh --download-kernel
104*8d67ca89SAndroid Build Coastguard Worker```
105*8d67ca89SAndroid Build Coastguard Worker
106*8d67ca89SAndroid Build Coastguard WorkerNext, run this command to copy the parsed files to bionic/libc/kernel/uapi:
107*8d67ca89SAndroid Build Coastguard Worker```
108*8d67ca89SAndroid Build Coastguard Worker  bionic/libc/kernel/tools/update_all.py
109*8d67ca89SAndroid Build Coastguard Worker```
110*8d67ca89SAndroid Build Coastguard Worker
111*8d67ca89SAndroid Build Coastguard WorkerAfter this, you will need to build/test the tree to make sure that these
112*8d67ca89SAndroid Build Coastguard Workerchanges do not introduce any errors.
113