Debian: Getting Started with the Digi ConnectCore 6 SBC

This is a page about Digi’s ConnectCore 6 SBC Development Board.

Availability

Boards:

Vendor Documentation

Basic Requirements

Bootloader: U-Boot

Das U-Boot – the Universal Boot Loader: http://www.denx.de/wiki/U-Boot
These directions going forward now assume your using the “factory” v2013.04.4.2 U-Boot. Please verify with: “version”

Digi U-Boot 2013.04.4.2 (Dec 04 2015 - 13:33:14)
 
CPU:   Freescale i.MX6Q rev1.5 at 792 MHz
CPU:   Temperature 40 C, calibration data: 0x5654db69
Reset cause: POR
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
Board: ConnectCore 6 SBC (undefined version)
Boot device: esdhc4 (eMMC)
PMIC:  DA9063, Device: 0x61, Variant: 0x50, Customer: 0x00, Config: 0x56
Net:   FEC [PRIME]
Hit any key to stop autoboot:  0 
=> version
 
Digi U-Boot 2013.04.4.2 (Dec 04 2015 - 13:33:14)
arm-eabi-gcc (GCC) 4.7
GNU ld (GNU Binutils) 2.22.90.20120727

If your board has something different, take a look here: https://eewiki.net/display/linuxonarm/ConnectCore+6+SBC#ConnectCore6SBC-UpgradeU-Boot

Linux Kernel

This script will build the kernel, modules, device tree binaries and copy them to the deploy directory.
Download:

#user@localhost:~$
git clone https://github.com/RobertCNelson/armv7-multiplatform ./kernelbuildscripts
cd kernelbuildscripts/

For v4.9.x (Longterm 4.9.x):

#user@localhost:~/kernelbuildscripts$
git checkout origin/v4.9.x -b tmp

For v4.9.x-rt (Longterm 4.9.x + Real-Time Linux):

#user@localhost:~/kernelbuildscripts$
git checkout origin/v4.9.x-rt -b tmp

Build:

#user@localhost:~/kernelbuildscripts$
./build_kernel.sh

Root File System

Debian 11

User Password
debian temppwd
root root

Download:

#user@localhost:~$
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-11.3-minimal-armhf-2022-04-15.tar.xz

Verify:

#user@localhost:~$
sha256sum debian-11.3-minimal-armhf-2022-04-15.tar.xz
#sha256sum output:
575738843651de2962f251447f4742d4f33313d6f7f5edf282a401207f5e6646  debian-11.3-minimal-armhf-2022-04-15.tar.xz

Extract:

#user@localhost:~$
tar xf debian-11.3-minimal-armhf-2022-04-15.tar.xz

Setup microSD card

We need to access the External Drive to be utilized by the target device. Run lsblk to help figure out what linux device has been reserved for your External Drive.

#Example: for DISK=/dev/sdX
lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0 465.3G  0 part /                <- Development Machine Root Partition
sdb      8:16   1   962M  0 disk                  <- microSD/USB Storage Device
└─sdb1   8:17   1   961M  0 part                  <- microSD/USB Storage Partition
#Thus you would use:
export DISK=/dev/sdb
#Example: for DISK=/dev/mmcblkX
lsblk
NAME      MAJ:MIN   RM   SIZE RO TYPE MOUNTPOINT
sda         8:0      0 465.8G  0 disk
├─sda1      8:1      0   512M  0 part /boot/efi
└─sda2      8:2      0 465.3G  0 part /                <- Development Machine Root Partition
mmcblk0     179:0    0   962M  0 disk                  <- microSD/USB Storage Device
└─mmcblk0p1 179:1    0   961M  0 part                  <- microSD/USB Storage Partition
#Thus you would use:
export DISK=/dev/mmcblk0

Erase partition table/labels on microSD card:

sudo dd if=/dev/zero of=${DISK} bs=1M count=20

Create Partition Layout:
With util-linux v2.26, sfdisk was rewritten and is now based on libfdisk.

#Check the version of sfdisk installed on your pc is atleast 2.26.x or newer.
sudo sfdisk --version
#Example Output
sfdisk from util-linux 2.27.1
#sfdisk >= 2.26.x
sudo sfdisk ${DISK} <<-__EOF__
1M,12M,0xE,*
,,,-
__EOF__

Format Partition:
With mkfs.ext4 1.43, we need to make sure metadata_csum and 64bit ext4 features are disabled.
As the version of U-Boot needed for this target CAN NOT correctly handle reading files with these newer ext4 options.

#mkfs.ext4 -V
sudo mkfs.ext4 -V
mke2fs 1.43-WIP (15-Mar-2016)
        Using EXT2FS Library version 1.43-WIP
#mkfs.ext4 >= 1.43
for: DISK=/dev/mmcblkX
sudo mkfs.vfat -F 16 -n BOOT ${DISK}p1
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}p2
 
