Introduction
This article provides an introduction on how to install the Linux kernel and the example root filesystem image on the CompuLab CL-SOM-iMX7 System-on-Module / Computer-on-Module eMMC internal storage device using USB storage device as the installation source.
Preparation steps
- Obtain a PC workstation with a serial communication port.
- For networked installation you need to install a TFTP server on the host PC. For Windows machines we recommend TFTPD32 included in the Linux package for CL-SOM-iMX7 (link below).
- Download the CL-SOM-iMX7 BSP binary from CompuLab website. Unzip the package to a directory on your host workstation.
- All image files mentioned below can be found in the install sub-directory.
- Connect the host PC to the SBC-iMX7 USB console connector (P7) with the USB cable supplied in the evaluation kit.
Preparing installation media
- Obtain a USB storage device of 1GB or larger .
- Create a first partition on it. The partition can be formatted either ext2/3/4 or FAT file system.
- Copy kernel.img, ramdisk.dtb, ramdisk.img, rootfs.tar.bz2, imx7d-*.dtb and zImage from the unzipped Linux package to the root directory on the first partition of the USB storage.
Boot into the installation environment (ramdisk)
- Start terminal emulation software on your PC with the following serial port settings:
Baud Rate
|
Data Bits
|
Stop Bits
|
Parity
|
Flow Control
|
115200
|
8
|
1
|
none
|
none
|
- Plug the USB storage to either port on the dual USB host connector P6 of the SBC-iMX7.
|
SBC-iMX7 jumper E7 must be open
|
- Make sure no other removable media (e.g. additional USB storage, micro SD) is plugged.
- Turn on the device. Press a key to prevent a possible autoboot and get into the U-Boot command prompt.
|
If the boot settings of your device are different than the default, you may need to press and hold Ctrl-C while turning the device on, in order to get command prompt.
|
- Use the following U-Boot commands to boot the installation environment on the device:
setenv ramdisk_addr 0x82000000; setenv fdtaddr 0x83000000
setenv bootargs 'root=/dev/ram0 rw ramdisk_size=16384 console=ttymxc0,115200 vram=16M'
usb start
load usb 0 ${loadaddr} kernel.img && load usb 0 ${fdtaddr} ${fdtfile} && load usb 0 ${ramdisk_addr} ramdisk.img
bootz ${loadaddr} ${ramdisk_addr} ${fdtaddr}
Install Linux Images
The next step is installing the kernel and Debian Linux images.
Mount the USB Storage Device
- The source USB storage device is mounted automatically under /media/sda1/.
- If for some reason the USB storage device hasn't been mounted automatically, use the following mount command:
root@cl-ramdisk:~# mkdir -p /media/sda1 && mount /dev/sda1 /media/sda1
- Create a symbolic link to the source media:
root@cl-ramdisk:~# ln -s /media/sda1 /media/install
Install Images on eMMC
- Unmount all eMMC partitions:
root@cl-ramdisk:~# umount -l /dev/mmcblk2p*
- Clean up the on the eMMC flash:
root@cl-ramdisk:~# dd if=/dev/zero of=/dev/mmcblk2 bs=1M count=1
root@cl-ramdisk:~# hdparm -z /dev/mmcblk2
- Create two partitions for the Linux kernel (EXT2 100M) and root file system (EXT4 the rest of the disk) on the eMMC flash:
root@cl-ramdisk:~# echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n\nw\neof\n" | fdisk /dev/mmcblk2
- Format the first partition with EXT2 file system:
root@cl-ramdisk:~# mkfs.ext2 -L boot /dev/mmcblk2p1
- Format the second partition with EXT4 file system:
root@cl-ramdisk:~# mkfs.ext4 -L rootfs /dev/mmcblk2p2
root@cl-ramdisk:~# mkdir -p /media/boot && mount /dev/mmcblk2p1 /media/boot
root@cl-ramdisk:~# mkdir -p /media/rootfs && mount /dev/mmcblk2p2 /media/rootfs
- Copy zImage and imx7d-*imx7.dtb to the first (EXT2) partition:
root@cl-ramdisk:~# cp /mnt/install/zImage /mnt/install/imx7d-*.dtb /media/boot && sync
- Extract the content of rootfs.tar.bz2 onto the second partition:
root@cl-ramdisk:~# tar --numeric-owner -xpf /mnt/install/rootfs.tar.bz2 -C /media/rootfs && sync
root@cl-ramdisk:~# umount /dev/mmcblk2p1
root@cl-ramdisk:~# umount /dev/mmcblk2p2
After Installation
- Remove the USB storage and reboot the device
- Press a key to prevent a possible autoboot and get into the U-Boot command prompt.
- Use the following U-Boot commands to configure eMMC as the main storage for both Linux kernel and root filesystem images:
env default -a
setenv bootdelay 3
setenv kernel zImage
setenv loadaddr 0x80800000
setenv fdtfile imx7d-sbc-imx7.dtb
setenv fdtaddr 0x83000000
setenv mmcroot "/dev/mmcblk2p2 rootwait rw"
setenv loadimage 'load mmc 1:1 ${loadaddr} ${kernel}'
setenv loadfdt 'load mmc 1:1 ${fdtaddr} ${fdtfile}'
setenv bootargs "console=ttymxc0,115200 root=${mmcroot}"
setenv bootcmd 'run loadimage; run loadfdt; bootz ${loadaddr} - ${fdtaddr}'
- To save this configuration:
saveenv
run bootcmd
See also