Difference between revisions of "CM-FX6: Linux: Getting started"
(→Mount a USB Storage Device) |
(→See also) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | == Introduction == | ||
+ | This article provides an introduction on how to install the Debian example root filesystem image on the CompuLab CM-FX6 System-on-Module / Computer-on-Module NAND or SSD. | ||
+ | |||
== Preparation steps == | == Preparation steps == | ||
* Obtain a PC workstation with a serial communication port. | * Obtain a PC workstation with a serial communication port. | ||
Line 8: | Line 11: | ||
* Turn on the CM-FX6 evaluation system. The U-Boot boot-loader will start and you will get a command prompt. | * Turn on the CM-FX6 evaluation system. The U-Boot boot-loader will start and you will get a command prompt. | ||
*: {{Note|If the boot settings of your CM-FX6 are different than the default, you may need to press and hold '''Ctrl-C''' while turning the CM-FX6 on, in order to get command prompt.}} | *: {{Note|If the boot settings of your CM-FX6 are different than the default, you may need to press and hold '''Ctrl-C''' while turning the CM-FX6 on, in order to get command prompt.}} | ||
+ | |||
+ | == Installation and Deployment Files == | ||
+ | === Installation media or TFTP export directory === | ||
+ | * {{filename|'''kernel.img'''}} | ||
+ | * {{filename|'''imx6q-sbc-fx6.dtb'''}} | ||
+ | * {{filename|'''imx6dl-sbc-fx6.dtb'''}} | ||
+ | * {{filename|'''ramdisk.img'''}} | ||
+ | * {{filename|'''boot.scr'''}} | ||
+ | |||
+ | === Installation media or NFS export directory === | ||
+ | * {{filename|'''rootfs.tar.bz2'''}} | ||
+ | * {{filename|'''kernel.update.tar.bz2'''}} | ||
== Boot into the installation environment (ramdisk) == | == Boot into the installation environment (ramdisk) == | ||
Line 13: | Line 28: | ||
This can be done using the following media: | This can be done using the following media: | ||
* [[#Using installation environment on MMC/SD card|MMC/SD card]] | * [[#Using installation environment on MMC/SD card|MMC/SD card]] | ||
+ | * [[#Using installation environment on USB storage|USB storage device]] | ||
* [[#Using installation environment from TFTP server|Network TFTP server]] | * [[#Using installation environment from TFTP server|Network TFTP server]] | ||
=== Using installation environment on MMC/SD card === | === Using installation environment on MMC/SD card === | ||
− | * Copy | + | * Copy files listed in [[#Installation and Deployment Files | Installation and Deployment Files]] from [http://compulab.co.il/products/computer-on-modules/cm-fx6/#devres Linux package for CM-FX6] to the root directory on the first partition of the media. |
+ | The partition can be formatted as either ext2/3/4 or FAT file system. | ||
* Insert the MMC/SD card into the SD socket (P6) on the SB-FX6. | * Insert the MMC/SD card into the SD socket (P6) on the SB-FX6. | ||
− | * Use the following U-boot commands to boot the installation environment on the CM-FX6: | + | * Use the following U-boot commands to boot the installation environment on the CM-FX6 quad/dual lite configuration: |
<pre> | <pre> | ||
− | CM-FX6 # | + | CM-FX6 # |
− | |||
− | |||
− | |||
</pre> | </pre> | ||
− | * Continue to the [[#Install Kernel and | + | <pre> |
+ | setenv loadaddr 0x10800000 | ||
+ | mmc dev 2; mmc rescan | ||
+ | load mmc 2 ${loadaddr} boot.scr | ||
+ | source ${loadaddr} | ||
+ | </pre> | ||
+ | * Continue to the [[#Install Kernel and Root Files System Images | Install Kernel and Root Files System Images]] section. | ||
+ | |||
+ | === Using installation environment on USB storage === | ||
+ | * Copy files listed in [[#Installation and Deployment Files | Installation and Deployment Files]] from [http://compulab.co.il/products/computer-on-modules/cm-fx6/#devres Linux package for CM-FX6] to the root directory on the first partition of the media. | ||
+ | The partition can be formatted as either ext2/3/4 or FAT file system. | ||
+ | * Insert the USB storage into a USB socket on the SB-FX6. | ||
+ | * Use the following U-boot commands to boot the installation environment on a CM-FX6 quad/dual lite configuration: | ||
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv loadaddr 0x10800000 | ||
+ | usb start | ||
+ | load usb 0 ${loadaddr} boot.scr | ||
+ | source ${loadaddr} | ||
+ | </pre> | ||
+ | * Continue to the [[#Install Kernel and Root Files System Images | Install Kernel and Root Files System Images]] section. | ||
=== Using installation environment from TFTP server === | === Using installation environment from TFTP server === | ||
* Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network. | * Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network. | ||
− | * | + | * Copy files listed in [[#Installation media or TFTT export directory | Installation media or TFTT export directory]] from [http://compulab.co.il/products/computer-on-modules/cm-fx6/#devres Linux package for CM-FX6] to a TFTP server export directory: |
− | *: - On Windows machine: copy | + | *: - On Windows machine: copy files to the same folder and point the TFTP server to that folder |
− | *: - On Linux machine: copy | + | *: - On Linux machine: copy files to the TFTP server root directory, usually {{filename|/tftpboot}} or {{filename|/tftproot}}. |
* You can use U-boot {{cmd|dhcp}} command to obtain IP address or manually set {{parameter|ipaddr}} environment variable: | * You can use U-boot {{cmd|dhcp}} command to obtain IP address or manually set {{parameter|ipaddr}} environment variable: | ||
<pre> | <pre> | ||
Line 41: | Line 77: | ||
CM-FX6 # saveenv | CM-FX6 # saveenv | ||
</pre> | </pre> | ||
+ | * Set a correct value for the '''fdt_file''' variable: | ||
+ | :* Quad | ||
+ | <pre>CM-FX6 # setenv fdt_file imx6q-sbc-fx6.dtb | ||
+ | </pre> | ||
+ | :* Dual | ||
+ | <pre>CM-FX6 # setenv fdt_file imx6dl-sbc-fx6.dtb | ||
+ | </pre> | ||
+ | |||
* Use the following U-Boot commands to boot Linux on CM-FX6: | * Use the following U-Boot commands to boot Linux on CM-FX6: | ||
<pre> | <pre> | ||
− | CM-FX6 # setenv bootargs | + | CM-FX6 # |
− | + | </pre> | |
− | + | <pre> | |
+ | setenv fdt_high 0xffffffff | ||
+ | setenv fdt_addr 0x15000000 | ||
+ | setenv bootm_low 0x15000000 | ||
+ | setenv bootm_size 0x20000000 | ||
+ | setenv load_addr 0x10800000 | ||
+ | setenv ramdisk_addr 0x12000000 | ||
+ | setenv bootargs 'root=/dev/ram0 rw ramdisk_size=16384 console=ttymxc3,115200 ip=dhcp' | ||
+ | tftpboot ${load_addr} kernel.img && tftpboot ${fdt_addr} ${fdt_file} && tftpboot ${ramdisk_addr} ramdisk.img | ||
+ | bootz ${load_addr} ${ramdisk_addr} ${fdt_addr} | ||
</pre> | </pre> | ||
− | * Continue to the [[#Install Kernel and | + | * Continue to the [[#Install Kernel and Root Files System Images | Install Kernel and Root Files System Images]] section. |
− | == Install Kernel and | + | == Install Kernel and Root Files System Images == |
− | After the ramdisk image is loaded the | + | After the ramdisk image is loaded the '''bash''' shell prompt shows up: |
<pre> | <pre> | ||
− | + | root@cl-ramdisk:/# | |
− | |||
</pre> | </pre> | ||
The next step is installing the kernel and Debian Linux images. The following media can be used as a source for installation: | The next step is installing the kernel and Debian Linux images. The following media can be used as a source for installation: | ||
* [[#Mount the MMC/SD Card|MMC/SD Card]] | * [[#Mount the MMC/SD Card|MMC/SD Card]] | ||
* [[#Mount a USB Storage Device|USB storage device]] | * [[#Mount a USB Storage Device|USB storage device]] | ||
− | * [[#Mount | + | * [[#Mount an NFS drive|NFS drive]] |
− | === Mount | + | === Mount MMC/SD Card === |
− | |||
* Insert the MMC/SD card into the SD socket (P6) on the SB-FX6. | * Insert the MMC/SD card into the SD socket (P6) on the SB-FX6. | ||
− | * The MMC/SD card is mounted automatically under {{filename|/media/ | + | * The MMC/SD card is mounted automatically under {{filename|/media/mmcblk2p'''X'''}}. Where '''X''' is the partition number. |
* If for some reason the MMC/SD card hasn't been mounted automatically, use the following mount command: | * If for some reason the MMC/SD card hasn't been mounted automatically, use the following mount command: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkdir -p /media/mmcblk2pX && mount /dev/mmcblk2pX /media/mmcblk2pX |
</pre> | </pre> | ||
* Continue to the [[#Install Images | Install Images]] section. | * Continue to the [[#Install Images | Install Images]] section. | ||
− | === Mount | + | === Mount USB Storage Device === |
− | |||
* Plug the USB storage device to the lower port on the dual USB host connector P13 of the SB-FX6. | * Plug the USB storage device to the lower port on the dual USB host connector P13 of the SB-FX6. | ||
* The USB device is mounted automatically under {{filename|/media/sd{{parameter|XY}}}}. Where {{parameter|X}} is the device letter and {{parameter|Y}} is the partition number. | * The USB device is mounted automatically under {{filename|/media/sd{{parameter|XY}}}}. Where {{parameter|X}} is the device letter and {{parameter|Y}} is the partition number. | ||
* If for some reason the USB storage device hasn't been mounted automatically, use the following mount command: | * If for some reason the USB storage device hasn't been mounted automatically, use the following mount command: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkdir -p /media/sdXY && mount /dev/sdXY /media/sdXY |
</pre> | </pre> | ||
* Continue to the [[#Install Images | Install Images]] section. | * Continue to the [[#Install Images | Install Images]] section. | ||
− | === Mount | + | === Mount NFS drive === |
* Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network. | * Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network. | ||
− | * Copy | + | * Copy files listed in [[#Installation media or NFS export directory | Installation media or NFS export directory]] from [http://compulab.co.il/products/computer-on-modules/cm-fx6/#devres Linux package for CM-FX6] to an NFS server export directory. |
* Obtain an IP address for the CM-FX6: | * Obtain an IP address for the CM-FX6: | ||
− | ** Using DHCP:<pre>root@ | + | ** Using DHCP:<pre>root@cl-ramdisk:~# ifup `basename /sys/devices/platform/enet.0/net/eth?`</pre> |
− | ** If you do not have a DHCP server, you can set a static IP address using {{cmd|ifconfig}}:<pre>root@ | + | ** If you do not have a DHCP server, you can set a static IP address using {{cmd|ifconfig}}:<pre>root@cl-ramdisk:~# ifconfig `basename /sys/devices/platform/enet.0/net/eth?` <ip address></pre> |
− | * Mount the NFS share containing the {{filename| | + | * Mount the NFS share containing the {{filename|'''kernel.update.tar.bz2'''}} and the {{filename|'''rootfs.tar.bz2'''}} files: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mount -o nolock <host ip>:/path/to/nfs/share /mnt/net |
</pre> | </pre> | ||
* Continue to [[#Install Images | Install Images]] section. | * Continue to [[#Install Images | Install Images]] section. | ||
Line 100: | Line 150: | ||
* In this subsection the term {{filename|/mount/point}} can be: | * In this subsection the term {{filename|/mount/point}} can be: | ||
** {{filename|/mnt/net}} if NFS is used | ** {{filename|/mnt/net}} if NFS is used | ||
− | ** {{filename|/media/ | + | ** {{filename|/media/mmcblk2pX}} if an MMC/SD card is used, where X is the partition number. |
** {{filename|/media/sdXY}} if a USB storage is used, where X is the USB drive letter and Y is the partition number. | ** {{filename|/media/sdXY}} if a USB storage is used, where X is the USB drive letter and Y is the partition number. | ||
− | + | ===== rootfs/mtd4 ===== | |
− | |||
− | |||
− | |||
− | |||
* Format the NAND flash root filesystem partition: | * Format the NAND flash root filesystem partition: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# ubiformat --yes /dev/mtd4 |
</pre> | </pre> | ||
* Attach the NAND flash root filesystem partition: | * Attach the NAND flash root filesystem partition: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# ubiattach -m 4 -d 0 |
</pre> | </pre> | ||
* Create a ubi volume and name it "rootfs": | * Create a ubi volume and name it "rootfs": | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# ubimkvol /dev/ubi0 -m -N rootfs |
</pre> | </pre> | ||
* Mount the ubi volume: | * Mount the ubi volume: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkdir -p /media/rootfs && mount -t ubifs ubi0:rootfs /media/rootfs |
+ | </pre> | ||
+ | * Extract the content of {{filename|'''rootfs.tar.bz2'''}} onto the /media/rootfs: | ||
+ | <pre> | ||
+ | root@cl-ramdisk:~# tar -xvpjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync | ||
+ | </pre> | ||
+ | * Extract the content of {{filename|'''kernel.update.tar.bz2'''}} onto the /media/rootfs: | ||
+ | <pre> | ||
+ | root@cl-ramdisk:~# tar -xvpjf /mount/point/kernel.update.tar.bz2 -C /media/rootfs && sync | ||
+ | </pre> | ||
+ | ===== Kernel/mtd3 ===== | ||
+ | * Select a correct device tree file that meets the configuration requirements: | ||
+ | :* Quad | ||
+ | :<pre> root@cl-ramdisk:~# export fdt_file=imx6q-sbc-fx6.dtb </pre> | ||
+ | :* Dual | ||
+ | :<pre> root@cl-ramdisk:~# export fdt_file=imx6dl-sbc-fx6.dtb </pre> | ||
+ | |||
+ | * Format the NAND flash kernel partition and write the kernel image onto it: | ||
+ | <pre> | ||
+ | root@cl-ramdisk:~# | ||
</pre> | </pre> | ||
− | |||
<pre> | <pre> | ||
− | + | flash_erase /dev/mtd3 0 0 | |
+ | nandwrite -p /dev/mtd3 /media/rootfs/boot/zImage-cm-fx6 | ||
+ | nandwrite -p /dev/mtd3 -s 0x780000 /media/rootfs/boot/${fdt_file} | ||
</pre> | </pre> | ||
* Unmount the ubi volume: | * Unmount the ubi volume: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# umount /media/rootfs |
</pre> | </pre> | ||
* Continue to the [[#After Installation | After Installation]] section. | * Continue to the [[#After Installation | After Installation]] section. | ||
==== Install on the SSD Disk-on-Chip ==== | ==== Install on the SSD Disk-on-Chip ==== | ||
− | |||
{{Note|The below procedure will work only on empty SSD Disk-on-Chip. If you have already used the SSD, please delete all the partitions before proceeding.}} | {{Note|The below procedure will work only on empty SSD Disk-on-Chip. If you have already used the SSD, please delete all the partitions before proceeding.}} | ||
* In this subsection the term {{filename|/mount/point}} can be: | * In this subsection the term {{filename|/mount/point}} can be: | ||
** {{filename|/mnt/net}} if NFS is used | ** {{filename|/mnt/net}} if NFS is used | ||
− | ** {{filename|/media/ | + | ** {{filename|/media/mmcblk2pX}} if an MMC/SD card is used, where X is the partition number. |
** {{filename|/media/sdXY}} if USB storage is used, where X is the USB drive letter and Y is the partition number. | ** {{filename|/media/sdXY}} if USB storage is used, where X is the USB drive letter and Y is the partition number. | ||
− | * Create two partitions for the Linux kernel ( | + | * Create two partitions for the Linux kernel (EXT4 100M) and root file system (EXT4 the rest of the disk) on the SSD: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# echo -e "n\np\n1\n\n+100M\na\n1\nt\nc\nn\np\n2\n\n\nw\neof\n" | fdisk /dev/sda |
</pre> | </pre> | ||
− | * Format | + | * Format 1-st boot-partition with EXT4 file system: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkfs.ext4 -L boot /dev/sda1 |
</pre> | </pre> | ||
− | * Format | + | * Format 2-d rootfs-partition with EXT4 file system: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkfs.ext4 -L rootfs /dev/sda2 |
</pre> | </pre> | ||
* Mount both partitions: | * Mount both partitions: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# mkdir -p /media/rootfs && mount /dev/sda2 /media/rootfs |
− | root@ | + | root@cl-ramdisk:~# mkdir -p /media/rootfs/boot && mount /dev/sda1 /media/rootfs/boot |
</pre> | </pre> | ||
− | * | + | * Extract the content of {{filename|'''rootfs.tar.bz2'''}} onto the second partition: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# tar -xvpjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync |
</pre> | </pre> | ||
− | * Extract the content of {{filename| | + | * Extract the content of {{filename|'''kernel.update.tar.bz2'''}} onto the second partition: |
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# tar -xvpjf /mount/point/kernel.update.tar.bz2 -C /media/rootfs && sync |
</pre> | </pre> | ||
* Unmount both SSD partitions: | * Unmount both SSD partitions: | ||
<pre> | <pre> | ||
− | root@ | + | root@cl-ramdisk:~# umount /dev/sda1 |
− | root@ | + | root@cl-ramdisk:~# umount /dev/sda2 |
</pre> | </pre> | ||
* Continue to the [[#After Installation | After Installation]] section. | * Continue to the [[#After Installation | After Installation]] section. | ||
Line 174: | Line 239: | ||
== After Installation == | == After Installation == | ||
{{Note|If the boot settings of the CM-FX6 are different than default, you may need to press and hold '''Ctrl-C''' while turning the CM-FX6 on, in order to get command prompt.}} | {{Note|If the boot settings of the CM-FX6 are different than default, you may need to press and hold '''Ctrl-C''' while turning the CM-FX6 on, in order to get command prompt.}} | ||
− | |||
− | === Boot | + | === Boot Environment === |
− | * | + | ==== Common Environment Variables ==== |
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv bootdelay 3 | ||
+ | setenv loadaddr 0x10800000 | ||
+ | setenv fdt_high 0xffffffff | ||
+ | setenv fdt_addr 0x15000000 | ||
+ | setenv bootm_low 0x15000000 | ||
+ | setenv bootm_size 0x20000000 | ||
+ | setenv zImage zImage-cm-fx6 | ||
+ | </pre> | ||
+ | |||
+ | ==== Board Dependent Environment Variables ==== | ||
+ | CM-FX6 has two different SoC modifications: '''quad''' and '''dual lite'''.<br> | ||
+ | The U-Boot has to read the SoC revision number in order to make use of | ||
+ | a correct device tree blob. | ||
+ | * Get and save board revision '''board_rev''': | ||
+ | <pre> | ||
+ | CM-FX6 # setenv get_board_rev '\ | ||
+ | mw.b ${loadaddr} 0x61;\ | ||
+ | if cmp.b ${loadaddr} 0x020C8262 1;\ | ||
+ | then;\ | ||
+ | setenv board_rev 'dl';\ | ||
+ | else;\ | ||
+ | mw.b ${loadaddr} 0x63;\ | ||
+ | if cmp.b ${loadaddr} 0x020C8262 1;\ | ||
+ | then;\ | ||
+ | setenv board_rev 'q';\ | ||
+ | else;\ | ||
+ | setenv board_rev;\ | ||
+ | fi;\ | ||
+ | fi;' | ||
+ | CM-FX6 # run get_board_rev; printenv board_rev && saveenv | ||
+ | </pre> | ||
+ | * Validate '''board_rev''': | ||
+ | {{Note|Make sure that it is '''q''' or '''dl'''}} | ||
<pre> | <pre> | ||
− | CM-FX6 # | + | CM-FX6 # echo ${board_rev} |
</pre> | </pre> | ||
− | * | + | * Set default value for '''fdt_file''': |
<pre> | <pre> | ||
− | CM-FX6 # setenv | + | CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb |
− | CM-FX6 # setenv | + | </pre> |
− | CM-FX6 # | + | |
− | CM-FX6 # | + | ==== Display Options ==== |
+ | CM-FX6 evaluation platform has six video output interfaces: LCD, DVI, HDMI, 2xLVDS and MIPI.<br> | ||
+ | Only four of them can be configured at the same time. The default configuration is: LCD, HDMI and 2xLVDS.<br> | ||
+ | |||
+ | ===== Mapping Default Video Output ===== | ||
+ | Using a correct device tree file and a kernel video parameter allows changing the default (mxcfb0) mapping.<br> | ||
+ | |||
+ | * LCD, SB-FX6 P50 connector | ||
+ | <pre> | ||
+ | CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb | ||
+ | </pre> | ||
+ | * DVI, SB-FX6 J6 connector | ||
+ | <pre> | ||
+ | CM-FX6 # setenv video video=mxcfb0:dev=lcd,1920x1080M-32@50,if=RGB32 | ||
+ | CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb | ||
+ | </pre> | ||
+ | * HDMI, SB-FX6 J6 connector | ||
+ | <pre> | ||
+ | CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6-hdmi.dtb | ||
+ | </pre> | ||
+ | * MIPI, SB-FX6 P19 connector | ||
+ | <pre> | ||
+ | CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6-mipi.dtb | ||
+ | </pre> | ||
+ | |||
+ | ==== SSD/SATA Boot Parameters ==== | ||
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv set_media 'setenv satadev 0; sata init' | ||
+ | setenv set_args 'setenv bootargs console=ttymxc3,115200 root=/dev/sda2 rootfstype=ext4 rw rootwait' | ||
+ | setenv load_kernel 'load sata ${satadev} ${loadaddr} ${zimage}' | ||
+ | setenv load_dtb 'load sata ${satadev} ${fdt_addr} ${fdt_file}' | ||
+ | </pre> | ||
+ | |||
+ | ==== MMC Boot Parameters ==== | ||
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv set_media 'setenv mmcdev 2; mmc dev ${mmcdev}' | ||
+ | setenv set_args 'setenv bootargs console=ttymxc3,115200 root=/dev/mmcblk2p2 rootfstype=ext4 rw rootwait' | ||
+ | setenv load_kernel 'load mmc ${mmcdev} ${loadaddr} ${zimage}' | ||
+ | setenv load_dtb 'load mmc ${mmcdev} ${fdt_addr} ${fdt_file}' | ||
</pre> | </pre> | ||
+ | ==== NAND Boot Parameters ==== | ||
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv set_media 'echo nand is ready' | ||
+ | setenv set_args 'setenv bootargs console=ttymxc3,115200 root=ubi0:rootfs rw rootfstype=ubifs ubi.mtd=rootfs' | ||
+ | setenv load_kernel 'nand read ${loadaddr} 0 800000' | ||
+ | setenv load_dtb 'nand read ${fdt_addr} 780000 10000' | ||
+ | </pre> | ||
− | === Boot | + | ==== Boot Command ==== |
− | + | * Extra boot parameters | |
+ | <pre> | ||
+ | CM-FX6 # setenv set_args+ 'setenv bootargs ${bootargs} ${video} vmalloc=256M cma=384M ip=dhcp' | ||
+ | </pre> | ||
+ | * Default boot command | ||
+ | <pre> | ||
+ | CM-FX6 # | ||
+ | </pre> | ||
+ | <pre> | ||
+ | setenv set_boot 'run set_media; run set_args; run set_args+; run load_kernel; run load_dtb;' | ||
+ | setenv bootcmd 'run set_boot; bootz ${loadaddr} - ${fdt_addr}' | ||
+ | </pre> | ||
== See also == | == See also == | ||
+ | * [[CM-FX6: Linux: Automatic Installation]] | ||
* [[CM-FX6: Linux: Debian]] | * [[CM-FX6: Linux: Debian]] | ||
* [[CM-FX6: Linux: Kernel]] | * [[CM-FX6: Linux: Kernel]] |
Latest revision as of 13:22, 1 January 2017
Contents
Introduction
This article provides an introduction on how to install the Debian example root filesystem image on the CompuLab CM-FX6 System-on-Module / Computer-on-Module NAND or SSD.
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 CM-FX6 (link below).
- Download the Linux package for CM-FX6 from CompuLab website. Unzip the package to a directory on your host workstation.
- All image files mentioned below can be found in the images subdirectory.
- Connect the host PC to the SB-FX6 base-board (connector P60) via the serial cable supplied with the evaluation kit.
- Start the terminal emulation software on your PC. Set baud rate to 115200 bps, 8 bit per frame, 1 stop bit, no parity, no flow control.
- Turn on the CM-FX6 evaluation system. The U-Boot boot-loader will start and you will get a command prompt.
If the boot settings of your CM-FX6 are different than the default, you may need to press and hold Ctrl-C while turning the CM-FX6 on, in order to get command prompt. |
Installation and Deployment Files
Installation media or TFTP export directory
- kernel.img
- imx6q-sbc-fx6.dtb
- imx6dl-sbc-fx6.dtb
- ramdisk.img
- boot.scr
Installation media or NFS export directory
- rootfs.tar.bz2
- kernel.update.tar.bz2
Boot into the installation environment (ramdisk)
The first step in CM-FX6 Linux installation is starting the installation environment (Linux kernel and Ramdisk image). This can be done using the following media:
Using installation environment on MMC/SD card
- Copy files listed in Installation and Deployment Files from Linux package for CM-FX6 to the root directory on the first partition of the media.
The partition can be formatted as either ext2/3/4 or FAT file system.
- Insert the MMC/SD card into the SD socket (P6) on the SB-FX6.
- Use the following U-boot commands to boot the installation environment on the CM-FX6 quad/dual lite configuration:
CM-FX6 #
setenv loadaddr 0x10800000 mmc dev 2; mmc rescan load mmc 2 ${loadaddr} boot.scr source ${loadaddr}
- Continue to the Install Kernel and Root Files System Images section.
Using installation environment on USB storage
- Copy files listed in Installation and Deployment Files from Linux package for CM-FX6 to the root directory on the first partition of the media.
The partition can be formatted as either ext2/3/4 or FAT file system.
- Insert the USB storage into a USB socket on the SB-FX6.
- Use the following U-boot commands to boot the installation environment on a CM-FX6 quad/dual lite configuration:
CM-FX6 #
setenv loadaddr 0x10800000 usb start load usb 0 ${loadaddr} boot.scr source ${loadaddr}
- Continue to the Install Kernel and Root Files System Images section.
Using installation environment from TFTP server
- Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network.
- Copy files listed in Installation media or TFTT export directory from Linux package for CM-FX6 to a TFTP server export directory:
- - On Windows machine: copy files to the same folder and point the TFTP server to that folder
- - On Linux machine: copy files to the TFTP server root directory, usually /tftpboot or /tftproot.
- You can use U-boot dhcp command to obtain IP address or manually set ipaddr environment variable:
CM-FX6 # setenv ipaddr <CM-FX6 ip address>
- Set the serverip environment variable and save the new environment:
CM-FX6 # setenv serverip <tftp server host ip address> CM-FX6 # saveenv
- Set a correct value for the fdt_file variable:
- Quad
CM-FX6 # setenv fdt_file imx6q-sbc-fx6.dtb
- Dual
CM-FX6 # setenv fdt_file imx6dl-sbc-fx6.dtb
- Use the following U-Boot commands to boot Linux on CM-FX6:
CM-FX6 #
setenv fdt_high 0xffffffff setenv fdt_addr 0x15000000 setenv bootm_low 0x15000000 setenv bootm_size 0x20000000 setenv load_addr 0x10800000 setenv ramdisk_addr 0x12000000 setenv bootargs 'root=/dev/ram0 rw ramdisk_size=16384 console=ttymxc3,115200 ip=dhcp' tftpboot ${load_addr} kernel.img && tftpboot ${fdt_addr} ${fdt_file} && tftpboot ${ramdisk_addr} ramdisk.img bootz ${load_addr} ${ramdisk_addr} ${fdt_addr}
- Continue to the Install Kernel and Root Files System Images section.
Install Kernel and Root Files System Images
After the ramdisk image is loaded the bash shell prompt shows up:
root@cl-ramdisk:/#
The next step is installing the kernel and Debian Linux images. The following media can be used as a source for installation:
Mount MMC/SD Card
- Insert the MMC/SD card into the SD socket (P6) on the SB-FX6.
- The MMC/SD card is mounted automatically under /media/mmcblk2pX. Where X is the partition number.
- If for some reason the MMC/SD card hasn't been mounted automatically, use the following mount command:
root@cl-ramdisk:~# mkdir -p /media/mmcblk2pX && mount /dev/mmcblk2pX /media/mmcblk2pX
- Continue to the Install Images section.
Mount USB Storage Device
- Plug the USB storage device to the lower port on the dual USB host connector P13 of the SB-FX6.
- The USB device is mounted automatically under /media/sdXY. Where X is the device letter and Y is the partition number.
- If for some reason the USB storage device hasn't been mounted automatically, use the following mount command:
root@cl-ramdisk:~# mkdir -p /media/sdXY && mount /dev/sdXY /media/sdXY
- Continue to the Install Images section.
Mount NFS drive
- Connect the CM-FX6 Ethernet port (connector P9 marked as "CM ETHERNET" on the SB-FX6) to your local network.
- Copy files listed in Installation media or NFS export directory from Linux package for CM-FX6 to an NFS server export directory.
- Obtain an IP address for the CM-FX6:
- Using DHCP:
root@cl-ramdisk:~# ifup `basename /sys/devices/platform/enet.0/net/eth?`
- If you do not have a DHCP server, you can set a static IP address using ifconfig:
root@cl-ramdisk:~# ifconfig `basename /sys/devices/platform/enet.0/net/eth?` <ip address>
- Using DHCP:
- Mount the NFS share containing the kernel.update.tar.bz2 and the rootfs.tar.bz2 files:
root@cl-ramdisk:~# mount -o nolock <host ip>:/path/to/nfs/share /mnt/net
- Continue to Install Images section.
Install Images
Once the ramdisk image is loaded and the media containing the CM-FX6 Kernel and Debian Linux images is mounted, the installation can be done on either of the following:
Install on the NAND flash
- In this subsection the term /mount/point can be:
- /mnt/net if NFS is used
- /media/mmcblk2pX if an MMC/SD card is used, where X is the partition number.
- /media/sdXY if a USB storage is used, where X is the USB drive letter and Y is the partition number.
rootfs/mtd4
- Format the NAND flash root filesystem partition:
root@cl-ramdisk:~# ubiformat --yes /dev/mtd4
- Attach the NAND flash root filesystem partition:
root@cl-ramdisk:~# ubiattach -m 4 -d 0
- Create a ubi volume and name it "rootfs":
root@cl-ramdisk:~# ubimkvol /dev/ubi0 -m -N rootfs
- Mount the ubi volume:
root@cl-ramdisk:~# mkdir -p /media/rootfs && mount -t ubifs ubi0:rootfs /media/rootfs
- Extract the content of rootfs.tar.bz2 onto the /media/rootfs:
root@cl-ramdisk:~# tar -xvpjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync
- Extract the content of kernel.update.tar.bz2 onto the /media/rootfs:
root@cl-ramdisk:~# tar -xvpjf /mount/point/kernel.update.tar.bz2 -C /media/rootfs && sync
Kernel/mtd3
- Select a correct device tree file that meets the configuration requirements:
- Quad
root@cl-ramdisk:~# export fdt_file=imx6q-sbc-fx6.dtb
- Dual
root@cl-ramdisk:~# export fdt_file=imx6dl-sbc-fx6.dtb
- Format the NAND flash kernel partition and write the kernel image onto it:
root@cl-ramdisk:~#
flash_erase /dev/mtd3 0 0 nandwrite -p /dev/mtd3 /media/rootfs/boot/zImage-cm-fx6 nandwrite -p /dev/mtd3 -s 0x780000 /media/rootfs/boot/${fdt_file}
- Unmount the ubi volume:
root@cl-ramdisk:~# umount /media/rootfs
- Continue to the After Installation section.
Install on the SSD Disk-on-Chip
The below procedure will work only on empty SSD Disk-on-Chip. If you have already used the SSD, please delete all the partitions before proceeding. |
- In this subsection the term /mount/point can be:
- /mnt/net if NFS is used
- /media/mmcblk2pX if an MMC/SD card is used, where X is the partition number.
- /media/sdXY if USB storage is used, where X is the USB drive letter and Y is the partition number.
- Create two partitions for the Linux kernel (EXT4 100M) and root file system (EXT4 the rest of the disk) on the SSD:
root@cl-ramdisk:~# echo -e "n\np\n1\n\n+100M\na\n1\nt\nc\nn\np\n2\n\n\nw\neof\n" | fdisk /dev/sda
- Format 1-st boot-partition with EXT4 file system:
root@cl-ramdisk:~# mkfs.ext4 -L boot /dev/sda1
- Format 2-d rootfs-partition with EXT4 file system:
root@cl-ramdisk:~# mkfs.ext4 -L rootfs /dev/sda2
- Mount both partitions:
root@cl-ramdisk:~# mkdir -p /media/rootfs && mount /dev/sda2 /media/rootfs root@cl-ramdisk:~# mkdir -p /media/rootfs/boot && mount /dev/sda1 /media/rootfs/boot
- Extract the content of rootfs.tar.bz2 onto the second partition:
root@cl-ramdisk:~# tar -xvpjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync
- Extract the content of kernel.update.tar.bz2 onto the second partition:
root@cl-ramdisk:~# tar -xvpjf /mount/point/kernel.update.tar.bz2 -C /media/rootfs && sync
- Unmount both SSD partitions:
root@cl-ramdisk:~# umount /dev/sda1 root@cl-ramdisk:~# umount /dev/sda2
- Continue to the After Installation section.
After Installation
If the boot settings of the CM-FX6 are different than default, you may need to press and hold Ctrl-C while turning the CM-FX6 on, in order to get command prompt. |
Boot Environment
Common Environment Variables
CM-FX6 #
setenv bootdelay 3 setenv loadaddr 0x10800000 setenv fdt_high 0xffffffff setenv fdt_addr 0x15000000 setenv bootm_low 0x15000000 setenv bootm_size 0x20000000 setenv zImage zImage-cm-fx6
Board Dependent Environment Variables
CM-FX6 has two different SoC modifications: quad and dual lite.
The U-Boot has to read the SoC revision number in order to make use of
a correct device tree blob.
- Get and save board revision board_rev:
CM-FX6 # setenv get_board_rev '\ mw.b ${loadaddr} 0x61;\ if cmp.b ${loadaddr} 0x020C8262 1;\ then;\ setenv board_rev 'dl';\ else;\ mw.b ${loadaddr} 0x63;\ if cmp.b ${loadaddr} 0x020C8262 1;\ then;\ setenv board_rev 'q';\ else;\ setenv board_rev;\ fi;\ fi;' CM-FX6 # run get_board_rev; printenv board_rev && saveenv
- Validate board_rev:
Make sure that it is q or dl |
CM-FX6 # echo ${board_rev}
- Set default value for fdt_file:
CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb
Display Options
CM-FX6 evaluation platform has six video output interfaces: LCD, DVI, HDMI, 2xLVDS and MIPI.
Only four of them can be configured at the same time. The default configuration is: LCD, HDMI and 2xLVDS.
Mapping Default Video Output
Using a correct device tree file and a kernel video parameter allows changing the default (mxcfb0) mapping.
- LCD, SB-FX6 P50 connector
CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb
- DVI, SB-FX6 J6 connector
CM-FX6 # setenv video video=mxcfb0:dev=lcd,1920x1080M-32@50,if=RGB32 CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6.dtb
- HDMI, SB-FX6 J6 connector
CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6-hdmi.dtb
- MIPI, SB-FX6 P19 connector
CM-FX6 # setenv fdt_file imx6${board_rev}-sbc-fx6-mipi.dtb
SSD/SATA Boot Parameters
CM-FX6 #
setenv set_media 'setenv satadev 0; sata init' setenv set_args 'setenv bootargs console=ttymxc3,115200 root=/dev/sda2 rootfstype=ext4 rw rootwait' setenv load_kernel 'load sata ${satadev} ${loadaddr} ${zimage}' setenv load_dtb 'load sata ${satadev} ${fdt_addr} ${fdt_file}'
MMC Boot Parameters
CM-FX6 #
setenv set_media 'setenv mmcdev 2; mmc dev ${mmcdev}' setenv set_args 'setenv bootargs console=ttymxc3,115200 root=/dev/mmcblk2p2 rootfstype=ext4 rw rootwait' setenv load_kernel 'load mmc ${mmcdev} ${loadaddr} ${zimage}' setenv load_dtb 'load mmc ${mmcdev} ${fdt_addr} ${fdt_file}'
NAND Boot Parameters
CM-FX6 #
setenv set_media 'echo nand is ready' setenv set_args 'setenv bootargs console=ttymxc3,115200 root=ubi0:rootfs rw rootfstype=ubifs ubi.mtd=rootfs' setenv load_kernel 'nand read ${loadaddr} 0 800000' setenv load_dtb 'nand read ${fdt_addr} 780000 10000'
Boot Command
- Extra boot parameters
CM-FX6 # setenv set_args+ 'setenv bootargs ${bootargs} ${video} vmalloc=256M cma=384M ip=dhcp'
- Default boot command
CM-FX6 #
setenv set_boot 'run set_media; run set_args; run set_args+; run load_kernel; run load_dtb;' setenv bootcmd 'run set_boot; bootz ${loadaddr} - ${fdt_addr}'