Official doc http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX6Q

Community Doc: task1, task2,…

Software & Tool: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREBRD&fpsp=1&tab=Design_Tools_Tab

这CPU是很强,文档也很齐全。但是刷机居然用私有的老土的GUI,很是不geek。

U-Boot

http://boundarydevices.com/u-boot-on-i-mx6/

Build u-boot for SD by this guide https://community.freescale.com/docs/DOC-95015 This flash u-boot way didn’t work for emmc.

Official board’s and above didn’t work(no response beside a ‘?’). I use WinMerge(good tool) to compare codes, lots of different.

my post. At last, I found it is UART configuration related(mx6q_sabresd.c, setup_uart).

new u-boot. It support dts(device tree) and it is necessary for kernel after v3.10.

U-Boot 2013.04 (Jun 05 2014 - 20:38:45)

CPU: Freescale i.MX6Q rev1.2 at 792 MHz

CPU: Temperature 26 C, calibration data: 0x5514bb69

Reset cause: POR

Board: MX6Q/SDL-SabreSD

I2C: ready

DRAM: 1 GiB (defined at include/configs/mx6sabresd.h,if modify, stop here)

MMC: (stop at common/board_r.c after make some changes to mxsabresd.c file, device can continue, but can’t find any mmc device beside emmc. But read from emmc will hang device. And device often can’t start if boot from SD. Wait half of hour, can boot again. Shit.)

A guy on E9 forum has contribute code. https://github.com/xuhuashan/imx6q Run “make mx6q-tqe9_config”.

tftp #load kernel 
mmc write ${loadaddr} 0x800 0x4000 
tftpboot ${fdt_addr} ${fdt_file} 
mmc write ${fdt_addr} 0x5000 0x800; 
bootm ${loadaddr} - ${fdt_addr} 
mmc read ${loadaddr} 0x800 0x4000; 
mmc read ${fdt_addr} 0x5000 0x800; 
bootm ${loadaddr} - ${fdt_addr} 
setenv bootargs_base 'setenv bootargs console=ttymxc0,115200' 
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk1p1 rootwait rw ip=dhcp' 
setenv bootcmd_mmc 'run bootargs_base bootargs_mmc;mmc dev 0;mmc read ${loadaddr} 0x800 0x4000;mmc read ${fdt_addr} 0x5000 0x800;bootm ${loadaddr} - ${fdt_addr}' 
setenv bootcmd 'run bootcmd_mmc' 
run bootcmd 

Booting kernel from Legacy Image at 12000000 ... 
   Image Name:   Linux-3.10.17 
   Image Type:   ARM Linux Kernel Image (uncompressed) 
   Data Size:    5250576 Bytes = 5 MiB 
   Load Address: 10008000 
   Entry Point:  10008000
   Verifying Checksum ... OK 
Flattened Device Tree blob at 18000000 
   Booting using the fdt blob at 0x18000000 
   Loading Kernel Image ... OK 
   Using Device Tree in place at 18000000, end 1800d91f 

Use stock u-boot to load my kernel:

fatload mmc 1 10800000 uImage

setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw

10800000 is offset of uImage, otherwise, throw error: Wrong Image Format for bootm command. SD card partition1 is vfat type. To copy rootfs, use tar xvpfz oneiric.tgz -C /mnt/sd. At last run bootm.

Use SD card and put kernel at a vfat partition will fast kernel developing.

Board config defined at boards.conf & include/configs/mx6sabresd.h.

Build kernel

Build linux kernel for SD https://community.freescale.com/docs/DOC-95017

When make uImage(v3.14), some error. Add “LOADADDR=10008000” like this topic.—>Ref “How to Generate uImage from a zImage” in i.MX_6Dual6Quad_SABRE-SD_Linux_User’s_Guide. Remember use tool provided by running u-boot.

Official kernel downloaded from Software & Tool site is still 3.0.35 (3.0.35-2666-gbdde708). For existing Linux in eMMC, use “dd if=uImage of=/dev/mmcblk0 bs=512 seek=2048 conv=fsync” to flash kernel. Ref i.MX_6Dual6Quad_SABRE-SD_Linux_User’s_Guide.pdf. To replace /boot/uImage doesn’t work.

