YOCTO Linux: How to add support for a custom board (or OpenRex)

Here you will find information about how to get the YOCTO Linux source code, how to modify it for your custom board and how to test it. As an example, we will be porting Linux on OpenRex board.

Content

See also


Important: Before you start, be sure you go through the previous chapter: YOCTO uBoot: How to add support for a custom board (or OpenRex)

Linux: Upload the original YOCTO source code to github

Be sure you start with empty meta-openrex (no patches inside). Run this to get clean starting source code. Run this:
cd ~/fsl-community-bsp/ //run this command in case bitbake is not found, otherwise you don't have to run it
source setup-environment build //run this command in case bitbake is not found, otherwise you don't have to run it
cd ~/fsl-community-bsp/build/
bitbake -c clean linux-fslc-imx
bitbake -c compile -f linux-fslc-imx
bitbake core-image-minimal
We need to do a small correction for github. Delete the old .git:
cd ~/fsl-community-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-fslc-imx/3.14-1.1.x+gitAUTOINC+327d5c9063-r0/git/
rm -rf .git
and edit .gitignore
nano .gitignore
Go on the end of the file and add following line (a folder .pc/ is added during applying patches and we dont want to have it in github):
/.pc/*
We need to upload the original YOCTO Kernel source code to github. Create a new repository and put it there.
cd ~/fsl-community-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-fslc-imx/3.14-1.1.x+gitAUTOINC+327d5c9063-r0/git/
git init
git add .
git commit -m 'Initial version'
git remote add origin https://github.com/FEDEVEL/openrex-linux-3.14.git
git push -u origin master
I normally also create a branch:
git branch jethro
git push origin jethro
Change to the branch 'jethro':
git checkout jethro

Linux: How to add support for OpenRex (Or your custom board)

Very often, there are differences between software versions. Therefore, there are no general instruction how to add custom support into the software. You may need to figure out by yourself what everything has to be changed and added to support a new board. One of the ways how to do it, is to search for files with your reference board name. For example, in our case we look for "sabresd".
cd ~/fsl-community-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-fslc-imx/3.14-1.1.x+gitAUTOINC+327d5c9063-r0/git/
grep -r "sabresd"
Here are the results:
fedevel@ubuntu:~/fsl-community-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-fslc-imx/3.14-1.1.x+gitAUTOINC+327d5c9063-r0/git$ grep -r "sabresd"
drivers/power/sabresd_battery.c: * sabresd_battery.c - Maxim 8903 USB/Adapter Charger Driver
drivers/power/sabresd_battery.c:#include <linux/power/sabresd_battery.h>
drivers/power/sabresd_battery.c:MODULE_ALIAS("sabresd_battery");
drivers/power/Kconfig:	  sabresd board.The driver supports controlling charger and battery
drivers/power/Makefile:obj-$(CONFIG_SABRESD_MAX8903)   += sabresd_battery.o
Binary file .git/index matches
Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt:	compatible = "fsl,imx6q-sabresd-wm8962",
Documentation/devicetree/bindings/sound/imx-audio-cs42888.txt:	compatible = "fsl,imx6q-sabresd-wm8962",
Documentation/devicetree/bindings/arm/fsl.txt:    - compatible = "fsl,imx6q-sabresd", "fsl,imx6q";
include/linux/power/sabresd_battery.h: * sabresd_battery.h - Maxim 8903 USB/Adapter Charger Driver
arch/arm/boot/dts/imx6dl-sabresd.dts:#include "imx6qdl-sabresd.dtsi"
arch/arm/boot/dts/imx6dl-sabresd.dts:	compatible = "fsl,imx6dl-sabresd", "fsl,imx6dl";
arch/arm/boot/dts/imx6q-sabresd-hdcp.dts:#include "imx6q-sabresd.dts"
arch/arm/boot/dts/imx6dl-sabresd-btwifi.dts:#include "imx6dl-sabresd.dts"
arch/arm/boot/dts/imx6dl-sabresd-btwifi.dts:#include "imx6qdl-sabresd-btwifi.dtsi"
arch/arm/boot/dts/imx6qp-sabresd-hdcp.dts:#include "imx6qp-sabresd.dts"
arch/arm/boot/dts/imx6qp-sabresd-btwifi.dts:#include "imx6qp-sabresd.dts"
arch/arm/boot/dts/imx6qp-sabresd-btwifi.dts:#include "imx6qdl-sabresd-btwifi.dtsi"
arch/arm/boot/dts/imx6dl-sabresd-hdcp.dts:#include "imx6dl-sabresd.dts"
arch/arm/boot/dts/Makefile:	imx6dl-sabresd.dtb \
arch/arm/boot/dts/Makefile:	imx6dl-sabresd-btwifi.dtb \
arch/arm/boot/dts/Makefile:	imx6dl-sabresd-enetirq.dtb \
arch/arm/boot/dts/Makefile:	imx6dl-sabresd-ldo.dtb \
arch/arm/boot/dts/Makefile:	imx6dl-sabresd-pf200.dtb \
arch/arm/boot/dts/Makefile:	imx6dl-sabresd-hdcp.dtb \
arch/arm/boot/dts/Makefile:	imx6qp-sabresd.dtb \
arch/arm/boot/dts/Makefile:	imx6qp-sabresd-btwifi.dtb \
arch/arm/boot/dts/Makefile:	imx6qp-sabresd-ldo.dtb \
arch/arm/boot/dts/Makefile:	imx6qp-sabresd-hdcp.dtb \
arch/arm/boot/dts/Makefile:	imx6q-sabresd.dtb \
arch/arm/boot/dts/Makefile:	imx6q-sabresd-btwifi.dtb \
arch/arm/boot/dts/Makefile:	imx6q-sabresd-enetirq.dtb \
arch/arm/boot/dts/Makefile:	imx6q-sabresd-ldo.dtb \
arch/arm/boot/dts/Makefile:	imx6q-sabresd-hdcp.dtb \
arch/arm/boot/dts/imx6qp-sabresd-ldo.dts:#include "imx6qp-sabresd.dts"
arch/arm/boot/dts/imx6dl-sabresd-ldo.dts:#include "imx6dl-sabresd.dts"
arch/arm/boot/dts/imx6dl-sabresd-enetirq.dts:#include "imx6dl-sabresd.dts"
arch/arm/boot/dts/imx6q-sabresd-ldo.dts:#include "imx6q-sabresd.dts"
arch/arm/boot/dts/imx6sx-sdb.dts:		compatible = "fsl,imx6q-sabresd-wm8962",
arch/arm/boot/dts/imx6dl-sabresd-pf200.dts:#include "imx6dl-sabresd-ldo.dts"
arch/arm/boot/dts/imx6qp-sabresd.dts:#include "imx6q-sabresd.dts"
arch/arm/boot/dts/imx6qp-sabresd.dts:	imx6qdl-sabresd {
arch/arm/boot/dts/imx6q-sabresd-btwifi.dts:#include "imx6q-sabresd.dts"
arch/arm/boot/dts/imx6q-sabresd-btwifi.dts:#include "imx6qdl-sabresd-btwifi.dtsi"
arch/arm/boot/dts/imx6q-sabresd-enetirq.dts:#include "imx6q-sabresd.dts"
arch/arm/boot/dts/imx6q-sabresd.dts:#include "imx6qdl-sabresd.dtsi"
arch/arm/boot/dts/imx6q-sabresd.dts:	compatible = "fsl,imx6q-sabresd", "fsl,imx6q";
arch/arm/boot/dts/imx6sl-evk.dts:		compatible = "fsl,imx6q-sabresd-wm8962",
arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi:	imx6qdl-sabresd-murata-v2 {
arch/arm/boot/dts/imx6qdl-sabresd.dtsi:		compatible = "fsl,imx6q-sabresd-wm8962",
arch/arm/boot/dts/imx6qdl-sabresd.dtsi:	imx6qdl-sabresd {
arch/arm/mach-imx/mach-imx6q.c:		if (of_machine_is_compatible("fsl,imx6q-sabresd") ||
arch/arm/mach-imx/mach-imx6q.c:		else if (of_machine_is_compatible("fsl,imx6dl-sabresd") ||
fedevel@ubuntu:~/fsl-community-bsp/build/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-fslc-imx/3.14-1.1.x+gitAUTOINC+327d5c9063-r0/git$ 
Set the compiler:
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
Try if you can compile linux without any changes:
make clean
make imx_v7_defconfig
make -j4 zImage imx6q-sabresd.dtb

Adding support for a new custom board

Edit: "arch/arm/boot/dts/Makefile" Find "imx6q-sabresd" and add:
imx6q-openrex.dtb \
This is how it will look
imx6q-sabresd-hdcp.dtb \
imx6q-openrex.dtb \
imx6q-sbc6x.dtb \
Edit: "arch/arm/boot/dts/imx6q-openrex.dts"
cp arch/arm/boot/dts/imx6q-sabresd.dts arch/arm/boot/dts/imx6q-openrex.dts
gedit arch/arm/boot/dts/imx6q-openrex.dts
Replace
#include "imx6qdl-sabresd.dtsi"
with
#include "imx6qdl-openrex.dtsi"
Edit: "arch/arm/boot/dts/imx6qdl-openrex.dtsi" You may noticed that imx6q-openrex.dts calls imx6qdl-sabresd.dtsi. Let's create it for openrex:
cp arch/arm/boot/dts/imx6qdl-sabresd.dtsi arch/arm/boot/dts/imx6qdl-openrex.dtsi
gedit arch/arm/boot/dts/imx6qdl-openrex.dtsi
You may need to have a look also inside "arch/arm/mach-imx/mach-imx6q.c". There is something about sabresd, but we don't need to edit it, at least not now.

Linux: Compile

That's it. Try to compile our new custom board:
make clean
make imx_v7_defconfig
make -j4 zImage imx6q-openrex.dtb
*Note: If you get error "piggy.lzo Error" just install lzop. Run "sudo apt-get install lzop".

The output files are located at:
arch/arm/boot/zImage
arch/arm/boot/dts/imx6q-openrex.dtb
Now the hard part. You will need to go through "arch/arm/boot/dts/imx6q-openrex.dts" and "arch/arm/boot/dts/imx6qdl-openrex.dtsi" files and correct them. Advice: After some changes always try to recompile, and check if you have not changed/removed something critical.

How to edit dts / dtsi files?

Go through the files, remove the peripherals you don't need and correct pin assigment. For example: Original
		pinctrl_ecspi1: ecspi1grp {
			fsl,pins = <
				MX6QDL_PAD_KEY_COL1__ECSPI1_MISO	0x100b1
				MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI	0x100b1
				MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK	0x100b1
			>;
		};
Go to our schematic and have a look where CSPI1_MISO is connected. You can see it's GPIO3_IO17. Go to arch/arm/boot/dts/imx6q-pinfunc.h and search for "GPIO3_IO17". You will find "MX6QDL_PAD_EIM_D17__GPIO3_IO17" ... we would like to work this pin in MISO mode, so select "MX6QDL_PAD_EIM_D17__ECSPI1_MISO" and paste it into dtsi file. It will look then:
		pinctrl_ecspi1: ecspi1grp {
			fsl,pins = <
				MX6QDL_PAD_EIM_D17__ECSPI1_MISO		0x100b1
				MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI	0x100b1
				MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK	0x100b1
			>;
		};
Do it for all the pins. If you are not sure where the pin from reference board is connected, search through reference schematic.

Linux: Useful stuff

Board releated files
gedit arch/arm/boot/dts/imx6q-openrex.dts
gedit arch/arm/boot/dts/imx6qdl-openrex.dtsi
File where you can find default configuration:
gedit arch/arm/configs/imx_v7_defconfig
File where you can find pin names:
gedit arch/arm/boot/dts/imx6q-pinfunc.h

Linux: Try the compiled Kernel

Copy the files to /tftp directory
cp arch/arm/boot/zImage /tftp/zImage-imx6q-openrex
cp arch/arm/boot/dts/imx6q-openrex.dtb /tftp/imx6q-openrex-dtb
Now, be careful. It is important, that your uBoot environment variables are set correctly. If an important parameter is missing, something may not work (for example ethernet may not work or Linux will freeze at Starting Linux .....).

Here is example of uBoot parameters from working uBoot 2014. You may find them useful (they work also with uBoot 2015):
setenv baudrate '115200'

setenv boot_fdt 'try'

setenv bootcmd 'mmc dev ${mmcdev};if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi'

setenv bootdelay '3'

setenv bootscript 'echo Running bootscript from mmc ...; source'

setenv console 'ttymxc0'

setenv ethact 'FEC'

setenv ethaddr '00:0d:15:00:d4:20'

setenv ethprime 'FEC'

setenv fdt_addr '0x18000000'

setenv fdt_file 'imx6q-openrex-dtb'

setenv fdt_high '0xffffffff'

setenv image 'zImage'

setenv initrd_high '0xffffffff'

setenv loadaddr '0x10800000'

setenv loadbootscript 'fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};'

setenv loadfdt 'fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}'

setenv loadimage 'fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}'

setenv mmcargs 'setenv bootargs console=${console},${baudrate} root=${mmcroot}'

setenv mmcboot 'echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;'

setenv mmcdev '0'

setenv mmcpart '1'

setenv mmcroot '/dev/mmcblk2p2 rootwait rw'

setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'

setenv netboot 'echo Booting from net ...; run set_ethernet; run netargs; tftp ${tftp_dir}/${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if tftp ${fdt_addr} ${tftp_dir}/${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;'

setenv script 'boot-imx6q-tinyrex.scr'

setenv set_ethernet 'if test ${ethaddr}; then; else setenv ethaddr  00:0D:15:00:D1:75; fi; if test ${ipaddr}; then; else setenv ipaddr   192.168.0.150; fi; if test ${serverip}; then; else setenv serverip 192.168.0.1; fi; if test ${netmask}; then; else setenv netmask  255.255.255.0; fi'

setenv spics 'CONFIG_ENV_SPI_CS'

setenv spidev 'CONFIG_ENV_SPI_BUS'

setenv stderr 'serial'

setenv stdin 'serial'

setenv stdout 'serial'

setenv tftp_dir 'imx6'

setenv uboot 'u-boot-imx6q-tinyrex.imx'

setenv update_fdt 'run set_ethernet; run update_set_filename; if mmc dev ${mmcdev}; then if tftp ${tftp_dir}/${upd_fdt}; then fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${fdt_file} ${filesize}; fi; fi'

setenv update_kernel 'run set_ethernet; run update_set_filename; if mmc dev ${mmcdev}; then if tftp ${tftp_dir}/${upd_kernel}; then fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} ${filesize}; fi; fi'

setenv update_script 'run set_ethernet; run update_set_filename; if mmc dev ${mmcdev}; then if tftp ${tftp_dir}/${upd_script}; then fatwrite mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script} ${filesize}; fi; fi'

setenv update_set_filename 'if test ${upd_uboot}; then; else setenv upd_uboot u-boot-imx6q-tinyrex.imx; fi; if test ${upd_kernel}; then; else setenv upd_kernel zImage-imx6q-tinyrex; fi; if test ${upd_fdt}; then; else setenv upd_fdt    imx6q-tinyrex.dtb; fi; if test ${upd_script}; then; else setenv upd_script boot-imx6q-tinyrex.scr; fi'

setenv update_uboot 'run set_ethernet; run update_set_filename; if mmc dev ${mmcdev}; then if tftp ${tftp_dir}/${upd_uboot}; then setexpr fw_sz ${filesize} / 0x200; setexpr fw_sz ${fw_sz} + 1; mmc write ${loadaddr} 0x2 ${fw_sz}; fi; fi'
In our case, I had to add following parameters to be able to boot Linux:
setenv fdt_addr '0x18000000'
setenv fdt_high '0xffffffff'
saveenv
To test our Linux (it will not fully boot up, we do not have file system yet), run:
tftp 0x10800000 zImage-imx6q-openrex
tftp 0x18000000 imx6q-openrex-dtb
bootz 0x10800000 - 0x18000000
It may look like this:
U-Boot 2015.10+fslc+g1b6aee7 (Mar 03 2016 - 23:55:53 -0800)

CPU:   Freescale i.MX6Q rev1.2 996 MHz (running at 792 MHz)
CPU:   Automotive temperature grade (-40C to 125C) at 46C
Reset cause: POR
Board: iMX6-OpenRex
I2C:   ready
DRAM:  2 GiB
MMC:   FSL_SDHC: 0
SF: Detected SST26VF032B with page size 256 Bytes, erase size 4 KiB, total 4 MiB
In:    serial
Out:   serial
Err:   serial
Net:   FEC
Hit any key to stop autoboot:  0
OpenRex U-Boot> printenv
baudrate=115200
board_name=OPENREX
board_rev=MX6Q
bootargs=console=ttymxc0,115200
bootargs_base=setenv bootargs console=ttymxc0,115200
bootargs_mmc=setenv bootargs ${bootargs} ip=dhcp root=/dev/mmcblk0p1 rootwait video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB666 vmalloc=400M fbmem=28M fbcon=28M
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
bootargs_sata=setenv bootargs ${bootargs} ip=dhcp root=/dev/sda1 rootwait video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB666 vmalloc=400M fbmem=28M fbcon=28M
bootcmd=run bootcmd_sata
bootcmd_mmc=run bootargs_mmc; mmc dev 0; ext2load mmc 0 0x10800000 uImage 3850000; bootm 0x10800000
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel}; bootm
bootcmd_sata=run bootargs_sata; mmc dev 0; ext2load mmc 0 0x10800000 uImage 3850000; bootm 0x10800000
bootdelay=3
ethact=FEC
ethaddr=00:0d:15:00:dc:ed
ethprime=FEC0
fdt_addr=0x18000000
fdt_high=0xffffffff
ipaddr=192.168.0.150
kernel=uImage
loadaddr=0x10800000
netdev=eth0
netmask=255.255.255.0
nfsroot=/opt/eldk/arm
rd_loadaddr=(0x1300000)
serverip=192.168.0.37
stderr=serial
stdin=serial
stdout=serial
uboot=u-boot.bin

Environment size: 1233/8188 bytes
OpenRex U-Boot> tftp 0x10800000 zImage-imx6q-openrex
Using FEC device
TFTP from server 192.168.0.37; our IP address is 192.168.0.150
Filename 'zImage-imx6q-openrex'.
Load address: 0x10800000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ####
         1.1 MiB/s
done
Bytes transferred = 6005944 (5ba4b8 hex)
OpenRex U-Boot> tftp 0x18000000 imx6q-openrex-dtb
Using FEC device
TFTP from server 192.168.0.37; our IP address is 192.168.0.150
Filename 'imx6q-openrex-dtb'.
Load address: 0x18000000
Loading: ########
         990.2 KiB/s
done
Bytes transferred = 36507 (8e9b hex)
OpenRex U-Boot> bootz 0x10800000 - 0x18000000
Kernel image @ 0x10800000 [ 0x000000 - 0x5ba4b8 ]
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
   Using Device Tree in place at 18000000, end 1800be9a

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.14.61+g327d5c9 (fedevel@ubuntu) (gcc version 4.8.2 (Ubuntu/Linaro 4.8.2-16ubuntu4) ) #7 SMP PREEMPT Sun Mar 6 23:36:33 PST 2016
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: FEDEVEL i.MX6 Quad OpenRex Board
cma: CMA: reserved 320 MiB at 6a000000
Memory policy: Data cache writealloc
PERCPU: Embedded 8 pages/cpu @ee720000 s8320 r8192 d16256 u32768
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 520720
Kernel command line: console=ttymxc0,115200
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 262144 (order: 8, 1048576 bytes)
Inode-cache hash table entries: 131072 (order: 7, 524288 bytes)
Memory: 1739220K/2097152K available (7472K kernel code, 460K rwdata, 2596K rodata, 396K init, 441K bss, 357932K reserved, 270336K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    vmalloc : 0xf0000000 - 0xff000000   ( 240 MB)
    lowmem  : 0x80000000 - 0xef800000   (1784 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .text : 0x80008000 - 0x809dd3c4   (10069 kB)
      .init : 0x809de000 - 0x80a41080   ( 397 kB)
      .data : 0x80a42000 - 0x80ab5380   ( 461 kB)
       .bss : 0x80ab538c - 0x80b23a2c   ( 442 kB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
Preemptible hierarchical RCU implementation.
NR_IRQS:16 nr_irqs:16 16
L310 cache controller enabled
l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x32470000, Cache size: 1024 kB
Switching to timer-based delay loop
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655765682ns
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 6.00 BogoMIPS (lpj=30000)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 4096 (order: 2, 16384 bytes)
Mountpoint-cache hash table entries: 4096 (order: 2, 16384 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x1071cda0 - 0x1071cdf8
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU2: Booted secondary processor
CPU2: thread -1, cpu 2, socket 0, mpidr 80000002
CPU3: Booted secondary processor
CPU3: thread -1, cpu 3, socket 0, mpidr 80000003
Brought up 4 CPUs
SMP: Total of 4 processors activated (24.00 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
pinctrl core: initialized pinctrl subsystem
regulator-dummy: no parameters
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
cpuidle: using governor menu
CPU identified as i.MX6Q, silicon rev 1.2
Use WDOG2 as reset source
syscon 20c8000.anatop: regmap [mem 0x020c8000-0x020c8fff] registered
vdd1p1: 800 <--> 1375 mV at 1100 mV
vdd3p0: 2625 <--> 3400 mV at 3000 mV
vdd2p5: 2000 <--> 2750 mV at 2400 mV
vddarm: 725 <--> 1450 mV at 1150 mV
vddpu: 725 <--> 1450 mV at 1150 mV
vddsoc: 725 <--> 1450 mV at 1175 mV
syscon 20e0000.iomuxc-gpr: regmap [mem 0x020e0000-0x020e0037] registered
syscon 21bc000.ocotp-ctrl: regmap [mem 0x021bc000-0x021bffff] registered
No ATAGs?
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
imx6q-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
bio: create slab <bio-0> at 0
mxs-dma 110000.dma-apbh: initialized
usb_otg_vbus: 5000 mV
usb_h1_vbus: 5000 mV
wm8962-supply: no parameters
mipi_dsi_pwr_on: no parameters
sensor-supply: 3300 mV
i2c-core: driver [max17135] using legacy suspend method
i2c-core: driver [max17135] using legacy resume method
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
usbphy_nop1.12 supply vcc not found, using dummy regulator
usbphy_nop2.13 supply vcc not found, using dummy regulator
i2c i2c-0: IMX I2C adapter registered
i2c i2c-1: IMX I2C adapter registered
i2c i2c-2: IMX I2C adapter registered
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
imx-ipuv3 2400000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)
imx-ipuv3 2800000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)
mxc_mipi_csi2 21dc000.mipi_csi: i.MX MIPI CSI2 driver probed
mxc_mipi_csi2 21dc000.mipi_csi: i.MX MIPI CSI2 dphy version is 0x3130302a
MIPI CSI2 driver module loaded
Advanced Linux Sound Architecture Driver Initialized.
Bluetooth: Core ver 2.18
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
cfg80211: Calling CRDA to update world regulatory domain
Switched to clocksource mxc_timer1
NET: Registered protocol family 2
TCP established hash table entries: 16384 (order: 4, 65536 bytes)
TCP bind hash table entries: 16384 (order: 5, 131072 bytes)
TCP: Hash tables configured (established 16384 bind 16384)
TCP: reno registered
UDP hash table entries: 1024 (order: 3, 32768 bytes)
UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
imx rpmsg driver is registered.
imx_busfreq busfreq.16: DDR medium rate not supported.
Bus freq driver module loaded
futex hash table entries: 1024 (order: 4, 65536 bytes)
bounce pool size: 64 pages
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
fuse init (API version 7.22)
msgmni has been set to 3508
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
imx-weim 21b8000.weim: Driver registered.
backlight.26 supply power not found, using dummy regulator
ldb ldb.15: crtc not specified or invalid
ldb: probe of ldb.15 failed with error -22
mxc_mipi_dsi 21e0000.mipi: i.MX MIPI DSI driver probed
MIPI DSI driver module loaded
MIPI DSI driver module loaded
mxc_sdc_fb fb.22: NO mxc display driver found for ldb!
mxc_hdmi 20e0000.hdmi_video: Detected HDMI controller 0x13:0xa:0xa0:0xc1
fbcvt: 1920x1080@60: CVT Name - 2.073M9
mxc_sdc_fb fb.23: registered mxc display driver hdmi IPU1_DISP0
mxc_sdc_fb fb.23: registered mxc display driver hdmi
Console: switching to colour frame buffer device 240x67
mxc_sdc_fb fb.24: NO mxc display driver found for lcd!
mxc_sdc_fb fb.25: NO mxc display driver found for ldb!
imx-sdma 20ec000.sdma: no iram assigned, using external mem
imx-sdma 20ec000.sdma: no event needs to be remapped
imx-sdma 20ec000.sdma: loaded firmware 3.2
imx-sdma 20ec000.sdma: initialized
pfuze100-regulator 1-0008: unrecognized pfuze chip ID!
pfuze100-regulator: probe of 1-0008 failed with error -5
Serial: IMX driver
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 58, base_baud = 5000000) is a IMX
console [ttymxc0] enabled
serial: Freescale lpuart driver
imx sema4 driver is registered.
[drm] Initialized drm 1.1.0 20060810
[drm] Initialized vivante 1.0.0 20120216 on minor 0
brd: module loaded
loop: module loaded
ahci-imx 2200000.sata: fsl,transmit-level-mV not specified, using 00000024
ahci-imx 2200000.sata: fsl,transmit-boost-mdB not specified, using 00000480
ahci-imx 2200000.sata: fsl,transmit-atten-16ths not specified, using 00002000
ahci-imx 2200000.sata: fsl,receive-eq-mdB not specified, using 05000000
ahci-imx 2200000.sata: SSS flag set, parallel bus scan disabled
ahci-imx 2200000.sata: AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl platform mode
ahci-imx 2200000.sata: flags: ncq sntf stag pm led clo only pmp pio slum part ccc apst
scsi0 : ahci_platform
ata1: SATA max UDMA/133 mmio [mem 0x02200000-0x02203fff] port 0x100 irq 71
spi_imx 2008000.ecspi: probed
CAN device driver interface
2188000.ethernet supply phy not found, using dummy regulator
pps pps0: new PPS source ptp0
libphy: fec_enet_mii_bus: probed
fec 2188000.ethernet eth0: registered PHC device 0
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-mxc: Freescale On-Chip EHCI Host driver
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usb_ehset_test
2184800.usbmisc supply vbus-wakeup not found, using dummy regulator
ci_hdrc ci_hdrc.1: doesn't support gadget
ci_hdrc ci_hdrc.1: EHCI Host Controller
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
i2c-core: driver [isl29023] using legacy suspend method
i2c-core: driver [isl29023] using legacy resume method
snvs_rtc 20cc034.snvs-rtc-lp: can't get snvs-rtc clock
snvs_rtc 20cc034.snvs-rtc-lp: rtc core: registered 20cc034.snvs-rtc-lp as rtc0
i2c /dev entries driver
IR NEC protocol handler initialized
IR RC5(x) protocol handler initialized
IR RC6 protocol handler initialized
IR JVC protocol handler initialized
IR Sony protocol handler initialized
IR RC5 (streamzap) protocol handler initialized
IR SANYO protocol handler initialized
IR MCE Keyboard/mouse protocol handler initialized
mxc_v4l2_output v4l2_out.29: V4L2 device registered as video16
mxc_v4l2_output v4l2_out.29: V4L2 device registered as video17
i2c-core: driver [mag3110] using legacy suspend method
i2c-core: driver [mag3110] using legacy resume method
imx2-wdt 20c0000.wdog: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=0)
Bluetooth: HCI UART driver ver 2.2
Bluetooth: HCI H4 protocol initialized
Bluetooth: HCI BCSP protocol initialized
Bluetooth: HCIATH3K protocol initialized
usbcore: registered new interface driver bcm203x
usbcore: registered new interface driver btusb
usbcore: registered new interface driver ath3k
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc1: no vqmmc regulator found
mmc1: no vmmc regulator found
mmc1: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
Galcore version 5.0.11.33433
ata1: SATA link down (SStatus 0 SControl 300)
ahci-imx 2200000.sata: no device found, disabling link.
ahci-imx 2200000.sata: pass ahci_imx..hotplug=1 to enable hotplug
mxc_vdoa 21e4000.vdoa: i.MX Video Data Order Adapter(VDOA) driver probed
mxc_vpu 2040000.vpu: VPU initialized
caam 2100000.caam: Instantiated RNG4 SH0
caam 2100000.caam: Instantiated RNG4 SH1
caam 2100000.caam: device ID = 0x0a160100 (Era 4)
caam 2100000.caam: job rings = 2, qi = 0
caam algorithms registered in /proc/crypto
hmac-sha1-caam alg registration failed
sha1-caam alg registration failed
hmac-sha224-caam alg registration failed
sha224-caam alg registration failed
hmac-sha256-caam alg registration failed
sha256-caam alg registration failed
hmac-md5-caam alg registration failed
md5-caam alg registration failed
xcbc-aes-caam alg registration failed
xcbc-aes-caam alg registration failed
caam_jr 2101000.jr0: registering rng-caam
platform caam_sm: blkkey_ex: 4 keystore units available
platform caam_sm: 64-bit clear key:
platform caam_sm: [0000] 00 01 02 03 04 0f 06 07
platform caam_sm: 64-bit black key:
platform caam_sm: [0000] 17 bf 6d a3 ac 21 48 23
platform caam_sm: [0008] cf c6 32 d0 bb 98 95 f6
platform caam_sm: 128-bit clear key:
platform caam_sm: [0000] 00 01 02 03 04 0f 06 07
platform caam_sm: [0008] 08 09 0a 0b 0c 0d 0e 0f
platform caam_sm: 128-bit black key:
platform caam_sm: [0000] 01 73 75 be 03 f4 7c 43
platform caam_sm: [0008] a6 15 e9 d0 19 58 87 cd
platform caam_sm: 192-bit clear key:
platform caam_sm: [0000] 00 01 02 03 04 0f 06 07
platform caam_sm: [0008] 08 09 0a 0b 0c 0d 0e 0f
platform caam_sm: [0016] 10 11 12 13 14 15 16 17
platform caam_sm: 192-bit black key:
platform caam_sm: [0000] ee f3 c5 7c eb 35 c5 64
platform caam_sm: [0008] ca bc 73 90 94 28 19 69
platform caam_sm: [0016] ee 7c 74 20 84 c3 13 32
platform caam_sm: [0024] 97 bb 04 ee 86 78 22 35
platform caam_sm: 256-bit clear key:
platform caam_sm: [0000] 00 01 02 03 04 0f 06 07
platform caam_sm: [0008] 08 09 0a 0b 0c 0d 0e 0f
platform caam_sm: [0016] 10 11 12 13 14 15 16 17
platform caam_sm: [0024] 18 19 1a 1b 1c 1d 1e 1f
platform caam_sm: 256-bit black key:
platform caam_sm: [0000] fd 8e 9b 33 96 23 a3 82
platform caam_sm: [0008] a7 be f4 b4 52 e9 cd a1
platform caam_sm: [0016] ff 06 6d 97 f7 19 82 18
platform caam_sm: [0024] 3f 3a 27 39 cb 6f 47 7e
platform caam_sm: 64-bit unwritten blob:
platform caam_sm: [0000] 00 00 00 00 00 00 00 00
platform caam_sm: [0008] 00 00 00 00 00 00 00 00
platform caam_sm: [0016] 00 00 00 00 00 00 00 00
platform caam_sm: [0024] 00 00 00 00 00 00 00 00
platform caam_sm: [0032] 00 00 00 00 00 00 00 00
platform caam_sm: [0040] 00 00 00 00 00 00 00 00
platform caam_sm: [0048] 00 00 00 00 00 00 00 00
platform caam_sm: [0056] 00 00 00 00 00 00 00 00
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 128-bit unwritten blob:
platform caam_sm: [0000] 00 00 00 00 00 00 00 00
platform caam_sm: [0008] 00 00 00 00 00 00 00 00
platform caam_sm: [0016] 00 00 00 00 00 00 00 00
platform caam_sm: [0024] 00 00 00 00 00 00 00 00
platform caam_sm: [0032] 00 00 00 00 00 00 00 00
platform caam_sm: [0040] 00 00 00 00 00 00 00 00
platform caam_sm: [0048] 00 00 00 00 00 00 00 00
platform caam_sm: [0056] 00 00 00 00 00 00 00 00
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 196-bit unwritten blob:
platform caam_sm: [0000] 00 00 00 00 00 00 00 00
platform caam_sm: [0008] 00 00 00 00 00 00 00 00
platform caam_sm: [0016] 00 00 00 00 00 00 00 00
platform caam_sm: [0024] 00 00 00 00 00 00 00 00
platform caam_sm: [0032] 00 00 00 00 00 00 00 00
platform caam_sm: [0040] 00 00 00 00 00 00 00 00
platform caam_sm: [0048] 00 00 00 00 00 00 00 00
platform caam_sm: [0056] 00 00 00 00 00 00 00 00
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 256-bit unwritten blob:
platform caam_sm: [0000] 00 00 00 00 00 00 00 00
platform caam_sm: [0008] 00 00 00 00 00 00 00 00
platform caam_sm: [0016] 00 00 00 00 00 00 00 00
platform caam_sm: [0024] 00 00 00 00 00 00 00 00
platform caam_sm: [0032] 00 00 00 00 00 00 00 00
platform caam_sm: [0040] 00 00 00 00 00 00 00 00
platform caam_sm: [0048] 00 00 00 00 00 00 00 00
platform caam_sm: [0056] 00 00 00 00 00 00 00 00
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 64-bit black key in blob:
platform caam_sm: [0000] dc fe b1 90 8d 2e 14 89
platform caam_sm: [0008] 55 85 ce b5 fd 60 98 7c
platform caam_sm: [0016] c4 1b ae 1f ef 9a 4f a1
platform caam_sm: [0024] bf fe 20 7b d6 7e 47 0d
platform caam_sm: [0032] cf bd 93 9f 25 f2 b6 b4
platform caam_sm: [0040] 45 44 e7 f4 16 a4 9d 76
platform caam_sm: [0048] 24 d9 44 40 6c d7 55 fb
platform caam_sm: [0056] 00 00 00 00 00 00 00 00
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 128-bit black key in blob:
platform caam_sm: [0000] fc 42 ac f9 3a fd 98 8b
platform caam_sm: [0008] 66 1d 60 74 ec 11 83 2c
platform caam_sm: [0016] 8a d0 71 22 f9 24 51 07
platform caam_sm: [0024] c8 9d ff e9 c8 e3 a8 20
platform caam_sm: [0032] 3f 6a ab f9 70 d6 25 04
platform caam_sm: [0040] b7 4e e1 17 d0 54 99 fa
platform caam_sm: [0048] ae 87 9f d9 43 4e 13 b5
platform caam_sm: [0056] 1a ff f6 18 1a 68 65 bb
platform caam_sm: [0064] 00 00 00 00 00 00 00 00
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 192-bit black key in blob:
platform caam_sm: [0000] 09 39 75 f6 d6 c6 cc 4c
platform caam_sm: [0008] 17 3c 76 be 80 f2 86 ff
platform caam_sm: [0016] 52 74 4c 9c 13 a3 32 c4
platform caam_sm: [0024] 30 58 8b 4d 42 d4 cf 57
platform caam_sm: [0032] 1d f2 da 40 61 e7 40 e1
platform caam_sm: [0040] 9d e4 92 ac b8 b2 e7 81
platform caam_sm: [0048] 6d 2b 31 9c b3 0d 2d 2b
platform caam_sm: [0056] 55 65 3a e2 0d 97 07 84
platform caam_sm: [0064] 0f f3 d1 da f2 3f d6 67
platform caam_sm: [0072] 00 00 00 00 00 00 00 00
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: 256-bit black key in blob:
platform caam_sm: [0000] f7 e1 f9 52 86 a5 ae b9
platform caam_sm: [0008] 31 5a 45 d2 23 7d 9b 69
platform caam_sm: [0016] f7 ea 1c 38 50 bd d2 80
platform caam_sm: [0024] cc 64 af 34 4a 23 c5 ba
platform caam_sm: [0032] f4 b3 a8 f0 cf 8d 73 a8
platform caam_sm: [0040] 27 ec b5 d7 96 17 3e 61
platform caam_sm: [0048] 69 1d 42 11 c1 86 11 94
platform caam_sm: [0056] 32 75 03 e1 1c 7f c2 55
platform caam_sm: [0064] 49 b2 86 14 a6 be 9f c1
platform caam_sm: [0072] b2 a1 e7 7d 05 57 cf cf
platform caam_sm: [0080] 00 00 00 00 00 00 00 00
platform caam_sm: [0088] 00 00 00 00 00 00 00 00
platform caam_sm: restored 64-bit black key:
platform caam_sm: [0000] 00 af 5b 61 39 60 ee 30
platform caam_sm: [0008] c1 25 5f 84 55 8d 3b af
platform caam_sm: restored 128-bit black key:
platform caam_sm: [0000] 01 73 75 be 03 f4 7c 43
platform caam_sm: [0008] a6 15 e9 d0 19 58 87 cd
platform caam_sm: restored 192-bit black key:
platform caam_sm: [0000] ee f3 c5 7c eb 35 c5 64
platform caam_sm: [0008] ca bc 73 90 94 28 19 69
platform caam_sm: [0016] 28 1a 15 ac 26 d4 e2 9e
platform caam_sm: [0024] 7c 1d 11 cc 94 85 7d c3
platform caam_sm: restored 256-bit black key:
platform caam_sm: [0000] fd 8e 9b 33 96 23 a3 82
platform caam_sm: [0008] a7 be f4 b4 52 e9 cd a1
platform caam_sm: [0016] ff 06 6d 97 f7 19 82 18
platform caam_sm: [0024] 3f 3a 27 39 cb 6f 47 7e
snvs-secvio 20cc000.caam-snvs: can't get snvs clock
snvs-secvio 20cc000.caam-snvs: violation handlers armed - non-secure state
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
fsl-asrc 2034000.asrc: driver registered
imx-audio-hdmi sound-hdmi.21: hdmi-hifi <-> hdmi_audio.3 mapping ok
NET: Registered protocol family 26
TCP: cubic registered
NET: Registered protocol family 10
sit: IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HIDP socket layer initialized
8021q: 802.1Q VLAN Support v1.8
Key type dns_resolver registered
cpu cpu0: failed to get regulators
imx6q-cpufreq: probe of imx6q-cpufreq.0 failed with error -2
sensor-supply: disabling
wm8962-supply: disabling
usb_otg_vbus: disabling
regulator-dummy: disabling
imx mcc test is registered.
input: gpio-keys.20 as /devices/soc0/gpio-keys.20/input/input0
snvs_rtc 20cc034.snvs-rtc-lp: setting system clock to 1970-01-01 00:29:31 UTC (1771)
ALSA device list:
  #0: imx-hdmi-soc
...
Perfect! Linux booted up, we can upload the changes to github.

Linux: Upload changes to github

When you are happy with changes, you can upload the source code to github:
git branch #check branch, should be jethro
git status
git add .
git diff origin/jethro
git commit -m 'Initial updates to support OpenRex' #use your own comment, describe what you have done
git push origin jethro