Merge "mkbootimg: support longer kernel command lines"
This commit is contained in:
commit
6ed51b8a2d
2 changed files with 17 additions and 3 deletions
|
@ -24,6 +24,7 @@ typedef struct boot_img_hdr boot_img_hdr;
|
|||
#define BOOT_MAGIC_SIZE 8
|
||||
#define BOOT_NAME_SIZE 16
|
||||
#define BOOT_ARGS_SIZE 512
|
||||
#define BOOT_EXTRA_ARGS_SIZE 1024
|
||||
|
||||
struct boot_img_hdr
|
||||
{
|
||||
|
@ -43,10 +44,14 @@ struct boot_img_hdr
|
|||
unsigned unused[2]; /* future expansion: should be 0 */
|
||||
|
||||
unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */
|
||||
|
||||
|
||||
unsigned char cmdline[BOOT_ARGS_SIZE];
|
||||
|
||||
unsigned id[8]; /* timestamp / checksum / sha1 / etc */
|
||||
|
||||
/* Supplemental command line data; kept here to maintain
|
||||
* binary compatibility with older versions of mkbootimg */
|
||||
unsigned char extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -114,6 +114,7 @@ int main(int argc, char **argv)
|
|||
unsigned ramdisk_offset = 0x01000000;
|
||||
unsigned second_offset = 0x00f00000;
|
||||
unsigned tags_offset = 0x00000100;
|
||||
size_t cmdlen;
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
@ -192,11 +193,19 @@ int main(int argc, char **argv)
|
|||
|
||||
memcpy(hdr.magic, BOOT_MAGIC, BOOT_MAGIC_SIZE);
|
||||
|
||||
if(strlen(cmdline) > (BOOT_ARGS_SIZE - 1)) {
|
||||
cmdlen = strlen(cmdline);
|
||||
if(cmdlen > (BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE - 2)) {
|
||||
fprintf(stderr,"error: kernel commandline too large\n");
|
||||
return 1;
|
||||
}
|
||||
strcpy((char*)hdr.cmdline, cmdline);
|
||||
/* Even if we need to use the supplemental field, ensure we
|
||||
* are still NULL-terminated */
|
||||
strncpy((char *)hdr.cmdline, cmdline, BOOT_ARGS_SIZE - 1);
|
||||
hdr.cmdline[BOOT_ARGS_SIZE - 1] = '\0';
|
||||
if (cmdlen >= (BOOT_ARGS_SIZE - 1)) {
|
||||
cmdline += (BOOT_ARGS_SIZE - 1);
|
||||
strncpy((char *)hdr.extra_cmdline, cmdline, BOOT_EXTRA_ARGS_SIZE);
|
||||
}
|
||||
|
||||
kernel_data = load_file(kernel_fn, &hdr.kernel_size);
|
||||
if(kernel_data == 0) {
|
||||
|
|
Loading…
Reference in a new issue