Версия ядра linux android

На каком Android работает ядро ​​Linux?

Есть ли список версий ядра, которые есть в каждой версии Android AOSP?

Или скажем, какую версию / proc / version выложат.

Версия для Linux в AOSP

 Android Version |API Level |Linux Version in AOSP |Header Version ---------------------------------------------------------------------------------------- 1.5 Cupcake |3 |(2.6.27) | 1.6 Donut |4 |(2.6.29) |2.6.18 2.0/1 Eclair |5-7 |(2.6.29) |2.6.18 2.2.x Froyo |8 |(2.6.32) |2.6.18 2.3.x Gingerbread |9, 10 |(2.6.35) |2.6.18 3.x.x Honeycomb |11-13 |(2.6.36) |2.6.18 4.0.x Ice Cream San|14, 15 |(3.0.1) |2.6.18 4.1.x Jelly Bean |16 |(3.0.31) |2.6.18 4.2.x Jelly Bean |17 |(3.4.0) |2.6.18 4.3 Jelly Bean |18 |(3.4.39) |2.6.18 4.4 Kit Kat |19, 20 |(3.10) |2.6.18 5.x Lollipop |21, 22 |(3.16.1) |3.14.0 6.0 Marshmallow |23 |(3.18.10) |3.18.10 7.0 Nougat |24 | 3.18.48 4.4.0 |4.4.1 7.1 Nougat |25 | ? |4.4.1 8.0 Oreo |26 | 3.18.72 4.4.83 4.9.44 |4.10.0 8.1 Oreo |27 | 3.18.70 4.4.88 4.9.56 |4.10.0 9.0 Pie |28 | 4.4.146 4.9.118 4.14.61 |4.15.0 10.0 Q |29 | 4.9.191 4.14.142 4.19.71|5.0.3 
  • Википедия История версий Android (в скобках; не могу найти ее источник)
  • Android / ядро ​​/ общий / Makefile (Linux в AOSP)
  • android / платформа / external / kernel-headers / original / uapi / linux / version.h (заголовки Linux, используемые Bionic в AOSP)

Примечание: другие «дистрибутивы» Android могут работать с разными версиями ядра.

Любой желающий может исправить и расширить эту таблицу. Пожалуйста, продолжайте форматирование.

Почему ОС Android / версия ядра не совпадают

OEM-производители, как правило, поставляют свои основные обновления Android с ядром, аналогичным тому, с которым устройство было выпущено изначально. Это, скорее всего, позволит избежать проблем несовместимости оборудования и драйверов с более новым ядром. Например, устройство, которое было обновлено для работы с Android 8.0 Oreo, но первоначально поставлялось с 6.0 Marshmallow, все еще может работать под управлением Linux 3.18.x вместо Linux 4.10.x.

Требования Vendor Test Suite (VTS) для версии Linux

Один аспект, который был до OEM — это версия ядра Linux, но это меняется с Android Oreo.

До тех пор, пока OEM-производитель мог проходить сертификационные тесты, которые выкладывает Google, им было все равно, какая версия ядра использовалась в новом устройстве. Как правило, это не было проблемой, так как большинство OEM-производителей использовали бы ту же версию ядра для того поколения, которую использовали другие OEM-производители, поскольку она сильно привязана к тому, что поддерживают драйверы оборудования. Тем не менее, некоторые провалились в трещины, и это стало причиной проблем с безопасностью. Это то, что Google воспринимает всерьез в последнее время, поэтому имеет смысл, что они захотят начать поручать это.

Начиная с этого года со смартфонами, которые поставляются с Android Oreo, Google требует, чтобы все SoC, выпущенные в 2017 году, были запущены с ядром 4.4 или новее.

В настоящее время существующие устройства, которые обновлены до Android Oreo, должны работать только на ядре версии 3.18 или новее, и их не нужно обновлять для поддержки Project Treble.

Согласно https://android.googlesource.com/platform/test/vts-testcase/kernel/ , было требование к версии Linux, VtsKernelConfigTest или VtsKernelVersionTest, на 8.0, 8.1 и 9.0, но позже удалено на 10.0. Для 8.0 и 8.1 требуется версия 3.18, 4.4 или 4.9. Для 9.0 требуется версия не ниже 4.4.107, 4.9.84 или 4.14.42.

Читайте также:  Настройка dns альт линукс

Более техническая и свежая информация доступна непосредственно на веб-сайте AOSP: https://source.android.com/devices/architecture/kernel/core-kernel-reqs

Там нет жестких быстрых правил! Например, ICS / JB на Zte Blade использовал ядро ​​2.6.35, ICS на Sony Xperia Mini было 2.6.32 . возьмите это с щепоткой соли в качестве единственного ориентира 🙂

Я могу полностью понять, почему разные устройства, работающие на одной и той же версии Android, будут работать с разными ядрами, но эта таблица является лишь практическим правилом, и да, я бы хотел немного зерна с моим эмпирическим правилом =)

Кроме того, когда устройство выпускается с определенной версией Android и ядром, а затем версия Android обновляется производителем, версия ядра в основном сохраняется в исходной версии с исправлениями.

Обратите внимание, что даже Google не следит за этим. Только что проверил эмулятор с API 26 и ядро ​​3.18.56+

Источник

Which Android runs which Linux kernel?

