Boot Mode |
@@ -154,7 +155,7 @@ being used, requirements for their placement in filesystem are as follows:
- All kernels should have built-in support for booting and mounting partitions.
-- Kernel modules should be loaded from a read-only partition.
+- Kernel modules must be loaded from a read-only partition.
- For devices required to have verified boot, kernel modules should be loaded
from verified partitions.
- Kernel modules should not be located in
/system
.
@@ -178,8 +179,8 @@ mounted in Recovery mode.
In Android 7.x and earlier, /vendor
and /odm
-partitions are not mounted early. In Android 8.0, to make
-module loading from these partitions possible, provisions have been made to
+partitions are not mounted early. In Android 8.x and higher, to
+make module loading from these partitions possible, provisions have been made to
mount partitions early for both
non-A/B and A/B devices. This also
ensures the partitions are mounted in both Android and
@@ -279,11 +280,11 @@ documentation in the kernel tree at
loading of kernel modules as soon as possible after kernel boot).
Android must have access to the filesystem(s) on which the modules reside. To
-enable, Android 8.0 supports mounting /system
,
+enable, Android 8.x and higher supports mounting /system
,
/vendor
, or /odm
as early as init
's first
stage (i.e before selinux is initialized). Device makers can use
device tree overlays to
@@ -340,9 +341,9 @@ requirement).
Early mounting device tree, VBoot
1.0
-In Android 8.0, init
parses the device tree and creates
-fstab
entries to mount the partition early during its first stage.
-An fstab entry takes the form:
+In Android 8.x and higher, init
parses the device tree and
+creates fstab
entries to mount the partition early during its first
+stage. An fstab
entry takes the form:
src mnt_point type mnt_flags fs_mgr_flags
@@ -577,10 +578,16 @@ DT blobs from user space, but instead recommends that vendors add the device
tree patching in the bootloader with the help of
libfdt
/libufdt
.
-In Android 7.x and earlier, Android did not require device tree support and
-did not provide recommendations regarding how vendors pass DT blobs to the
-kernel or where they store them. Android 8.0 recommends such support to keep the
-board–specific and SoC-only parts of the kernel separate.
+Support for DTOs in Android varies by Android release:
+
+ - Android 7.x and earlier did not require device tree support and did not
+ provide recommendations regarding how vendors pass DT blobs to the kernel or
+ where they store them.
+ - Android 8.x recommended such support to keep the board–specific and
+ SoC-only parts of the kernel separate.
+ - Android {{ androidPVersionNumber }} requires a DTBO partition to be
+ present and at least one DTO to be applied.
+
Partitioning requirements
Most Android devices today append the DT blob to the kernel at build time,
@@ -629,10 +636,11 @@ combined device tree to the kernel.
Device Tree Overlays.
Core kernel requirements
-Android 8.0 mandates a minimum kernel version and kernel configuration and
-checks them both in VTS as well as during an OTA. Android device kernels must
-enable the kernel .config
support along with the option to read the
-kernel configuration at runtime through procfs
.
+As of Android 8.0, Android mandates a minimum kernel version and kernel
+configuration and checks them both in VTS as well as during an OTA. Android
+device kernels must enable the kernel .config
support along with
+the option to read the kernel configuration at runtime through
+procfs
.
Kernel .config support
All device kernels must enable the entirety of
@@ -646,18 +654,29 @@ CONFIG_IKCONFIG_PROC=y
Kernel version
-Kernel version requirements:
+For Android {{ androidPVersionNumber }}, the minimum LTS kernel version
+requirements are 4.4.107, 4.9.84, and 4.14.42.
+
-- All SoCs productized in 2017 must launch with kernel 4.4 or newer.
-- All other SoCs launching new Android devices running Android 8.0 must use
-kernel 3.18 or newer.
-- Regardless of launch date, all SoCs with device launches on Android 8.0
-remain subject to kernel changes required to enable Treble.
-- Older Android devices released prior to Android 8.0 but that will be
-upgraded to Android 8.0 can continue to use their original base kernel version
-if desired.
+- All SoCs productized in 2018 must launch with kernel 4.9.84 or newer.
+- All other SoCs launching new Android devices running Android 8.x must use
+kernel 3.18 or newer. All other SoCs launching new Android devices running
+Android {{ androidPVersionNumber }} must use kernel 4.4.107 or newer.
+- Device kernels based on 4.14 must include the 4.14.42 or later LTS release.
+
+- Regardless of launch date, all SoCs with device launches on Android 8.x
+and higher remain subject to the kernel changes required to enable Treble.
+- Older Android devices that will be upgraded to Android 8.x or
+{{ androidPVersionNumber }} can continue to use their original base kernel
+version if desired.
+For details on LTS kernels, refer to
+Long-term
+stable kernels and
+Android
+Common Kernels
+
Device tree support
Device tree support in the kernel must be enabled and bootloaders must pass
the hardware description in the form of device tree to the kernel (unless the
@@ -686,12 +705,11 @@ changelist.
debugfs
. It may be enabled, but VTS testing may be done with
debugfs
unmounted.
-Beyond Android 8.0
-Android 8.0 recommends any board–specific kernel functionality to be in the
-form of loadable kernel modules and device–tree overlays. The rest of the kernel
-is treated monolithically with respect to Android (whether or not is it is
-actually a monolithic kernel, or parts of it are compiled as kernel modules).
-
+Future Android versions
+The current Android release recommends that all board–specific code is built
+and shipped as kernel modules in devices. The rest of the kernel is treated
+monolithically with respect to Android (whether or not is it is actually a
+monolithic kernel, or parts of it are compiled as kernel modules).
This monolithic kernel is an SoC kernel that can boot on the SoC vendor's
reference hardware but nothing beyond that. Today, SoC kernels are treated
@@ -706,7 +724,7 @@ contributing to the same SoC kernel.
fragmented over time, across Android releases, and across ODMs.
-Figure 1. Device kernel replication.
+Figure 1. Device kernel replication
Figure 1 shows the following:
@@ -723,14 +741,14 @@ Figure 2 (below) illustrates how the workflow will change in an ideal,
unified–per–SoC–kernel scenario:
-Figure 2. Android 8.0 and higher device
-kernels.
+Figure 2. Android 8.x and higher device
+kernels
This is intended to solve the problem of fragmented kernel repos by
recommending and working with device manufacturers to stay up to date with the
-common SoC kernel. Android 8.0 provides all possible options to ODMs to help
-them avoid maintaining their own SoC kernels and instead rely on the common SoC
-kernel for LTS upgrades/bug fixes/security patches/etc.
+common SoC kernel. Android 8.x and higher provides all possible options to ODMs
+to help them avoid maintaining their own SoC kernels and instead rely on the
+common SoC kernel for LTS upgrades/bug fixes/security patches/etc.
As a start, we want to facilitate all ODMs/vendors using a single kernel
source for an SoC. In the future, we want to move towards a single binary
diff --git a/en/devices/architecture/kernel/releases.html b/en/devices/architecture/kernel/releases.html
index 612922d9..1d06b82d 100644
--- a/en/devices/architecture/kernel/releases.html
+++ b/en/devices/architecture/kernel/releases.html
@@ -57,7 +57,7 @@ created, with the first LTS kernel (2.6.16) released in 2006. Since then, a new
LTS kernel has been selected once a year and kernel community maintains that
kernel for a minimum of 2 years.
-At the time of this writing, the LTS kernels are the 4.4.y and 4.9.y
+
At the time of this writing, the LTS kernels are the 4.4.y, 4.9.y, and 4.14.y
releases, and a new kernel is released weekly. Due to the needs of some users
and distributions, a few additional older kernels are maintained by kernel
developers at a slower release cycle. Information about all long-term stable
diff --git a/en/devices/architecture/kernel/reqs-interfaces.html b/en/devices/architecture/kernel/reqs-interfaces.html
index 82349f7b..53fbf656 100644
--- a/en/devices/architecture/kernel/reqs-interfaces.html
+++ b/en/devices/architecture/kernel/reqs-interfaces.html
@@ -4,6 +4,7 @@
+ {% include "_versions.html" %}