Step through the following procedure in order to boot Linux on the VF6 System-On-Module (SOM) with rootfs mounted on an SD card:
- Modify the Linux kernel configuration to not include the rootfs into the uImage. For this, run make kmenuconfig in the project directory and uncheck (disable) the Initial RAM filesystem... option:
General setup --->
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support
- Modify the kernel configuration to enable SD card support. For this, check (enable) the following options:
Device Drivers --->
MMC/SD/SDIO card support --->
<*> MMC block device driver
(8) Number of minors per block device
[*] Use bounce buffer for simple hosts
<*> Secure Digital Host Controller Interface support
<*> SDHCI support on the platform specific bus
[*] SDHCI platform support for the Freescale eSDHC i.MX controller
- Add the SD card device nodes to the <project>.initramfs file:
nod /dev/mmcblk0 0666 0 0 b 179 0
nod /dev/mmcblk0p1 0666 0 0 b 179 1
nod /dev/mmcblk0p2 0666 0 0 b 179 2
nod /dev/mmcblk0p3 0666 0 0 b 179 3
nod /dev/mmcblk0p4 0666 0 0 b 179 4
- Build the project with the make command.
- Insert an SD card to the Linux host and create an ext3 partition on it with the size big enough for the root file system. For example, the following commands create an ext3 partition occupying all free space available on the SD card:
[psl@ocean ~]$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.21.2).
Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (12288-3862527, default 12288): 12288
Last sector, +sectors or +size{K,M,G} (12288-3862527, default 3862527): 3862527
Partition 2 of type Linux and of size 1.9 GiB is set
Command (m for help): p
Disk /dev/sdb: 1977 MB, 1977614336 bytes
16 heads, 12 sectors/track, 20117 cylinders, total 3862528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3c363366
Device Boot Start End Blocks Id System
/dev/sdb1 2048 12287 5120 c W95 FAT32 (LBA)
/dev/sdb2 12288 3862527 1925120 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[psl@ocean ~]$ sudo mkfs.ext3 /dev/sdb2
mke2fs 1.42.3 (14-May-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
120480 inodes, 481280 blocks
24064 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=494927872
15 block groups
32768 blocks per group, 32768 fragments per group
8032 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
- Mount the ext3 partition, change the current directory to the mounted partition directory and unpack the rootfs.cpio image from the project directory to the partition (you will need to issue the command with the root privileges):
[psl@ocean sdcard]$ sudo cpio -iv --no-absolute-filenames < <project path>/rootfs.cpio
- Unmount the SD Card partition, extract the SD card and insert it into the SD card holder on the Vybrid target.
- Boot the target to the U-boot prompt.
- Update uImage in the Flash. For this, copy <project>.uImage from the project directory to the TFTP directory on the TFTP server; set the image U-boot variable to the name of the uImage; and issue the run update command in U-boot.
- Check if the qspiboot variable is present in the U-boot environment:
Vybrid U-Boot> printenv qspiboot
qspiboot=qspi probe 1;cp.b 20080000 ${loadaddr} ${flashsize};run
addip;bootm
If the command exits with the ## Error: "qspiboot" not defined message, the qspiboot variable must be added to the environment.
For VF6-SOM rev. 2A and later the variable must be defined as follows:
Vybrid U-Boot> setenv qspiboot qspi probe 1\;cp.b 20080000
\$\{loadaddr\} \$\{flashsize\}\;run addip\;bootm
Vybrid U-Boot> saveenv
For VF6-SOM rev 1A, the variable must be defined as follows:
Vybrid U-Boot> setenv qspiboot qspi probe 1\;cp.b 20040000
\$\{loadaddr\} \$\{flashsize\}\;run addip\;bootm
Vybrid U-Boot> saveenv
- Add the following variable in U-boot and save the environment:
Vybrid U-Boot > setenv sdboot set bootargs \$\{bootargs\} \
root=/dev/mmcblk0p2 rw rootwait\;run qspiboot
Vybrid U-Boot > saveenv
Note that /dev/mmcblk0p2 matches the 2nd partition on SD card. This must be modified if another partition is used for the rootfs (/dev/mmcblk0p1 for 1st partition, /dev/mmcblk0p3 for 3rd, and so on).
- To boot Linux with the root FS on the SD card, issue the following command in U-boot:
Vybrid U-Boot > run sdboot