# Debian: Getting Started with the Digi ConnectCore 6 SBC

**URL:** <https://forum.digikey.com/t/debian-getting-started-with-the-digi-connectcore-6-sbc/13022>\
**Category:** Linux Guides\
**Created:** [March 25, 2021, 4:36pm UTC](https://forum.digikey.com/t/debian-getting-started-with-the-digi-connectcore-6-sbc/13022 "2021-03-25T16:36:34Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![RobertCNelson](https://sea2.discourse-cdn.com/digikey/user_avatar/forum.digikey.com/robertcnelson/32/12_2.png) [@RobertCNelson](https://forum.digikey.com/u/RobertCNelson)\
**Post date:** [March 25, 2021, 4:36pm UTC](https://forum.digikey.com/t/debian-getting-started-with-the-digi-connectcore-6-sbc/13022/1 "2021-03-25T16:36:34Z")

</div>

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

# Availability

Boards:

- [Digi International CC-WMX6-KIT](https://www.digikey.com/en/products/detail/digi/CC-WMX6-KIT/4879264) at DigiKey

# Vendor Documentation

- NXP Documentation: [https://www.nxp.com](https://www.nxp.com)
- Digi: [https://www.digi.com](https://www.digi.com)
- ConnectCore® 6 SBC: [http://www.digi.com/products/wireless-wired-embedded-solutions/single-board-computers/connectcore-6-sbc](http://www.digi.com/products/wireless-wired-embedded-solutions/single-board-computers/connectcore-6-sbc)

# Basic Requirements

- Running a recent supported release of Debian, Fedora or Ubuntu on a x86 64bit based PC; without OS Virtualization Software.
- Many of the listed commands assume /bin/bash as the default shell.
- ARM Cross Compiler – Linaro: [https://www.linaro.org](https://www.linaro.org)
  - Linaro Toolchain Binaries: [https://www.linaro.org/downloads/](https://www.linaro.org/downloads/)

- Bootloader
  - Das U-Boot – the Universal Boot Loader: [http://www.denx.de/wiki/U-Boot](http://www.denx.de/wiki/U-Boot)
  - Source: [https://github.com/u-boot/u-boot/](https://github.com/u-boot/u-boot/)

- Linux Kernel
  - Linus’s Mainline tree: [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)

- ARM based rootfs
  - Debian: [https://www.debian.org](https://www.debian.org)

# Bootloader: U-Boot

Das U-Boot – the Universal Boot Loader: [http://www.denx.de/wiki/U-Boot](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”

```bash
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](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:

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

```

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

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

```

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

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

```

Build:

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

```

# Root File System

### Debian 11

| User | Password |
| --- | --- |
| debian | temppwd |
| root | root |

Download:

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

```

Verify:

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

```

```bash
#sha256sum output:
575738843651de2962f251447f4742d4f33313d6f7f5edf282a401207f5e6646 debian-11.3-minimal-armhf-2022-04-15.tar.xz

```

Extract:

```bash
#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.

```bash
#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

```

```bash
#Thus you would use:
export DISK=/dev/sdb

```

```bash
#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

```

```bash
#Thus you would use:
export DISK=/dev/mmcblk0

```

Erase partition table/labels on microSD card:

```bash
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.

```bash
#Check the version of sfdisk installed on your pc is atleast 2.26.x or newer.
sudo sfdisk --version

```

```bash
#Example Output
sfdisk from util-linux 2.27.1

```

```bash
#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.

```bash
#mkfs.ext4 -V
sudo mkfs.ext4 -V
mke2fs 1.43-WIP (15-Mar-2016)
        Using EXT2FS Library version 1.43-WIP

```

```bash
#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…**

```bash
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

```bash
#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

```bash
#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:

```bash
#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

```bash
#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.

```bash
#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:

```bash
#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.

```bash
-----------------------------
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.

```bash
export kernel_version=5.X.Y-Z

```

### Copy Root File System

```bash
#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

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

```

### Copy Kernel Image

Kernel Image:

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

```

### Copy Kernel Device Tree Binaries

```bash
#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

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

```

### File Systems Table (/etc/fstab)

```bash
#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

```bash
sync
sudo umount /media/boot
sudo umount /media/rootfs

```

# Status

```bash
#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:

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

```

and run:

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

```

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

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

```

Upgrade with u-boot.imx

```bash
#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

```bash
#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

```bash
#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](https://forum.digikey.com/c/support/linux-discussions/5)
