blob: 2e6fb450797de552da54758709d34e44e8c663aa [file] [log] [blame]
// Copyright 2014 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
#ifndef ANDROID_KERNEL_KERNEL_UTILS_H
#define ANDROID_KERNEL_KERNEL_UTILS_H
#include "android/utils/compiler.h"
#include <stddef.h>
#include <stdint.h>
ANDROID_BEGIN_HEADER
// An enum used to list of the types of Linux kernel images we need to
// handle. Unfortunately, this affects how we setup the kernel command-line
// when launching the system.
typedef enum {
KERNEL_VERSION_2_6_29 = 0x02061d,
KERNEL_VERSION_3_4_0 = 0x030400,
KERNEL_VERSION_3_4_67 = 0x030443,
KERNEL_VERSION_3_10_0 = 0x030a00,
} KernelVersion;
// Converts a string at |versionString| in the format "Linux version MM.mm.rr..."
// into a hex value 0x00MMmmrr. On success, returns true and sets |*kernelVersion|
// appropriately
// On failure, returns false and doesn't touch |*kernelVersion|.
bool android_parseLinuxVersionString(const char* versionString,
KernelVersion* kernelVersion);
// Probe the kernel image at |kernelPath| and copy the corresponding
// 'Linux version ' string into the |dst| buffer. On success, returns true
// and copies up to |dstLen-1| characters into dst. dst will always be NUL
// terminated if |dstLen| >= 1
//
// On failure (e.g. if the file doesn't exist or cannot be probed), return
// false and doesn't touch |dst| buffer.
bool android_pathProbeKernelVersionString(const char* kernelPath,
char* dst,
size_t dstLen);
// Return the serial device name prefix matching a given kernel type
// |kernelVersion|. I.e. this should be "/dev/ttyS" for before 3.10.0 and
// "/dev/ttyGF" for 3.10.0 and later.
const char* android_kernelSerialDevicePrefix(KernelVersion kernelVersion);
ANDROID_END_HEADER
#endif // ANDROID_KERNEL_KERNEL_UTILS_H