> On Sep 1, 2023, at 7:05 PM, Brook Milligan <br...@nmsu.edu> wrote:
> 
>> On Sep 1, 2023, at 5:33 PM, Brett Lymn <bl...@internode.on.net> wrote:
>> 
>> On Thu, Aug 31, 2023 at 09:02:53PM -0600, Brook Milligan wrote:
>>> 
>>> However, a write fails and hangs the board hard: no keyboard response, no 
>>> response to pings.  I have attached the test program below, and would 
>>> appreciate more eyes on it from (the many) people who obviously know serial 
>>> line programming better than I do.  It gets as far as the write() call, but 
>>> no further.
>>> 
>> 
>> This sounds like a driver bug.  In no circumstances should a user land 
>> program be able to
>> hang a machine.  I would log a kernel PR with your sample code attached.

I’ll submit a PR; what category?  This is likely a kernel bug (so kern?) but it 
applies to the Beaglebone Black (so port-evbarm?).  I’m thinking the former.

The bug is easy to replicate with just a native installation.  I have attached 
a file (kernel-hang.tgz) with the necessary bits.

- am335x-boneblack-comm_cape.dtb: a binary device tree file that can be loaded 
when booting a Beaglebone Black.  See below.  This enables the uart4 as 
intended for the Beaglebone comms cape, but the cape is not required.

- am335x-boneblack-comm_cape.dts: a device tree source file that enables uart4 
as intended for the Beaglebone comms cape.  It includes the 
am335x-boneblack.dts file, which is the default for the Beaglebone Black.  As a 
result, the only differences are the few lines in this file.

- am335x-bone-common.dtsi.patch: a patch to replace /include/ with #include so 
the C preprocessor is happy with all the files.

- am335x-boneblack-comm_cape.dts.pp: the result of running the C preprocessor 
on am335x-boneblack-comm_cape.dts.

- Makefile: a makefile with two targets: patch and all used to make the other 
files.  The “patch” target applies the patch and the “all” target runs the C 
preprocessor and dtc.  Note that ${NETBSD_SRCDIR} should point to the root of 
the NetBSD source.

Replicating the kernel hang:

- Add the binary device file am335x-boneblack-comm_cape.dtb to /boot/dtb/ on a 
Beaglebone Black, so that it is available for the next boot.

- Boot into the U-Boot console, i.e., type space in the serial console 
immediately when U-Boot begins the boot process.

- Enter the following commands into the U-Boot console; this will boot the 
board with the new device tree:

        setenv bootargs "root=ld0a” 
        fatload mmc 0:1 $kernel_addr_r netbsd-GENERIC.ub 
        fatload mmc 0:1 $fdt_addr_r dtb/am335x-boneblack-comm_cape.dtb 
        bootm $kernel_addr_r - $fdt_addr_r

- When the kernel boots into multiuser, run cu as

        # cu -l /dev/tty01

  This should report “Connected”.  As soon as a character is typed into cu, the 
kernel will hang.

I would greatly appreciate input on how to address this.

Thanks a lot.

Cheers,
Brook


Attachment: kernel-hang.tgz
Description: Binary data




Reply via email to