summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ. Richard Barnette <jrbarnette@chromium.org>2013-10-22 16:21:14 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-10-23 18:53:43 +0000
commit92cbd5d214e0f2f9a3d52db48dcdaaceb57993d4 (patch)
treef25471d88379056071aa16aed01368c3f05f5ae8
parentd96b25d0c0a739d351b8f09b128782ca12b7b0e1 (diff)
downloadvboot-92cbd5d214e0f2f9a3d52db48dcdaaceb57993d4.tar.gz
Add a "debug_build" query to crossystem.
Querying "debug_build" allows the caller to determine whether the image has requested debug, independent of the setting of the dev_mode switch. BUG=chromium:308678 BRANCH=none TEST=use the new command option on both base and dev images Change-Id: I369f26d75156f2e88d9f6f467efbf8f633e78bda Reviewed-on: https://chromium-review.googlesource.com/174107 Reviewed-by: Bill Richardson <wfrichar@chromium.org> Tested-by: Richard Barnette <jrbarnette@chromium.org> Reviewed-by: Will Drewry <wad@chromium.org> Commit-Queue: Richard Barnette <jrbarnette@chromium.org>
-rw-r--r--host/lib/crossystem.c45
-rw-r--r--utility/crossystem.c3
2 files changed, 40 insertions, 8 deletions
diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
index 2ef222b0..b4824332 100644
--- a/host/lib/crossystem.c
+++ b/host/lib/crossystem.c
@@ -50,6 +50,15 @@ typedef enum VdatIntField {
} VdatIntField;
+/* Description of build options that may be specified on the
+ * kernel command line. */
+typedef enum VbBuildOption {
+ VB_BUILD_OPTION_UNKNOWN,
+ VB_BUILD_OPTION_DEBUG,
+ VB_BUILD_OPTION_NODEBUG
+} VbBuildOption;
+
+
/* Masks for kern_nv usage by kernel. */
#define KERN_NV_FWUPDATE_TRIES_MASK 0x0000000F
/* If you want to use the remaining currently-unused bits in kern_nv
@@ -122,17 +131,14 @@ VbSetNvCleanup:
return retval;
}
-
-/* Determine whether OS-level debugging should be allowed. Passed the
- * destination and its size. Returns 1 if yes, 0 if no, -1 if error. */
-int VbGetCrosDebug(void) {
+/* Find what build/debug status is specified on the kernel command
+ * line, if any. */
+static VbBuildOption VbScanBuildOption(void) {
FILE* f = NULL;
char buf[4096] = "";
char *t, *saveptr;
const char *delimiters = " \r\n";
- /* If the currently running system specifies its debug status, use
- * that in preference to other indicators. */
f = fopen(KERNEL_CMDLINE_PATH, "r");
if (NULL != f) {
if (NULL == fgets(buf, sizeof(buf), f))
@@ -142,8 +148,31 @@ int VbGetCrosDebug(void) {
for (t = strtok_r(buf, delimiters, &saveptr); t;
t = strtok_r(NULL, delimiters, &saveptr)) {
if (0 == strcmp(t, "cros_debug"))
- return 1;
+ return VB_BUILD_OPTION_DEBUG;
else if (0 == strcmp(t, "cros_nodebug"))
+ return VB_BUILD_OPTION_NODEBUG;
+ }
+
+ return VB_BUILD_OPTION_UNKNOWN;
+}
+
+
+/* Determine whether the running OS image was built for debugging.
+ * Returns 1 if yes, 0 if no or indeterminate. */
+int VbGetDebugBuild(void) {
+ return VB_BUILD_OPTION_DEBUG == VbScanBuildOption();
+}
+
+
+/* Determine whether OS-level debugging should be allowed.
+ * Returns 1 if yes, 0 if no or indeterminate. */
+int VbGetCrosDebug(void) {
+ /* If the currently running system specifies its debug status, use
+ * that in preference to other indicators. */
+ VbBuildOption option = VbScanBuildOption();
+ if (VB_BUILD_OPTION_DEBUG == option) {
+ return 1;
+ } else if (VB_BUILD_OPTION_NODEBUG == option) {
return 0;
}
@@ -435,6 +464,8 @@ int VbGetSystemPropertyInt(const char* name) {
/* Other parameters */
else if (!strcasecmp(name,"cros_debug")) {
value = VbGetCrosDebug();
+ } else if (!strcasecmp(name,"debug_build")) {
+ value = VbGetDebugBuild();
} else if (!strcasecmp(name,"devsw_boot")) {
value = GetVdatInt(VDAT_INT_DEVSW_BOOT);
} else if (!strcasecmp(name,"devsw_virtual")) {
diff --git a/utility/crossystem.c b/utility/crossystem.c
index 91465002..d7007eeb 100644
--- a/utility/crossystem.c
+++ b/utility/crossystem.c
@@ -40,7 +40,7 @@ const Param sys_param_list[] = {
{"cros_debug", 0, "OS should allow debug features"},
{"dbg_reset", CAN_WRITE, "Debug reset mode request (writable)"},
{"ddr_type", IS_STRING, "Type of DDR RAM"},
- {"disable_dev_request", CAN_WRITE, "Disable virtual dev-mode on next boot"},
+ {"debug_build", 0, "OS image built for debug features"},
{"dev_boot_usb", CAN_WRITE,
"Enable developer mode boot from USB/SD (writable)"},
{"dev_boot_legacy", CAN_WRITE,
@@ -49,6 +49,7 @@ const Param sys_param_list[] = {
"Enable developer mode boot only from official kernels (writable)"},
{"devsw_boot", 0, "Developer switch position at boot"},
{"devsw_cur", 0, "Developer switch current position"},
+ {"disable_dev_request", CAN_WRITE, "Disable virtual dev-mode on next boot"},
{"ecfw_act", IS_STRING, "Active EC firmware"},
{"fmap_base", 0, "Main firmware flashmap physical address", "0x%08x"},
{"fwb_tries", CAN_WRITE, "Try firmware B count (writable)"},