diff options
author | Shelley Chen <shchen@chromium.org> | 2015-01-08 09:13:44 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-01-23 21:32:12 +0000 |
commit | f1f53b3732f235da15a50080db6e7bbd4666e390 (patch) | |
tree | edddd76b155d86824fe33934a3d427914987b7ef /host | |
parent | f242ad0f6fcfc9dc9195af06fe79301a9bd74113 (diff) | |
download | vboot-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.c | 4 | ||||
-rw-r--r-- | host/lib/include/host_common.h | 2 | ||||
-rw-r--r-- | host/linktest/main.c | 2 |
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); |