But when I do a refresh flash using MfgTool with new kernel, kernel stop at “print_constraints: vdd3p0: 2625 <–> 3400 mV at 3000 mV fast normal”. Then by compare and add log to arch/arm/mach-mx6/board-mx6q_sabresd.c, I found kernel suspended at mxc_iomux_v3_setup_multiple_pads in mx6_sabresd_board_init method. Copy code from stock one, WORK!

make modules_install INSTALL_MOD_PATH=~/rk/mod_fw/

Known issue:

  1. with stock rootfs, HDMI has text on screen when boot console. But when startface4, HDMI signal got lost. —> use official rootfs(11.10)

  2. lots of process like irq/346-max1180 takes lots of CPU(also have /usr/sbin/irqbalance). Stock kernel(3.0.35-2508) didn’t have these kind of process(only have ksoftirqd/[0-4]). Same rootfs, why? Disable by /etc/default/irqbalance didn’t change anything. Looks OK after connect SATA. why?

  3. can’t find mmcblk1p2 if want to boot by SD card’s rootfs. Only find mmcblk0p1.

  4. dmesg has many FIFO_RD_AUX_MSB read fails -> disable “MXC Video For Linux Camera” in menuconfig

  5. if disable/stop lightdm service, console login didn’t popup.

After upgrade from 11.10 to Ubuntu 12.04 LTS, desktop looks well, but display driver wasn’t loaded:

[ 8.435] (II) LoadModule: "dri2" 
[ 8.436] (II) Loading /usr/lib/xorg/modules/extensions/libdri2.so 
[ 8.437] (II) Module dri2: vendor="X.Org Foundation" 
[ 8.437] compiled for 1.11.3, module version = 1.2.0 
[ 8.437] ABI class: X.Org Server Extension, version 6.0 
[ 8.437] (II) Loading extension DRI2 
[ 8.437] (II) LoadModule: "vivante" 
[ 8.438] (II) Loading /usr/lib/xorg/modules/drivers/vivante_drv.so 
[ 8.471] (II) Module vivante: vendor="X.Org Foundation" 
[ 8.471] compiled for 1.10.4, module version = 1.0.0 
[ 8.471] ABI class: X.Org Video Driver, version 10.0 
[ 8.471] (EE) module ABI major version (10) doesn't match the server's version (11) 
[ 8.471] (II) UnloadModule: "vivante" 

1.11.3 is X Server version.

xserver-xorg-video-imx-viv-3.0.35-4.1.0.tar.gz to compile it, need “apt-get install xserver-xorg-dev libdrm-dev x11proto-xf86dri-dev”

https://github.com/zOrg1331/xorg-drv-vivante

But looks Yocto has already supported new x.org. this. this.

After change to Wandboard 12.04.3 Ubuntu, works well. Now log is:

[ 10.999] (II) Loading /usr/lib/xorg/modules/drivers/vivante_drv.so 
[ 11.039] (II) Module vivante: vendor="X.Org Foundation" 
[ 11.039] compiled for 1.11.3, module version = 1.0.0 
[ 11.039] ABI class: X.Org Video Driver, version 11.0 

Yocto

https://www.ibm.com/developerworks/cn/linux/l-yocto-linux/

http://www.yoctoproject.org/docs/current/kernel-dev/kernel-dev.html

https://github.com/Freescale/fsl-community-bsp-platform

For archLinux, python should be version 2. Check this topic to add link and add it to PATH. Make sure “/usr/bin/env python” get 2.7. Same for make-3.81.

Output file is at <build directory>/tmp/deploy/images

For generated rootfs.tar.bz2, to use it in Mfgtools, bunzip2 -c < file.tar.bz2 gzip -c > file.tar.gz.

For error “Missing devtmpfs, which is required for udev to run”, change config:

​ CONFIG_DEVTMPFS=y

​ CONFIG_DEVTMPFS_MOUNT=y

