init: introduce ro.kernel.version property
This property will hold the major.minor part of the kernel version (e.g. "5.4"), allowing init scripts to act depending on that version, enabling and disabling certain features. Bug: 194156700 Change-Id: Icec640b8a7150b344d9aa3bc0bdbcdae050c7c45 Test: manual on a Pixel device Signed-off-by: Alexander Potapenko <glider@google.com>
This commit is contained in:
parent
bc6317592a
commit
1e966fa9f1
1 changed files with 15 additions and 0 deletions
|
@ -27,6 +27,7 @@
|
|||
#include <sys/mount.h>
|
||||
#include <sys/signalfd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
|
||||
|
@ -554,6 +555,19 @@ static void SetUsbController() {
|
|||
}
|
||||
}
|
||||
|
||||
/// Set ro.kernel.version property to contain the major.minor pair as returned
|
||||
/// by uname(2).
|
||||
static void SetKernelVersion() {
|
||||
struct utsname uts;
|
||||
unsigned int major, minor;
|
||||
|
||||
if ((uname(&uts) != 0) || (sscanf(uts.release, "%u.%u", &major, &minor) != 2)) {
|
||||
LOG(ERROR) << "Could not parse the kernel version from uname";
|
||||
return;
|
||||
}
|
||||
SetProperty("ro.kernel.version", android::base::StringPrintf("%u.%u", major, minor));
|
||||
}
|
||||
|
||||
static void HandleSigtermSignal(const signalfd_siginfo& siginfo) {
|
||||
if (siginfo.ssi_pid != 0) {
|
||||
// Drop any userspace SIGTERM requests.
|
||||
|
@ -858,6 +872,7 @@ int SecondStageMain(int argc, char** argv) {
|
|||
export_oem_lock_status();
|
||||
MountHandler mount_handler(&epoll);
|
||||
SetUsbController();
|
||||
SetKernelVersion();
|
||||
|
||||
const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap();
|
||||
Action::set_function_map(&function_map);
|
||||
|
|
Loading…
Reference in a new issue