Web lists-archives.com

Booting a CF or SD card from an internal card reader




1. This HOWTO is a result of the discussion on debian-user beginning at

   https://lists.debian.org/debian-user/2017/04/msg00329.html

2. Some machines which have internal card readers do not expose the
   devices in them to the BIOS. When GRUB uses the BIOS it too will be
   unaware of what is inserted in the card reader. Check this from the
   GRUB menu by getting a prompt with the C key and typing 'ls'. On my
   machine 'lsusb' gives

   TEAC Corp. All-In-One Multi-Card READER CA200/B/S

   and 'ls' shows two hard disk partitions only:

   (hd0) (hd0,msdos5) (hd0,msdos1)

   This is with a Compact Flash (CF) card inserted in the reader.

3  The only way of booting a Secure Digital (SD) or a Compact Flash
   card using GRUB is to use a kernel on (hd0,msdos5) or (hd0,msdos1).
   This is very fraught if the kernels on a card and a partition are
   different and, furthermore, cannot really be described as booting
   *from* the card.

4. A solution is to use GRUB's nativedisk command. At a prompt type
   'nativedisk' followed by 'ls'. I get

   (ata0) (ata0,msdos5) (ata0,msdos1) (usb0a) (usb0a,msdos1) (usb0b) (usb0c) (usb0d) (ata1)

   (usb0a,msdos1) is the CF card.

   nativedisk uses GRUB's USB drivers. These work directly with the
   hardware and effectively GRUB will sever connection with the BIOS'
   firmware drivers.

5. First install a Debian OS to an SD or CF card. The install includes 
   putting GRUB in the MBR of the card. It is a good idea to label the 
   filesystem; "CFDISK" was my choice.

6. My controlling GRUB is on (hd0,msdos1). It is the first entry in the
   GRUB menu which is displayed when the machine boots. The entry was 
   activated to boot into the OS on (hd0,msdos1). 
 
   Edit /etc/grub.d/40_custom to have

   menuentry 'Debian Stretch on CF card' {
        insmod part_msdos
        insmod ext2
        echo "Running nativedisk command. Please wait."
        nativedisk
        search --label --set=root CFDISK
        linux /vmlinuz root=LABEL=CFDISK ro
        initrd /initrd.img
   }

   and do 'update-grub' *without* any of the reader's slots being
   populated.

7. Reinsert a card and restart the machine to see the new entry in the
   GRUB menu and boot from it.

8. This method can also be used for an OS on a USB stick. Useful when
   a machine will not boot from USB.

9. A card or USB stick can be plugged in before the machine boots or
   when the GRUB menu appears.

--
Brian.