summaryrefslogtreecommitdiff
path: root/host
diff options
context:
space:
mode:
authorShelley Chen <shchen@chromium.org>2015-01-08 09:13:44 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-23 21:32:12 +0000
commitf1f53b3732f235da15a50080db6e7bbd4666e390 (patch)
treeedddd76b155d86824fe33934a3d427914987b7ef /host
parentf242ad0f6fcfc9dc9195af06fe79301a9bd74113 (diff)
downloadvboot-f1f53b3732f235da15a50080db6e7bbd4666e390.tar.gz
vboot: Add flag to vbutil_kernel for reconstruction of vmlinuz image
Adding functionality to allow for rebuilding of vmlinuz after it has been processed into vblock and header stripped. Basically appends the 16-bit header of a vmlinuz image onto the end of the vblock. BUG=chromium:438302 BRANCH=none TEST=Successfully ran "make runalltests". Also, ran: 1. Repack kernel block (so that 16-bit header is included): "vbutil_kernel --pack kern_0 ..." 2. Verify kernel: "vbutil_kernel --verify kern_0 ... ". This should be done before booting into kernel, but not necessary for it to work. 3. Rebuild vmlinuz image: "vbutil_kernel --get-vmlinuz kern_0 --vmlinuz-out vm.out" 4. Set up kexec with vmlinuz (this should complete with no errors): "kexec -l vm.out (other kernel cmd line args)" 5. Boot into kernel: "kexec -e" Change-Id: Iaa1582a1aedf70b43cdb3a56cde1fb248f1793d4 Signed-off-by: Shelley Chen <shchen@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/232750 Reviewed-by: Furquan Shaikh <furquan@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'host')
-rw-r--r--host/lib/host_common.c4
-rw-r--r--host/lib/include/host_common.h2
-rw-r--r--host/linktest/main.c2
3 files changed, 7 insertions, 1 deletions
diff --git a/host/lib/host_common.c b/host/lib/host_common.c
index 9f6121de..b9c00cde 100644
--- a/host/lib/host_common.c
+++ b/host/lib/host_common.c
@@ -76,6 +76,8 @@ VbKernelPreambleHeader *CreateKernelPreamble(
uint64_t bootloader_address,
uint64_t bootloader_size,
const VbSignature *body_signature,
+ uint64_t vmlinuz_header_address,
+ uint64_t vmlinuz_header_size,
uint64_t desired_size,
const VbPrivateKey *signing_key)
{
@@ -107,6 +109,8 @@ VbKernelPreambleHeader *CreateKernelPreamble(
h->body_load_address = body_load_address;
h->bootloader_address = bootloader_address;
h->bootloader_size = bootloader_size;
+ h->vmlinuz_header_address = vmlinuz_header_address;
+ h->vmlinuz_header_size = vmlinuz_header_size;
/* Copy body signature */
SignatureInit(&h->body_signature, body_sig_dest,
diff --git a/host/lib/include/host_common.h b/host/lib/include/host_common.h
index 40ce212a..b4693f84 100644
--- a/host/lib/include/host_common.h
+++ b/host/lib/include/host_common.h
@@ -50,6 +50,8 @@ VbKernelPreambleHeader *CreateKernelPreamble(
uint64_t bootloader_address,
uint64_t bootloader_size,
const VbSignature *body_signature,
+ uint64_t vmlinuz_header_address,
+ uint64_t vmlinuz_header_size,
uint64_t desired_size,
const VbPrivateKey *signing_key);
diff --git a/host/linktest/main.c b/host/linktest/main.c
index 7ad89ee6..e24d5579 100644
--- a/host/linktest/main.c
+++ b/host/linktest/main.c
@@ -41,7 +41,7 @@ int main(void)
/* host_common.h */
CreateFirmwarePreamble(0, 0, 0, 0, 0);
- CreateKernelPreamble(0, 0, 0, 0, 0, 0, 0);
+ CreateKernelPreamble(0, 0, 0, 0, 0, 0, 0, 0, 0);
/* file_keys.h */
BufferFromFile(0, 0);