To just compile Kernel, first, use “bitbake -s grep linux” to get package is “linux-imx”. “bitbake linux-imx -c listtasks” will show all tasks. For example, to make u-boot-imx work on E9:
  1. Go to “target/tmp/work/imx6qsabresd-poky-linux-gnueabi/u-boot-imx/2013.04-r0/git”. Modify “board/freescale/mx6qsabresd/mx6qsabresd.c”. Then use “git diff” to generate patch.

  2. vi ./sources/meta-fsl-bsp-release/imx/meta-fsl-arm/recipes-bsp/u-boot/u-boot-imx_2013.04.bbappend, put patch at sources/meta-fsl-arm/recipes-bsp/u-boot/u-boot-imx/.

  3. under target dir, “bitbake u-boot-imx -c build”. If has build successfully ever, run “bitbake u-boot-imx -c cleansstate” at first.

  4. got images at “tmp/deploy/images/imx6qsabresd”. If found error, check details log at "tmp/work/<toolchain>/<component>/temp"

The Yocto os didn’t have apt-get and it use busybox. UI use QT5. So ugly. How to let it generate Ubuntu? A topic about compare ltib, yocto & linaro. Linaro looks not support imx6 now.

From 3.10 kernel,

Freescale use Yocto to replace ltib. Default imx6qsabresd didn’t work for E9.

When boot from tftp, ip should be 192.168.0.103 which will not conflict with 192.168.1.xxx. tftp only work at Mac osx. Shit!

Wandboard provides Ubuntu 12.04.3. Try this.

unxz < ubuntu-wandboard-20131217.img.xz > ubuntu-wandboard-20131217.img

For a img, it has partitions. So if want to mount it directly, you have to find the offset of specific partition, as this topic. But I failed. I have to burn it to SD card. then run “tar cvpzf backup.tgz ./”. Then use Mfgtools to burn to E9. Works!

Wandboard’s least kernel

http://wiki.wandboard.org/index.php/Wandboard_Linux_Kernel_3.10.17_Status

Graphic

software & tool: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREBRD&fpsp=1&tab=Design_Tools_Tab

GPU & OPENCL: above link

From doc, looks i.MX is designed for Graphic(specific for car/automatic)

When run startxfce4, modules drm & van*** will be loaded.

SATA

hdparm -t /dev/sda will get down from 100MB/s to 50. like this topic said.

time dd if=5G.mkv bs=64k dd of=/dev/null 80MB/s ???

time dd if=5G.mkv bs=8k of=/dev/null 120MB/s ???

Sata 1G disk + 1G network: 42MB/s. samba

https://community.freescale.com/thread/310016

Use iperf, only 434 Mb/s?? Both of this & cubietruck use RTL8211E phy, CT can get 513M. But http://en.wikipedia.org/wiki/Cubieboard say it can get 800M?

IEEE 802.3 Compliant RGMII (RTL8211E/RTL8211EG)

IEEE 802.3 Compliant GMII (RTL8211EG only)

wandboard use AR8031. It supports RGMII and/or SGMII interfaces to MAC devices. Same rank with RTL8211E.

In L3.0.35_4.1.0_130816_docs/doc/html/UnresolvedDefects.html, there is two defect:

ENGR00225627 [MX6Q_SabreSD]performance test_1G Ethernet bandwidth down 8 percent. 100%

ENGR00224362 [MX6Q_SabreSD]performance test_ Sata file sys write speed down 15 percent. 100%

http://boundarydevices.com/i-mx6-ethernet/ Gigabit Ethernet performance issues

平台采用 RTL8211E 作为网卡,原因是RTL8211EG 封装为 QFN64,RTL8211E 的封装为 QFN48,但是两者之间价格差异较大,RTL8211E 的价格更为便宜, RTL8211EG 价格稍贵, 主要的差别是 RTL8211EG 支持 GMII/MII接口,RTL8211E 不支持

Ethernet tx-queue timeouts when SATA is active http://www.spinics.net/lists/arm-kernel/msg278453.html

OpenCL OpenCL Hello World

PCI-E switch http://trac.gateworks.com/wiki/ventana/PCIe use PLX 8609 to export 6 pci-e which can be use to connect WIFI device.

Broad has PCI-E http://www.imx6rex.com/application/imx6-development-board/