Home | History | Annotate | Download | only in kernel
      1 Bionic comes with a processed set of all of the uapi Linux kernel headers that
      2 can safely be included by userland applications and libraries.
      3 
      4 These clean headers are automatically generated by several scripts located
      5 in the 'bionic/kernel/tools' directory. The tools process the original
      6 unmodified kernel headers in order to get rid of many annoying
      7 declarations and constructs that usually result in compilation failure.
      8 
      9 The 'clean headers' only contain type and macro definitions, with the
     10 exception of a couple static inline functions used for performance
     11 reason (e.g. optimized CPU-specific byte-swapping routines).
     12 
     13 They can be included from C++, or when compiling code in strict ANSI mode.
     14 They can be also included before or after any Bionic C library header.
     15 
     16 Description of the directories involved in generating the parsed kernel headers:
     17 
     18   * 'external/kernel-headers/original/'
     19     Contains the uapi kernel headers found in the android kernel. Note this
     20     also includes the header files that are generated by building the kernel
     21     sources.
     22 
     23   * 'bionic/libc/kernel/uapi'
     24     Contains the cleaned kernel headers and mirrors the directory structure
     25     in 'external/kernel-headers/original/uapi/'.
     26 
     27   * 'bionic/libc/kernel/tools'
     28     Contains various Python and shell scripts used to get and re-generate
     29     the headers.
     30 
     31 The tools to get/parse the headers:
     32 
     33   * tools/generate_uapi_headers.sh
     34     Checks out the android kernel and generates all uapi header files.
     35     copies all the changed files into external/kernel-headers.
     36 
     37   * tools/clean_header.py
     38     Prints the clean version of a given kernel header. With the -u option,
     39     this will also update the corresponding clean header file if its
     40     content has changed. You can also process more than one file with -u.
     41 
     42   * tools/update_all.py
     43     Automatically update all clean headers from the content of
     44     'external/kernel-headers/original'.
     45 
     46 
     47 HOW TO UPDATE THE HEADERS WHEN NEEDED:
     48 ======================================
     49 
     50 IMPORTANT IMPORTANT:
     51 
     52   WHEN UPDATING THE HEADERS, ALWAYS CHECK THAT THE NEW CLEAN HEADERS DO
     53   NOT BREAK THE KERNEL <-> USER ABI, FOR EXAMPLE BY CHANGING THE SIZE
     54   OF A GIVEN TYPE. THIS TASK CANNOT BE EASILY AUTOMATED AT THE MOMENT
     55 
     56 Grab the latest headers from the android kernel by running this command:
     57 
     58   bionic/libc/kernel/tools/generate_uapi_headers.sh --download-kernel
     59 
     60 Next, run this command to copy the parsed files to bionic/libc/kernel/uapi:
     61 
     62   bionic/libc/kernel/tools/update_all.py
     63 
     64 Finally, run this command to regenerate the syscalls list:
     65 
     66   bionic/libc/tools/gensyscalls.py
     67 
     68 After this, you will need to build/test the tree to make sure that these
     69 changes do not introduce any errors.
     70