[PATCH 4/5] arm: mvebu: Espressobin: Define console env

Andre Heider a.heider at gmail.com
Wed Aug 26 17:29:29 CEST 2020


On 26/08/2020 17:10, Pali Rohár wrote:
> On Wednesday 26 August 2020 16:43:10 Andre Heider wrote:
>> On 26/08/2020 16:10, Pali Rohár wrote:
>>> On Wednesday 26 August 2020 16:00:05 Andre Heider wrote:
>>>> On 26/08/2020 15:31, Pali Rohár wrote:
>>>>> On Wednesday 26 August 2020 15:22:26 Andre Heider wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On 24/08/2020 16:25, Pali Rohár wrote:
>>>>>>> Some distribution bootscripts append console env into boot cmdline.
>>>>>>> So define console env correctly to have early console access.
>>>>>>>
>>>>>>> Signed-off-by: Pali Rohár <pali at kernel.org>
>>>>>>> ---
>>>>>>>      include/configs/mvebu_armada-37xx.h | 2 ++
>>>>>>>      1 file changed, 2 insertions(+)
>>>>>>>
>>>>>>> diff --git a/include/configs/mvebu_armada-37xx.h b/include/configs/mvebu_armada-37xx.h
>>>>>>> index 6feceda757..b473072976 100644
>>>>>>> --- a/include/configs/mvebu_armada-37xx.h
>>>>>>> +++ b/include/configs/mvebu_armada-37xx.h
>>>>>>> @@ -17,6 +17,7 @@
>>>>>>>      #define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, \
>>>>>>>      					  115200, 230400, 460800, 921600 }
>>>>>>> +#define CONFIG_DEFAULT_CONSOLE "console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000"
>>>>>>>      /*
>>>>>>>       * For booting Linux, the board info and command line data
>>>>>>> @@ -99,6 +100,7 @@
>>>>>>>      	"kernel_addr=0x7000000\0"	\
>>>>>>>      	"kernel_addr_r=0x7000000\0"	\
>>>>>>>      	"ramdisk_addr_r=0x8000000\0"	\
>>>>>>> +	"console=" CONFIG_DEFAULT_CONSOLE "\0" \
>>>>>>>      	BOOTENV
>>>>>>>      #endif /* _CONFIG_MVEBU_ARMADA_37XX_H */
>>>>>>>
>>>>>>
>>>>>> this breaks booting debian with systemd for me:
>>>>>> [    4.632197] systemd-udevd[90]: Starting version 241
>>>>>> [    4.639324] systemd-udevd[91]: Failed to create udev control event
>>>>>> source: Operation not permitted
>>>>>>
>>>>>> "env delete console" and it works again.
>>>>>
>>>>> This is really suspicious. Why systemd has problems with control socket
>>>>> when console= parameter is specified on boot command line? And if
>>>>> console= parameter is problematic on command line, why console output is
>>>>> working fine? For me it looks like this variable controls something
>>>>> different, not (only) console output. Maybe some bootscript sets
>>>>> something more when it see u-boot env ${console} non-empty?
>>>>
>>>> It sounds like a bug in systemd, this may be related:
>>>> https://github.com/systemd/systemd/issues/13332
>>>>
>>>> With ugly workarounds like:
>>>> https://github.com/openembedded/openembedded-core/commit/dd6ee0b06cd8df6204cf600050516d15172302ea
>>>>
>>>> This is easy for to me to work around, but note that this systemd version is
>>>> the one shipping with current debian stable.
>>>
>>> But this looks like to be related to command line 'console=null'.
>>>
>>> Can you check which parameter is causing problem? console=... or
>>> earlycon=... ? Also do you have /dev/ttyMV0 in your system?
>>>
>>
>> yup, it's there:
>> crw--w---- 1 root tty 253, 0 Aug 26 15:09 /dev/ttyMV0
>>
>> But I think it's related to console=null because it ends up as invalid:
>> Your patch sets "console" to "console=...".
> 
> It is doing same thing as other boards in U-Boot, see:
> 
> $ git grep 'define.*CONFIG_DEFAULT_CONSOLE'
> include/configs/arndale.h:#define CONFIG_DEFAULT_CONSOLE                "console=ttySAC2,115200n8\0"
> include/configs/espresso7420.h:#define CONFIG_DEFAULT_CONSOLE   "console=ttySAC1,115200n8\0"
> include/configs/odroid.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
> include/configs/odroid_xu3.h:#define CONFIG_DEFAULT_CONSOLE             "console=ttySAC2,115200n8\0"
> include/configs/origen.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
> include/configs/peach-pi.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC1,115200n8\0"
> include/configs/peach-pit.h:#define CONFIG_DEFAULT_CONSOLE      "console=ttySAC1,115200n8\0"
> include/configs/s5p_goni.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC2,115200n8\0"
> include/configs/s5pc210_universal.h:#define CONFIG_DEFAULT_CONSOLE              "console=ttySAC1,115200n8\0"
> include/configs/smdk5250.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC1,115200n8\0"
> include/configs/smdk5420.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC1,115200n8\0"
> include/configs/smdk5420.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC1,115200n8\0"
> include/configs/smdkv310.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC2,115200n8\0"
> include/configs/snow.h:#define CONFIG_DEFAULT_CONSOLE           "console=ttySAC1,115200n8\0"
> include/configs/spring.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
> include/configs/trats.h:#define CONFIG_DEFAULT_CONSOLE          "console=ttySAC2,115200n8\0"
> include/configs/trats2.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC2,115200n8\0"
> 
> and:
> 
> $ git grep 'CONFIG_DEFAULT_CONSOLE' | grep -v ':#define'
> include/configs/odroid.h:       "console=" CONFIG_DEFAULT_CONSOLE \
> include/configs/odroid_xu3.h:   "console=" CONFIG_DEFAULT_CONSOLE \
> include/configs/s5p_goni.h:     "console=" CONFIG_DEFAULT_CONSOLE \
> include/configs/s5pc210_universal.h:    "console=" CONFIG_DEFAULT_CONSOLE \
> include/configs/trats.h:        "console=" CONFIG_DEFAULT_CONSOLE \
> include/configs/trats2.h:       "console=" CONFIG_DEFAULT_CONSOLE \
> scripts/config_whitelist.txt:CONFIG_DEFAULT_CONSOLE
> 
>> Debian's boot.scr set "bootargs" to "... console=${console}".
>> So we end up with with kernel args "console=console=..." :)
> 
> So then also other U-Boot boards are broken in Debian...
> Where is that Debian's boot.scr file? In which package?

