[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