Boot options 393

From ElphelWiki
Revision as of 06:18, 6 January 2017 by Mikhail (talk | contribs)
Jump to: navigation, search


Normally camera boots from the internal NAND flash memory, and it is always possible to boot it from the micro SD card, so even corruption of files on the internal flash will not "brick" the system. There are no buttons or switches on the camera - it should be instructed to change the boot source. Always booting from micro SD is not practical - in that case it would not be possible to leave a non-bootable card (intended just for image/video storage) in the camera slot.

There are two ways to switch camera to the micro SD boot mode.

One requires camera to be connected to the host computer with the USB cable (micro USB socket under the network jack - marked "console" on the picture). There is an internal USB-to-serial converter in the camera (CP2103) that offers 4 additional GPIO signals in addition to just the serial connection. One of these signals selects the boot source (GPIO0 - 0 - MMC, 1 - NAND), another (GPIO3 - 0 reset, 1 - normal operation). Unfortunately GPIO control of the CP2103 is not in a mainline cp210x Linux driver so this functionality requires a modified version (see instructions below).

Another way to "tell" the camera to boot from the μSD card instead of the internal NAND flash is to use a mechanically modified card or card adapter (such cards are provided with the camera). Standard specifies two alternative ways for detection of the card presence - one is a mechanical switch (closed when the card is inserted), another is a pull-up resistor on a data line. Camera uses both signals at boot time to determine the boot source:

  • Switch not closed, pull-up resistor not detected -> no card present, boot from the internal NAND flash
  • Switch closed -> data (non-bootable) card present, boot from the internal NAND flash
  • Switch not closed, pull-up resistor is detected -> bootable card present, boot from the MMC card
Fig.1 Recovery μSD card ('cut' corner) - forces the system board to boot from it

Boot instructions

Internal NAND flash (default)

  • Make sure the recovery card is not inserted (regular card can stay in)
  • Power on

Recovery micro SD card


  • A modified card that doesn't lock the mechanical CD pin in the slot - it's done by carefully filing off the corner (see Fig.1) - most cards have circuitry there and get damaged. Use the one that came with the camera or order a new one.


  • insert the card, power on

Regular micro SD card



  • Power on
  • Connect the camera's console port (see Fig.2, right under the μSD slot) to PC using μUSB-to-USB cable
Fig.2 10393 camera ports
  • Reload the cp210x driver:
    • unplug the μUSB-to-USB cable
    • In the terminal from the directory where the driver was built, run:
 sudo rmmod cp210x                                                                                                                                                                                                                                                            
 sudo insmod cp210x.ko
    • plug the cable back (the driver will stay loaded until the PC is rebooted).
  • In the terminal from the directory where the driver was built, run:
./ 0x6;
./ 0xe;
  • To reboot back to NAND flash w/o power cycling:
./ 0x7;
./ 0xf;

Other boot options (set in u-boot or device tree)

Follow the instructions of the 3 options above but with different bootloader or device tree.

The 3 options above define where the cpu's boot ROM loads SPL version of u-boot from: NAND flash or μSD card. The SPL u-boot loads the full-size u-boot. In its turn he full size u-boot can be instructed where to load the device tree and the kernel from, available options:

  • NAND flash (default if SPL was loaded from flash)
  • μSD card (default if SPL was loaded from μSD card)
  • internal SSD (not tested)
  • network (not tested)

Next, the location of rootfs ("/") is set in the device tree. Available locations for rootfs:

  • any μSD card partition. The default device tree parameter is:
bootargs = "cma=336M console=ttyPS0,115200 root=/dev/mmcblk0p2 rw ip= earlyprintk rootwait rootfstype=ext4";
  • any internal NAND flash partition. The default parameter is:
bootargs = "cma=336M console=ttyPS0,115200 root=ubi0:elphel393-rootfs rw ip= earlyprintk rootwait rootfstype=ubifs ubi.mtd=4,2048";
  • any internal SSD (if installed) partition. There is no default device tree.
  • RAM - unpack an archive from a μSD card FAT32 partition into RAM but it was tested a while ago:
bootargs = "cma=336M console=ttyPS0,115200 root=/dev/ram rw ip= earlyprintk ramdisk_size=262144";
    • Changes will not be stored
    • Modify env commands in the u-boot (in elphel393.h or when in the u-boot command line)
    • Carefully check the actual and hardcoded images' sizes in the u-boot (elphel393.h) and the device tree (elphel393_xxx.dts) with the actual sizes.
    • Don't want to waste the RAM - make tiny rootfs


  • when loaded the full-size u-boot can be key-interrupted and override bootargs parameter of the device tree.
  • To build a custom device tree, see SDK manual

The script controls GPIO pins for CP210X USB to UART Bridges and it comes with the patch for the cp210x driver. -h

$./ -h
usage: [-h] [-d DEVICE] [-m MASK] [gpio_value]

positional arguments:
 gpio_value            hex value for GPIO. Example (GPIO[3:0]): 0xf - all
                       1's, 0x0 - all 0's. If not specified - read GPIO only

optional arguments:
 -h, --help            show this help message and exit
 -d DEVICE, --device DEVICE
                       USB device. Default: /dev/ttyUSB0
 -m MASK, --mask MASK  hex value for masking out GPIO bits: 1 - enable
                       rewrite, 0 - disable. Example (GPIO[3:0]): -m 0xf