That would be flash-kernel:
https://packages.qa.debian.org/f/flash-kernel.html

bootscript/all/bootscr.uboot-generic:  setenv bootargs "${bootargs} 
console=${console}"
bootscript/arm64/bootscr.uboot-generic:  setenv bootargs "${bootargs} 
console=${console}"
bootscript/armhf/bootscr.cubox:setenv bootargs 
@@LINUX_KERNEL_CMDLINE_DEFAULTS@@ console=${console} 
@@LINUX_KERNEL_CMDLINE@@
bootscript/armhf/bootscr.sunxi:  setenv bootargs "${bootargs} 
console=${console}"
debian/changelog:    - If ${console} is set then add 
"console=${console}" to the bootargs.

The last entry points to:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783074

Which has:
 > I suppose hush doesn't have sufficient power to check for an existing
 > console= in bootargs?
Not that I'm aware of.

So yeah...

Regards,
Andre
> 
> Armbian has 'setenv bootargs "$console ...'
> https://dl.armbian.com/espressobin/u-boot/bootscript/boot.cmd
> 
> OpenWRT has 'setenv bootargs "${bootargs} ${console}"'
> https://github.com/openwrt/openwrt/blob/master/target/linux/mvebu/image/generic-arm64.bootscript
> 
> So it seems that all expects that ${console} env contains 'console=tty...'
> 
>> So we need to strip one "console=", at least for debian's boot scripts:
>> "setenv console ttyMV0,115200 earlycon=ar3700_uart,0xd0012000" and it works
>> again, including earlycon.
>>
>> Regards,
>> Andre



More information about the U-Boot mailing list