> On Sep 1, 2023, at 7:05 PM, Brook Milligan <brook%nmsu.edu@localhost> wrote: > >> On Sep 1, 2023, at 5:33 PM, Brett Lymn <blymn%internode.on.net@localhost> 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