
On 1/16/24 18:25, Francis Laniel wrote:
Hi!
Le mardi 16 janvier 2024, 00:34:24 +07 Patrice CHOTARD a écrit :
On 1/11/24 18:04, Francesco Dolcini wrote:
Hello Tom, Francis
On Fri, Dec 29, 2023 at 07:55:37PM +0100, Francis Laniel wrote:
Le jeudi 28 décembre 2023, 21:58:59 CET Tom Rini a écrit :
On Fri, 22 Dec 2023 22:02:20 +0100, Francis Laniel wrote:
During 2021 summer, Sean Anderson wrote a contribution to add a new shell, based on LIL, to U-Boot [1, 2]. While one of the goals of this contribution was to address the fact actual U-Boot shell, which is based on Busybox hush, is old there was a discussion about adding a new shell versus updating the actual one [3, 4].
So, in this series, with Harald Seiler, we updated the actual U-Boot shell to reflect what is currently in Busybox source code. Basically, this contribution is about taking a snapshot of Busybox shell/hush.c file (as it exists in commit 37460f5da) and adapt it to suit U-Boot needs.
[...]
Applied to u-boot/next, thanks!
Thank you for the merge! If there is any problem, do not hesitate to mail me and I will take care of it!
This change, specifically setting the modern hush shell as default, is breaking our boot script, just noticed since the current U-Boot master has a regression for us.
We still need to figure out the exact details, here [1] you can find the boot script (that has some placeholder that is replaced during build).
and the error is something like:
## Executing script at 90280000 Loading DeviceTree: k3-am625-verdin-nonwifi-dev.dtb 69025 bytes read in 11 ms (6 MiB/s) 82 bytes read in 9 ms (8.8 KiB/s) Working FDT set to 90200000 syntax error at 'done'HUSH died! resetting ...
that I _assume_ comes from this line
env set set_apply_overlays 'env set apply_overlays "for overlay_file in \\${fdt_overlays}; do echo Applying Overlay: \\${overlay_file} && ${load_cmd} \\${loadaddr} \\${overlays_prefix}\\${overlay_file} && fdt apply \\${loadaddr}; env set overlay_file; done; true"'>
[1] https://git.toradex.com/cgit/meta-toradex-bsp-common.git/tree/recipes-bsp /u-boot/u-boot-distro-boot/boot.cmd.in
Francesco
Hi all
I observed a similar issue with STM32MP157c-DK2 board. Since commit 78912cfde281 ("cmd: Set modern hush as default shell") U-Boot crashes :
U-Boot 2024.01-00486-g697758e7c81-dirty (Jan 15 2024 - 18:23:52 +0100)
CPU: STM32MP157CAC Rev.B Model: STMicroelectronics STM32MP157C-DK2 Discovery Board Board: stm32mp1 in trusted mode (st,stm32mp157c-dk2) Board: MB1272 Var2.0 Rev.C-01 DRAM: 512 MiB Clocks:
- MPU : 650 MHz
- MCU : 208.878 MHz
- AXI : 266.500 MHz
- PER : 24 MHz
- DDR : 533 MHz
optee optee: OP-TEE: revision 4.0 (e92de4ca) I/TC: Reserved shared memory is disabled I/TC: Dynamic shared memory is enabled I/TC: Normal World virtualization support is disabled I/TC: Asynchronous notifications are disabled Core: 311 devices, 40 uclasses, devicetree: board WDT: Started watchdog@5a002000 with servicing every 1000ms (32s timeout) NAND: 0 MiB MMC: STM32 SD/MMC: 0 Loading Environment from MMC... OK In: No input devices available! Out: No output devices available! Err: No error devices available! Net: eth0: ethernet@5800a000 Hit any key to stop autoboot: 0 Boot over mmc0! switch to partitions #0, OK mmc0 is current device Scanning mmc 0:8... data abort pc : [<ddb3f77a>] lr : [<ddb44c95>] reloc pc : [<c012777a>] lr : [<c012cc95>] sp : dbafc848 ip : ddbfc578 fp : ddbedf18 r10: 00000000 r9 : dbb15e70 r8 : 00000000 r7 : dbb5bf98 r6 : dbb5de10 r5 : dbb5bf98 r4 : ddbeda78 r3 : dbb5dc08 r2 : 000033f8 r1 : 00000071 r0 : ddbede00 Flags: nzcv IRQs off FIQs off Mode SVC_32 (T) Code: 3138 1c48 f854 0030 (eb04) 05c1 Resetting CPU ...
It crashes in blkcache_fill() , i didn't investigate deeply into this issue yet, but i can reproduce this issue by stopping autoboot by pressing a key and running a environment command as shown below :
U-Boot 2024.01-00486-g697758e7c81-dirty (Jan 15 2024 - 18:23:52 +0100)
CPU: STM32MP157CAC Rev.B Model: STMicroelectronics STM32MP157C-DK2 Discovery Board Board: stm32mp1 in trusted mode (st,stm32mp157c-dk2) Board: MB1272 Var2.0 Rev.C-01 DRAM: 512 MiB Clocks:
- MPU : 650 MHz
- MCU : 208.878 MHz
- AXI : 266.500 MHz
- PER : 24 MHz
- DDR : 533 MHz
optee optee: OP-TEE: revision 4.0 (e92de4ca) I/TC: Reserved shared memory is disabled I/TC: Dynamic shared memory is enabled I/TC: Normal World virtualization support is disabled I/TC: Asynchronous notifications are disabled Core: 311 devices, 40 uclasses, devicetree: board WDT: Started watchdog@5a002000 with servicing every 1000ms (32s timeout) NAND: 0 MiB MMC: STM32 SD/MMC: 0 Loading Environment from MMC... OK In: No input devices available! Out: No output devices available! Err: No error devices available! Net: eth0: ethernet@5800a000 Hit any key to stop autoboot: 0 STM32MP> STM32MP>
Then i run "printenv" :
STM32MP> printenv arch=arm autoload=0 baudrate=115200 board=stm32mp1 board_id=0x1272 board_name=stm32mp157c-dk2 board_rev=0x000c boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} boot_auth=0 boot_device=mmc boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr -q ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_i boot_efi_bootmgr=if fdt addr -q ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf} boot_instance=0 boot_net_usb_start=true boot_part=1 boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg boot_scripts=boot.scr.uimg boot.scr boot_syslinux_conf=extlinux/extlinux.conf boot_targets=mmc1 ubifs0 mmc0 mmc2 usb0 pxe bootcmd=run bootcmd_stm32mp bootcmd_mmc0=devnum=0; run mmc_boot bootcmd_mmc1=devnum=1; run mmc_boot bootcmd_mmc2=devnum=2; run mmc_boot bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi bootcmd_stm32mp=echo "Boot over ${boot_device}${boot_instance}!";if test ${boot_device} = serial || test ${boot_device} = usb;then stm32prog ${boot_device} ${boot_ins; bootcmd_ubifs0=bootubipart=UBI; bootubivol=boot; bootubioff=; run ubifs_boot bootcmd_usb0=devnum=0; run usb_boot bootdelay=1 console=ttySTM0 cpu=armv7 distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/ env_check=if env info -p -d -q; then env save; fi ethaddr=00:80:e1:42:48:f9 fdt_addr_r=0xc4000000 fdtcontroladdr=dbafd730 fdtfile=stm32mp157c-dk2.dtb fdtoverlay_addr_r=0xc4300000 kernel_addr_r=0xc2000000 load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0xc2000000 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi pxefile_addr_r=0xc4200000 ramdisk_addr_r=0xc4400000 scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; do; scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype $t scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efe scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extli scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}$e scriptaddr=0xc4100000 serial#=003700433338511634383330 serverip=192.168.1.1 soc=stm32mp soc_pkg=AC soc_rev=B soc_type=157C splashimage=0xc2000000 splashpos=m,m ubifs_boot=if ubi part ${bootubipart} ${bootubioff} && ubifsmount ubi0:${bootubivol}; then devtype=ubi; devnum=ubi0; bootfstype=ubifs; distro_bootpart=${bootubivol}; i usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi usb_pgood_delay=2000 vendor=st
Environment size: 4321/8187 bytes
and after i execute "run bootcmd_mmc0"
STM32MP> run bootcmd_mmc0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:8... data abort pc : [<ddb3f7a4>] lr : [<ddb44c95>] reloc pc : [<c01277a4>] lr : [<c012cc95>] sp : dbafcad8 ip : ddbfc578 fp : ddbedf18 r10: 00000000 r9 : dbb15e70 r8 : 00000000 r7 : dbb5f700 r6 : dbb615b8 r5 : dbb5f700 r4 : ddbeda78 r3 : dbb613b0 r2 : 00005c50 r1 : 0000002e r0 : 00005c51 Flags: Nzcv IRQs off FIQs off Mode SVC_32 (T) Code: 315b e7e9 2954 d802 (0b11) 316e Resetting CPU ...
resetting ...
Hi Francis
Again, sorry for the troubles caused... With regard to crashing in blkcache_fill() I suspect this is because some input data are wrong due to error in hush.
I got additionnal information, the crash occurs more precisely in blkcache_invalidate() when executing "free(node->cache);"
Another information, the issue doesn't occurs if the partition, on which we attempt to read, is formatted in EXT4. In my case, the partition is formatted in FAT.
I am not really sure to understand how you reproduced it. Do you need to run printenv before to generate the bug?
No, the printenv is not necessary, it was just to give some clue just in case.
Also, can you please check the value of scan_dev_for_boot_part? I am wondering if something is wrong with variable expansion and escaping character.
I finally succeed to reproduce the issue with limited action :
U-Boot 2024.01-00486-g697758e7c81 (Jan 17 2024 - 09:14:46 +0100)
CPU: STM32MP157CAC Rev.B Model: STMicroelectronics STM32MP157C-DK2 Discovery Board Board: stm32mp1 in trusted mode (st,stm32mp157c-dk2) Board: MB1272 Var2.0 Rev.C-01 DRAM: 512 MiB Clocks: - MPU : 650 MHz - MCU : 208.878 MHz - AXI : 266.500 MHz - PER : 24 MHz - DDR : 533 MHz optee optee: OP-TEE: revision 4.0 (a441cdcf) I/TC: Reserved shared memory is disabled I/TC: Dynamic shared memory is enabled I/TC: Normal World virtualization support is disabled I/TC: Asynchronous notifications are disabled Core: 311 devices, 40 uclasses, devicetree: board WDT: Started watchdog@5a002000 with servicing every 1000ms (32s timeout) NAND: 0 MiB MMC: STM32 SD/MMC: 0 Loading Environment from MMC... Invalid ENV offset in MMC, copy=0 In: No input devices available! Out: No output devices available! Err: No error devices available! Net: eth0: ethernet@5800a000 Hit any key to stop autoboot: 0 STM32MP> ls mmc 0:8 5545 boot.scr.uimg mmc0_extlinux/ mmc1_extlinux/ nand0_extlinux/ 18244 splash.bmp 384894 splash_yellow.bmp 6243746 st-image-resize-initrd 44390 stm32mp135f-dk.dtb 98349 stm32mp157c-dk2-scmi.dtb 97393 stm32mp157c-dk2.dtb 98101 stm32mp157c-ev1-scmi.dtb 97137 stm32mp157c-ev1.dtb 1248 ubootefi.var uefi-certificates/ 8761856 zImage 8057344 zImage-6.7.0-rt-rt1 8763400 zImage.signed
13 file(s), 4 dir(s)
STM32MP> env set list 1 boot.scr.uimg splash.bmp STM32MP> env print list list=1 boot.scr.uimg splash.bmp STM32MP> for i in ${list}; do if test -e mmc 0:8 ${i}; then echo ${i} found;else echo ${i} not found;fi; done; 1 not found boot.scr.uimg found splash.bmp found data abort pc : [<ddb3f72a>] lr : [<ddb39da1>] reloc pc : [<c012772a>] lr : [<c0121da1>] sp : dbafd370 ip : 00000000 fp : 00000017 r10: dbb5d5fc r9 : dbb15e70 r8 : 0000001c r7 : ddbedaa8 r6 : dbb5d640 r5 : 6873616c r4 : ddbeda78 r3 : dbb5d5d0 r2 : 00000080 r1 : 00000000 r0 : 70733d69 Flags: NzcV IRQs off FIQs off Mode SVC_32 (T) Code: e7e9 2101 e7e7 68f5 (60c5) 60a8 Resetting CPU ...
Hope it helps ;-)
Patrice
Thanks Patrice
Best regards.