for: DISK=/dev/sdX
sudo mkfs.vfat -F 16 -n BOOT ${DISK}1
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}2

Mount Partition:
On most systems these partitions may be auto-mounted…

sudo mkdir -p /media/boot/
sudo mkdir -p /media/rootfs/
 
for: DISK=/dev/mmcblkX
sudo mount ${DISK}p1 /media/boot/
sudo mount ${DISK}p2 /media/rootfs/
 
for: DISK=/dev/sdX
sudo mount ${DISK}1 /media/boot/
sudo mount ${DISK}2 /media/rootfs/

U-Boot upgrade

Download Factory version: 20151204103304

#user@localhost:~$
- For a Quad/Dual CPU with 2GB DDR3:
wget https://rcn-ee.com/repos/bootloader/digi/ccimx6sbc/u-boot-ccimx6qsbc2GB-20151204103304.imx
- For a Quad/Dual CPU with 1GB DDR3:
wget https://rcn-ee.com/repos/bootloader/digi/ccimx6sbc/u-boot-ccimx6qsbc-20151204103304.imx
- For a Quad/Dual CPU with 512MB DDR3:
wget https://rcn-ee.com/repos/bootloader/digi/ccimx6sbc/u-boot-ccimx6qsbc512MB-20151204103304.imx
- For a DualLite/Solo CPU with 1GB DDR3:
wget https://rcn-ee.com/repos/bootloader/digi/ccimx6sbc/u-boot-ccimx6dlsbc-20151204103304.imx
- For a DualLite/Solo CPU with 512MB DDR3:
wget https://rcn-ee.com/repos/bootloader/digi/ccimx6sbc/u-boot-ccimx6dlsbc512MB-20151204103304.imx

Copy u-boot*.imx to microSD

#user@localhost:~$
sudo cp -v ./u-boot*.imx /media/boot/u-boot.imx

boot.scr to uEnv.txt wrapper

Create wrapper script “boot.cmd” boot script:

#user@localhost:~$
echo "echo \"boot.scr -> uEnv.txt wrapper...\"" > ./boot.cmd
echo "setenv mmcdev 1" >> ./boot.cmd
echo "setenv mmcpart 2" >> ./boot.cmd
echo "ext2load mmc \${mmcdev}:\${mmcpart} \${loadaddr} /boot/uEnv.txt" >> ./boot.cmd
echo "env import -t \${loadaddr} \${filesize}" >> ./boot.cmd
echo "ext2load mmc \${mmcdev}:\${mmcpart} \${loadaddr} /boot/vmlinuz-\${uname_r}" >> ./boot.cmd
echo "ext2load mmc \${mmcdev}:\${mmcpart} \${fdt_addr} /boot/dtbs/\${uname_r}/\${dtb}" >> ./boot.cmd
echo "setenv bootargs console=\${console} \${optargs} root=\${root} rootfstype=\${rootfstype} rootwait fixrtc \${systemd} \${cmdline};" >> ./boot.cmd
echo "echo debug: [\${bootargs}] ... ;" >> ./boot.cmd
echo "echo debug: [bootz \${loadaddr} - \${fdt_addr}] ... ;" >> ./boot.cmd
echo "bootz \${loadaddr} - \${fdt_addr}" >> ./boot.cmd

Using mkimage (u-boot-tools pkg) create boot script

#user@localhost:~$
sudo mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "wrapper" -d ./boot.cmd /media/boot/boot.scr

uEnv.txt based bootscript

Create “uEnv.txt” boot script:
Make sure to un-comment which board you have with the dtb variable.

#user@localhost:~$
echo "console=ttymxc3,115200" > ./uEnv.txt
echo "optargs=" >> ./uEnv.txt
echo "root=/dev/mmcblk1p2" >> ./uEnv.txt
echo "rootfstype=ext4" >> ./uEnv.txt
echo " " >> ./uEnv.txt
echo "cmdline=" >> ./uEnv.txt
echo " " >> ./uEnv.txt
echo "dtb=imx6q-ccimx6sbc.dtb" >> ./uEnv.txt

Copy uEnv.txt to the partition:

#user@localhost:~$
sudo mkdir -p /media/rootfs/boot/
sudo cp -v ./uEnv.txt /media/rootfs/boot/

Install Kernel and Root File System

To help new users, since the kernel version can change on a daily basis. The kernel building scripts listed on this page will now give you a hint of what kernel version was built.

-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=5.X.Y-Z]
-----------------------------

Copy and paste that “export kernel_version=5.X.Y-Z” exactly as shown in your own build/desktop environment and hit enter to create an environment variable to be used later.

export kernel_version=5.X.Y-Z

Copy Root File System

#Debian; Root File System: user@localhost:~$
sudo tar xfvp ./debian-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync

Set uname_r in /boot/uEnv.txt

