GRML on a Dell Latitude E6500

Always keen to have a Linux-bootable USB stick around for emergencies, I recently created such a thing with GRML, based on the latest stable version (November, 2014).

To create the USB stick, I used grml2usb, which simplfies the creation of the image when driven from an existing Linux installation. I tested the GRML installation on an old Dell Latitude E6500 I had lying around. grml2usb allows you to specify boot options when creating the bootable image, so I initially used the following:

  --bootoptions="persistence keyboard=uk"

The persistence options allows the storing of files on the USB stick, which (surprise) persist across boots. A file system partition with the label "persistence" identifies which file system is used for this purpose. In this partition, I placed the file persistence.conf, with the following contents:

  / union

This causes all changes to be saved in the persistence partition.

The laptop booted OK, but there were a couple of annoyances that I had to fix.

Incredibly loud beep on boot

This was fixed by adding the boot option --bootoptions="nobeep".

No wireless networking

This was nearly as annoying as the loud beep. The Dell uses a Broadcom B43 chip for wireless networking. The hardware was detected by GRML, but wasn't working:

  [17.277906] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
  [17.308236] b43-phy0: Found PHY: Analog 6, Type 5 (LP), Revision 1
  [17.308253] b43-phy0 warning: 5 GHz band is unsupported on this PHY
  [17.320413] Broadcom 43xx driver loaded [ Features: PMNLS ]
  [17.321497] b43 ssb0:0: Direct firmware load failed with error -2
  [17.321499] b43 ssb0:0: Falling back to user helper

Followed by:

  [17.908736] b43 ssb0:0: Direct firmware load failed with error -2
  [17.908738] b43 ssb0:0: Falling back to user helper
  [17.911148] b43 ssb0:0: Direct firmware load failed with error -2
  [17.911151] b43 ssb0:0: Falling back to user helper
  [17.912882] b43 ssb0:0: Direct firmware load failed with error -2
  [17.912885] b43 ssb0:0: Falling back to user helper
  [17.913258] b43-phy0 ERROR: Firmware file "b43/ucode15.fw" request failed (err=-12)
  [17.913260] b43-phy0 ERROR: Firmware file "b43-open/ucode15.fw" request failed (err=-12)
  [17.913262] b43-phy0 ERROR: You must go to http://wireless.kernel.org\
  /en/users/Drivers/\
  b43#devicefirmware and download
              the correct firmware for this driverversion. Please carefully 
              read all instructions on this website.

After poking around on the website cited above, it did appear that incorrect firmware was to blame. The wireless.kernel.org website leads to the Linux Wireless site. I used the manual method of installing the firmware, as I needed to ensure the install process could be run without network access. This meant getting the firmware blob and the debian .deb file for b43-fwcutter.

  wget http://www.lwfinger.com/b43-firmware/\
   broadcom-wl-5.100.138.tar.bz2
  apt-get download b43-fwcutter

After manually downloading the necessary files, I came up with (well, stole from the Linux wireless site) the following script to enable wireless networking after booting:

  #!/bin/bash
  #
  # Run as root to install Broadcom wireless firmware and connect to hydrus
  #
  RUN_DIR=/home/grml
  export FIRMWARE_INSTALL_DIR=\
    "/lib/firmware"

  cd "$RUN_DIR"
  dpkg -i downloads/b43-fwcutter_1:019-1_amd64.deb
  b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" \
     broadcom-wl-5.100.138/linux/wl_apsta.o
  modprobe -r b43
  modprobe b43
  dmesg|tail
  iwconfig wlan0 essid hydrus key <redacted>
  dhclient wlan0