[OpenWrt-Devel] [PATCH] mvebu: fix bootloader kernel commandline mangling

Petr Štetiar ynezz at true.cz
Wed Jun 10 12:10:40 EDT 2020


Currently I'm unable to boot initramfs image with `console=ttyS0,115200`
kernel commandline as the bootloader mangling resets kernel commandline
if there is no `root=` option provided, efectively clearing whatever I
pass to the kernel, making the `root=` option mandatory.

Signed-off-by: Petr Štetiar <ynezz at true.cz>
---
 ...Mangle-bootloader-s-kernel-arguments.patch | 61 +++++++++++--------
 1 file changed, 34 insertions(+), 27 deletions(-)

diff --git a/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch b/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch
index 2f942ea3af63..5969a10a865c 100644
--- a/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch
+++ b/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch
@@ -21,10 +21,10 @@ was found, resulting in blank cmdline and failure to boot.
 
 Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
 ---
- arch/arm/Kconfig                        | 11 +++++
- arch/arm/boot/compressed/atags_to_fdt.c | 72 ++++++++++++++++++++++++++++++++-
- init/main.c                             | 16 ++++++++
- 3 files changed, 98 insertions(+), 1 deletion(-)
+ arch/arm/Kconfig                        | 11 ++++
+ arch/arm/boot/compressed/atags_to_fdt.c | 85 ++++++++++++++++++++++++-
+ init/main.c                             | 16 +++++
+ 3 files changed, 111 insertions(+), 1 deletion(-)
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
@@ -57,7 +57,7 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
  #else
  #define do_extend_cmdline 0
  #endif
-@@ -67,6 +69,65 @@ static uint32_t get_cell_size(const void
+@@ -67,6 +69,72 @@ static uint32_t get_cell_size(const void
  	return cell_size;
  }
  
@@ -78,7 +78,8 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
 +		do {
 +			ptr++;
 +			ptr = strchr(ptr, 'r');
-+			if(!ptr) return dest;
++			if (!ptr)
++				goto no_append;
 +
 +		} while (ptr != str && *(ptr-1) != ' ');
 +
@@ -97,25 +98,31 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
 +
 +	/* if append-rootblock property is set use it to append to command line */
 +	rootblock = getprop(fdt, "/chosen", "append-rootblock", &l);
-+	if(rootblock != NULL) {
-+		if(*dest != ' ') {
-+			*dest = ' ';
-+			dest++;
-+			len++;
-+		}
-+		if (len + l + i <= COMMAND_LINE_SIZE) {
-+			memcpy(dest, rootblock, l);
-+			dest += l - 1;
-+			memcpy(dest, ptr, i);
-+			dest += i;
-+		}
-+	} else {
-+		len = strlen(str);
-+		if (len + 1 < COMMAND_LINE_SIZE) {
-+			memcpy(dest, str, len);
-+			dest += len;
-+		}
++	if (rootblock == NULL)
++		goto no_append;
++
++	if (*dest != ' ') {
++		*dest = ' ';
++		dest++;
++		len++;
++	}
++
++	if (len + l + i <= COMMAND_LINE_SIZE) {
++		memcpy(dest, rootblock, l);
++		dest += l - 1;
++		memcpy(dest, ptr, i);
++		dest += i;
 +	}
++
++	return dest;
++
++no_append:
++	len = strlen(str);
++	if (len + 1 < COMMAND_LINE_SIZE) {
++		memcpy(dest, str, len);
++		dest += len;
++	}
++
 +	return dest;
 +}
 +#endif
@@ -123,7 +130,7 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
  static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
  {
  	char cmdline[COMMAND_LINE_SIZE];
-@@ -86,12 +147,21 @@ static void merge_fdt_bootargs(void *fdt
+@@ -86,12 +154,21 @@ static void merge_fdt_bootargs(void *fdt
  
  	/* and append the ATAG_CMDLINE */
  	if (fdt_cmdline) {
@@ -145,7 +152,7 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
  	}
  	*ptr = '\0';
  
-@@ -166,7 +236,9 @@ int atags_to_fdt(void *atag_list, void *
+@@ -166,7 +243,9 @@ int atags_to_fdt(void *atag_list, void *
  			else
  				setprop_string(fdt, "/chosen", "bootargs",
  					       atag->u.cmdline.cmdline);
@@ -156,7 +163,7 @@ Signed-off-by: Michael Gray <michael.gray at lantisproject.com>
  			if (memcount >= sizeof(mem_reg_property)/4)
  				continue;
  			if (!atag->u.mem.size)
-@@ -210,6 +282,10 @@ int atags_to_fdt(void *atag_list, void *
+@@ -210,6 +289,10 @@ int atags_to_fdt(void *atag_list, void *
  		setprop(fdt, "/memory", "reg", mem_reg_property,
  			4 * memcount * memsize);
  	}

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list