#user@localhost:~$
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

Copy Kernel Image

Kernel Image:

#user@localhost:~$
sudo cp -v ./kernelbuildscripts/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

Copy Kernel Device Tree Binaries

#user@localhost:~$
sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./kernelbuildscripts/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

Copy Kernel Modules

#user@localhost:~$
sudo tar xfv ./kernelbuildscripts/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

File Systems Table (/etc/fstab)

#user@localhost:~/$
sudo sh -c "echo '/dev/mmcblk1p2  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"
sudo sh -c "echo '/dev/mmcblk1p1  /boot/uboot  auto  defaults  0  2' >> /media/rootfs/etc/fstab"

Remove microSD/SD card

sync
sudo umount /media/boot
sudo umount /media/rootfs

Status

#user@localhost:~$
Digi U-Boot 2013.04.4.2 (Dec 04 2015 - 13:33:14)
 
CPU:   Freescale i.MX6Q rev1.5 at 792 MHz
CPU:   Temperature 45 C, calibration data: 0x5654db69
Reset cause: POR
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
Board: ConnectCore 6 SBC (undefined version)
Boot device: esdhc4 (eMMC)
PMIC:  DA9063, Device: 0x61, Variant: 0x50, Customer: 0x00, Config: 0x56
Net:   FEC [PRIME]
Hit any key to stop autoboot:  0 
=> env set -f mmcdev 1
=> env set -f mmcbootdev 1
=> run bootcmd
reading boot.scr
628 bytes read in 12 ms (50.8 KiB/s)
## Executing script at 12000000
boot.scr -> uEnv.txt wrapper...
128 bytes read in 43 ms (2 KiB/s)
5315056 bytes read in 301 ms (16.8 MiB/s)
47262 bytes read in 258 ms (178.7 KiB/s)
debug: [console=ttymxc3,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait fixrtc] ...
debug: [bootz 0x12000000 - 0x18000000] ...
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
switch to LDO bypass mode
   Using Device Tree in place at 18000000, end 1800e89d
Unable to update property /wireless:mac-address, err=FDT_ERR_NOTFOUND
Unable to update property /bluetooth:mac-address, err=FDT_ERR_NOTFOUND
 
Starting kernel ...

Till we port mainline u-boot, stop u-boot:

#user@localhost:~$
Hit any key to stop autoboot:  0
=>

and run:

#user@localhost:~$
env set -f mmcdev 1
env set -f mmcbootdev 1
run bootcmd

h2. Upgrade U-Boot
Verify u-boot.imx is present

#user@localhost:~$
=> fatls mmc 1
   302528   u-boot.imx
      628   boot.scr
 
2 file(s), 0 dir(s)

Upgrade with u-boot.imx

#user@localhost:~$
=> update uboot mmc 1 fat u-boot.imx
Do you really want to program the boot loader? <y/N> y
reading u-boot.imx
302528 bytes read in 30 ms (9.6 MiB/s)
switch to partions #1, OK
mmc0(part 1) is current device
Writing firmware...
 
MMC write: dev # 0, block # 2, count 591 ... 591 blocks write: OK
Reading back firmware...
 
MMC read: dev # 0, block # 2, count 591 ... 591 blocks read: OK
Verifying firmware...
Total of 75632 word(s) were the same
Update was successful
mmc0(part 1) is current device

reset board and verify new version

#user@localhost:~$
=> reset
resetting ...
 
Digi U-Boot 2013.04.4.2 (Dec 04 2015 - 13:33:14)

CPU:   Freescale i.MX6Q rev1.5 at 792 MHz
CPU:   Temperature 43 C, calibration data: 0x5654db69
Reset cause: WDOG
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
Board: ConnectCore 6 SBC (undefined version)
Boot device: esdhc4 (eMMC)
PMIC:  DA9063, Device: 0x61, Variant: 0x50, Customer: 0x00, Config: 0x56
Net:   FEC [PRIME]
Hit any key to stop autoboot:  0
=> version
 
Digi U-Boot 2013.04.4.2 (Dec 04 2015 - 13:33:14)
arm-eabi-gcc (GCC) 4.7
GNU ld (GNU Binutils) 2.22.90.20120727
=> 

U-Boot, reset enviroment

#user@localhost:~$
=> env default -a
## Resetting to default environment
## Error: Can't overwrite "ethaddr"
himport_r: can't insert "ethaddr=00:04:f3:ff:ff:fa" into hash table
## Error: Can't overwrite "wlanaddr"
himport_r: can't insert "wlanaddr=00:04:f3:ff:ff:fb" into hash table
## Error: Can't overwrite "btaddr"
himport_r: can't insert "btaddr=00:04:f3:ff:ff:fc" into hash table
=> saveenv
Saving Environment to MMC...
Writing to MMC(0)... done

Comments

Any questions or comments please go to our TechForum: TechForum