Porting old 32-bit Brother laser CUPS drivers to 64-bit Linux.

I’ve had a Brother HL-3150CDN for quite some time. Brother are still maintaining the firmware, with the latest release being in late 2023. Things are going driverless, and it does support modern communications such as AirPrint™ and IPv6 over ethernet. While it can do these things, the limitations of tiny CPU and 64MB RAM become evident. It does not handle network printing well, compared to over USB with a desktop CPU doing all the heavy lifting.

Over USB, it does not support IPP Everywhere™ and indeed still requires a driver to operate.

The problem: They have not updated the Linux driver since 2013, and it ships with only 32-bit binaries. For the record, the last 32-bit desktop processor was released in 2006, and the last Ubuntu LTS with a 32-bit option was released in 2016. You simply don’t run 32-bit software on Linux anymore.

How much effort is too much effort for Brother to continue to support its older printers? Well, it’s not much effort at all. I’ve found that their newer drivers are completely generic, and work perfectly fine when you repackage them to work on an older model. I’ll go into detail of how I made the driver below. This process can likely be adapted to other models. If you’re only here for the HL-3150CDN, I’ll just link to a download for the repackaged driver and you can be on your way.

Download the driver here: hl3150cdnpdrv-3.5.1-1.amd64.deb

Rolling Your Own Driver

First, download the driver for your printer. I got the HL-3150CDN driver from here. Also download the driver for the nearest current model. I chose the HL-L3240CDW (v3.5.1-1). It’s their current basic networked colour laser.

They’re like… Brothers.

Extract the .deb files to a working directory. Here’s what the old CUPS wrapper deb package contains:

The only file you actually need from this is brother_hl3150cdn_printer_en.ppd. If you inspect that binary with “file brcupsconfpt1“, you’ll find it’s an ELF 32-bit executable. Yuck.

If you inspect the new driver, you’ll find this:

The brother_lpdwrapper_hll3240cdw file is a perl script (architecture-independent). Both binaries in the x86_64 directory are ELF 64-bit binaries. Perfect!

Now, to make a working v3.5.1-1 driver for the HL-3150CDN, it’s actually quite trivial:

  • Remove brother_hll3240cdw_printer_en.ppd and replace it with brother_hl3150cdn_printer_en.ppd from the older driver.
  • Find and replace “hll3240cdw” with “hl3150cdn" in prerm, postinst, postrm, control, cupswrapperhll3240cdw and brhll3240cdwrc.
  • Rename every file and directory so that hll3240cdw becomes hl3150cdn.
  • (optional) remove the i686 directory and change the architecture property in the control file from i386 to amd64. Remove the i686 symlinking from the postinst script too.
  • Repackage the .deb file.

Repackaging can be done with dpkg-deb:

dpkg-deb -b [workingdir] hl3150cdnpdrv-3.5.1-1.amd64.deb

Then install the .deb as usual. When you restart CUPS, the driver will appear.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *