Lanner 1U network appliance LCD panels

I’ve found these Lanner 1U network appliances incredibly useful. Nice small factor, lots of network ports to do fun things with. They make fantastic Linux routing appliances. They’re kind of old-school, though, they have these LCD panel modules with four buttons.

I’ve been using them off-label for so long I can’t even remember what the panels were originally for.

See, the first thing I do is connect serial, boot to USB and install something modern on it. Rocky, Ubuntu, whatever.

Last week I went to explore the LCD panels, and see if I could make use of them. Maybe as a periodic status display or something. For the first time in years, I consulted the actual manual for these devices. It turns out, they’re connected to the motherboard internally via an internal parallel port.

The manual suggests using the drivers found at https://github.com/majodu/plcm_drv_v013 but they are so old they’re meant for Linux kernel 3 and below. So the first thing I did was clone the repository. After looking at it for a few minutes I realized I didn’t need everything it was delivering, I just needed the kernel module itself, which is compiled via the “boot” argument. Looking at the Makefile it was pretty clear what the logic was in “boot:”

boot:
ifeq ($(KVER3),3)
	$(MAKE) -C $(KDIR) M=$(PWD) modules
endif
ifeq ($(KVER),2.6)
	$(MAKE) -C $(KDIR) M=$(PWD) modules
endif
ifeq ($(KVER),2.4)
	$(CC) $(MODCFLAGS) -c plcm_drv.c
endif

So the first thing I did, since my installed platform used kernel 5, was change the KVERS3 line to ifeq ($(KVER3),5) so that it would run the make on my kernel.

I was able to compile the kernel module. It barked at something else it was trying to install, but since all I really needed was the test executable and the kernel module for now, I ignored that.

Then I ran into an issue loading the newly-created kernel module. It didn’t like the major number associated with the driver, 248. Looking at /proc/devices I could see that 248 was in use by ptp, so I edited the Makefile and plcm_drv.c to use 239 instead, since that was available. I recompiled, and was able to load that kernel module just fine. After that, the plcm_test executable successfully ran and displayed stuff on the LCD panel and accepted button presses.

Good enough for now, at least I know I can write something in C to display something and receive button presses. Now to think through a good use case for this silly hoop I just jumped through…

Real-World Uses for Cyberdecks

Tonight I’m applying updates to my cyberdeck (CrowPi) in preparation for using it as a portable network stack build and rescue platform (PXE boot + ISO images and installers).

Sometimes it’s preferred to set up new environments in spaces where there may not yet be connectivity to the Internet. Or maybe limited internet. Maybe at a meetup.

Serving pxe clients with dhcp, tftp and ftp. Maybe the menu includes an ESXi installer, a couple of Linux installers, a Live ISO for rescues, DBAN for non-SSD emergencies. The sky’s the limit, right? Updated for the twenty-first century by including support for UEFI clients.

But first, updating to the latest everything. Later, I migrate the whole thing to a larger SD card, and replace the Raspberry Pi 3B that came with it, with a much more powerful 4B with 4GB of RAM.

Maybe even have a process watching the logs, and have certain events trigger LED matrix animations, buzzer and vibration activity, countdown timers on the clock, or display status on the small display. This’ll be a fun longer-term project.