Is there a list of which kernel version comes in each Android AOSP version? Or lets say, which version /proc/version would spit out.

1 Answer 1

Linux version in AOSP

Android Version API Level Linux Version in AOSP Header Version
1.5 Cupcake 3 (2.6.27)
1.6 Donut 4 (2.6.29) 2.6.18
2.0/1 Eclair 5-7 (2.6.29) 2.6.18
2.2.x Froyo 8 (2.6.32) 2.6.18
2.3.x Gingerbread 9, 10 (2.6.35) 2.6.18
3.x.x Honeycomb 11-13 (2.6.36) 2.6.18
4.0.x Ice Cream San 14, 15 (3.0.1) 2.6.18
4.1.x Jelly Bean 16 (3.0.31) 2.6.18
4.2.x Jelly Bean 17 (3.4.0) 2.6.18
4.3 Jelly Bean 18 (3.4.39) 2.6.18
4.4 Kit Kat 19, 20 (3.10) 2.6.18
5.x Lollipop 21, 22 (3.16.1) 3.14.0
6.0 Marshmallow 23 (3.18.10) 3.18.10
7.0 Nougat 24 3.18.48 4.4.0 4.4.1
7.1 Nougat 25 ? 4.4.1
8.0 Oreo 26 3.18.72 4.4.83 4.9.44 4.10.0
8.1 Oreo 27 3.18.70 4.4.88 4.9.56 4.10.0
9.0 Pie 28 4.4.146 4.9.118 4.14.61 4.15.0
10.0 Q 29 4.9.191 4.14.142 4.19.71 5.0.3
  • Wikipedia Android version history (in parentheses; can’t find its source)
  • android / kernel / common / Makefile (the Linux in AOSP)
  • android / platform / external / kernel-headers / original / uapi / linux / version.h (the Linux headers as used by Bionic in AOSP)
Читайте также:  What is ulimit on linux

Note: other “distributions” of Android might run different kernel versions.

Anyone is welcome to correct and expand this table. Please keep formatting.

Why Android OS/kernel version mismatches

OEMs tend to ship their major Android updates with a similar kernel to the one the device was initially released with. This is most likely to avoid hardware and driver incompatibility issues with a newer kernel. For example, a device that has been updated to run Android 8.0 Oreo but originally shipped with 6.0 Marshmallow may still be running Linux 3.18.x instead of Linux 4.10.x.

Vendor Test Suite (VTS) requirements on Linux version

One aspect that has been up to the OEM is the Linux kernel version but this is changing with Android Oreo.

As long as the OEM was able to pass the certification tests that Google lays out, then they didn’t care what kernel version was used in a new device. This generally wasn’t an issue as most OEMs would use the same version of the kernel for that generation that other OEMs were using, as it is tied heavily to what the hardware drivers support. However, some had been falling through the cracks and this started to cause security issues. This is something that Google has been taking seriously lately so it makes sense that they would want to start mandating this.

Starting this year with smartphones which ship with Android Oreo, Google is requiring that all SoCs productized in 2017 must launch with kernel 4.4 or newer.

Currently existing devices that are upgraded to Android Oreo are only required to run kernel version 3.18 or newer, and will not have to be upgraded to support Project Treble.

Источник

Читайте также:  Доклад об операционной системе линукс

How to get the version of the Linux kernel using Android?

Not 100% sure, but I think calling «uname -r» would require root access. There is anyways a less dirty way to do this, which is :

System.getProperty("os.version"); 

If you want the full Kernel version has shown in Android about phone, this is the file to parse: /proc/version

Here is an extract of Android source code that retrieves the actual kernel version string:

private String getFormattedKernelVersion() < String procVersionStr; try < procVersionStr = readLine(FILENAME_PROC_VERSION); final String PROC_VERSION_REGEX = "\\w+\\s+" + /* ignore: Linux */ "\\w+\\s+" + /* ignore: version */ "([^\\s]+)\\s+" + /* group 1: 2.6.22-omap1 */ "\\(([^\\s@]+(?:@[^\\s.]+)?)[^)]*\\)\\s+" + /* group 2: (xxxxxx@xxxxx.constant) */ "\\((?:[^(]*\\([^)]*\\))?[^)]*\\)\\s+" + /* ignore: (gcc ..) */ "([^\\s]+)\\s+" + /* group 3: #26 */ "(?:PREEMPT\\s+)?" + /* ignore: PREEMPT (optional) */ "(.+)"; /* group 4: date */ Pattern p = Pattern.compile(PROC_VERSION_REGEX); Matcher m = p.matcher(procVersionStr); if (!m.matches()) < Log.e(LOG_TAG, "Regex did not match on /proc/version: " + procVersionStr); return "Unavailable"; >else if (m.groupCount() < 4) < Log.e(LOG_TAG, "Regex match on /proc/version only returned " + m.groupCount() + " groups"); return "Unavailable"; >else < return (new StringBuilder(m.group(1)).append("\n").append( m.group(2)).append(" ").append(m.group(3)).append("\n") .append(m.group(4))).toString(); >> catch (IOException e) < Log.e(LOG_TAG, "IO Exception when getting kernel version for Device Info screen", e); return "Unavailable"; >> 

Invoke uname -r and read its output from stdout . It shouldn’t be too complicated. The output is just the version number.

Runtime.getRuntime().exec("uname -r"); 

Источник

Оцените статью
Adblock
detector