Sorry for the delay, but we've just pushed a new kernel branch for kernel version 3.10.53 for our i.MX6 boards:
This release will be pushed to the master
branch of the FSL-Community BSP shortly, but there are some very notable changes from earlier releases that we'll discuss below.
For the impatient
We've placed an image on-line here:
The image is configured to run on our BD-SL-i.MX6, Nitrogen6x, Nitrogen6_Lite, Nitrogen6_Max and Nitrogen6_VM boards.As usual, you can copy the image to an SD card or SATA drive on /dev/sdc
using zcat
and dd
like so:
~/Downloads$ sudo umount /dev/sdc*
~/Downloads$ zcat core-image-sato-3.10.53*.img.gz | sudo dd of=/dev/sdc bs=1M
~/Downloads$ sync
Or you can use Alex Page's USB Image Tool under Windows.
What works (and what doesn't)
In short: everything works. Or at least, everything we've tried works at the kernel level.
Because we based the image on the Yocto master
branch, there are some quirks in the image above, notably:Actually, that's not quite right. There are features of some of our custom boards and peripherals like HDMI input, composite video input and output which have not been tested, but are also not in widespread use.
- We don't have the Bluetooth stack configured properly, and
- We don't have Wi-Fi configured properly
Both of these have to do with the use of systemd
and connman
in the latest Yocto layers. In the case of Bluetooth, we've tested against the BlueZ 5.0 stack of our Debian Jessie images by Ubuntunizing the kernel. We'll follow up with Debian and Ubuntu images based on this kernel very soon.In the case of Wi-Fi, we had to kill the supplicant started by dbus
and start things up by hand like so:
root@nitrogen6x:~$ killall wpa_supplicant
root@nitrogen6x:~$ rfkill unblock wlan
root@nitrogen6x:~$ ifup wlan0
Successfully initialized wpa_supplicant
wlcore: firmware booted (Rev 6.3.10.0.133)
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@nitrogen6x:~$ wpa_cli scan_res
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
00:23:69:93:be:46 2412 -49 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] ssid1
6c:b0:ce:20:f6:14 2462 -53 [WPA-PSK-TKIP][ESS] ssid2
e0:91:f5:ca:de:fe 2412 -59 [WPA2-PSK-CCMP][WPS][ESS] ssid3
10:5f:06:37:67:05 2437 -82 [WPA2-PSK-CCMP+TKIP][ESS] ssid4
Then, after using wpa_cli
to configure the network as described in this post, we had to run udhcpc
manually like so:
root@nitrogen6x:~/$ udhcpc -f -q -n -i wlan0
udhcpc (v1.23.1) started
Sending discover...
Sending select for 192.168.4.42...
Lease of 192.168.4.42 obtained, lease time 600
/etc/udhcpc.d/50default: Adding DNS 192.168.0.254
/etc/udhcpc.d/50default: Adding DNS 192.168.2.1
We'll address these issues with a more full-featured image with the upcoming Fido release of Yocto.
Display support
You might have thought that 3.10.53
to the previous 3.10.31
release would be a minor update.We did, and we were wrong.Lots of changes in a variety of subsystems required re-work of our over 400 patches to the kernel tree, and the most notable (and visible) are in the area of display handling.Specifically, the LVDS Display Bridge (LDB) driver underwent a major restructuring (for the better) and broke our scheme of building up a kernel command-line with multiple video=
clauses for the kernel command line (bootargs
variable in U-Boot). Instead, the LVDS displays are defined in the device tree in a much more explicit fashion.This problem is fairly specific to our off-the-shelf boards and our desire to make each of our standard displays operate in a plug and play fashion, but this change necessitated some re-thinking of our strategy.For your production applications, the answer is much easier. You can simply cut the bits out of your device trees for displays that you aren't using. After doing so, you can essentially ignore the displays in your boot script.In short, we've almost completely re-written our boot script to change a build up bootargs process to one that prunes the device tree using the fdt rm
command in U-Boot.The following two snippets show the difference. The old boot script did this to add a video=
clause for an HDMI monitor:
if i2c probe 0x50 ; then
setenv bootargs $bootargs video=mxcfb${nextcon}:dev=hdmi,1280x720M@60,if=RGB24
setenv fbmem "fbmem=28M";
setexpr nextcon $nextcon + 1
else
echo "------ no HDMI monitor";
fi
In 3.10.53+, this turns into the following:
if i2c probe 0x50 ; then
echo "------ have HDMI monitor";
else
fdt rm hdmi_display
echo "------ no HDMI monitor";
fi
The earlier bits of the 3.10.53 boot script have loaded the DTB and we now prune or remove (rm
) the unused nodes.
The new boot script
The new boot script is currently only available for use with Yocto and is available here:
Notable changes include:
- Loads the device tree early. Our previous boot scripts tried to do the right thing for DT-enabled kernels and earlier versions.
- Doesn't set
enable_wait_mode=off
. This kernel switch is no longer supported or necessary because the device tree can indicate whether the ENET IRQ is available for use. Note that if you're using a SABRE Lite or Nitrogen6x board and aren't using the parallel camera interface, we can help you tweak your device tree to support the ENET_IRQ on GPIO 6. - Doesn't pass
fbmem
to the kernel. This is no longer needed or supported. - Added variable
lvds_1080p
to allow the use of a 1080P LVDS display using dual-channel LVDS on Nitrogen6_Max. The details are in this test in the boot script. - Added support for
LVDS1
on Nitrogen6_Max. Since we only have a single I2C touch screen connector, this isn't auto-detected, but we added a variablelvds1_panel
that allows you to select which panel you have connected as shown in this block of script. - Added support for Nitrogen6_Lite and Nitrogen6_VM. Both our Nitrogen6_Lite and Nitrogen6_VM boards have on board touch controllers that can confuse the auto-detection code. By adding a variable
ignore_lcd
to this section of the boot script, you can disable this if you're only using the LVDS or LCD channels.U-Boot > setenv ignore_lcd 1 U-Boot > saveenv && boot
Between all of these, the Nitrogen6_Max can support four simultaneous displays (HDMI, RGB, 2xLVDS) and auto-detect all except the second LVDS channel.The panel=LDB-WXGA
variable is still needed to distinguish between the 1024x600 and 1280x800 displays with the FocalTech controller as described in this post.Again, please note that all of this complexity comes from a desire to plug and play. Once you've determined what displays you'll be using, you should create a custom device tree and a custom boot script that skips all of this. Let us know if you need help with that.
Testing details
The following check-list was used during testing of the kernel. If you find a piece that's missing, please let us know.
As mentioned earlier, there are some components of especially custom boards which have not yet been tested. If you have one of these and want to push forward to the latest kernel, please contact us.
Function | SABRE Lite | Nitrogen6Q Nitrogen6DL/S | Nitrogen6-Lite | Nitrogen6-Max | Nitrogen6_VM |
---|---|---|---|---|---|
Boots | Yes | Yes | Yes | Yes | Yes |
Peripherals | |||||
MMC/SD | Top: mmcblk3 Bottom: mmcblk2 | Top: mmcblk2 Bottom: mmcblk3 | mmcblk2 | SD: mmcblk2 eMMC: mmcblk3 | SD: mmcblk2 eMMC: mmcblk3 |
Ethernet Tests described in [1] | 1Gb | 1Gb | 10/100 Mb | 1Gb | 1Gb |
USB Host | x2 (SMSC hub) | x2 (SMSC hub) | x1 | x2 | x1 |
USB Device | Yes | Yes | Yes | Yes | Yes |
USB OTG | Yes | Yes | Yes | Yes | Yes |
Headphone Audio out | Yes | Yes | Yes | Yes | Yes |
Speaker Audio out | N/A | N/A | Yes | Yes /sys/class/leds/speaker-enable | Yes |
Microphone | Yes | Yes | Yes | Yes | Yes |
HDMI Audio out | Yes | Yes | Yes | Yes | Yes |
GPIO Buttons | Yes | Yes | N/A | Yes | N/A |
SATA | Yes | Yes N/A for DL/S | N/A | Yes | N/A |
PCIe | Yes | Yes | N/A | Yes | Yes |
Wi-Fi | N/A | Yes | Yes | Yes | N/A |
Bluetooth | N/A | Works under Debian, not Yocto | Works under Debian, not Yocto | Works under Debian, not Yocto | N/A |
SPI-NOR | Yes | Yes | Yes | Yes | Yes |
Uart1/2 | Yes | Yes | Yes | Yes | Yes |
Third UARTS | N/A | N/A | N/A | /dev/ttymxc4 | /dev/ttymxc2 |
Magstripe reader | N/A | N/A | N/A | N/A | imx6dl-nitrogen6_vm-magstripe.dtb |
Real-time clock | SNVS no battery | ISL1208 | ISL1208 | RV4162 | RV4162 |
CAN bus | Yes | Yes | N/A | Yes | N/A |
Displays | |||||
1920x1080P LVDS | N/A | N/A | N/A | Yes | N/A |
1024x768 LVDS | Yes | Yes | Yes | Yes (x2) | Yes |
1024x600 LVDS | Yes | Yes | Yes | Yes (x2) | Yes |
1280x800 LVDS | Yes | Yes | Yes | Yes (x2) | Yes |
800x480 RGB | Yes | Yes | N/A | Yes | N/A |
480x272 RGB | N/A | N/A | Yes | N/A | N/A |
HDMI | Yes | Yes | Yes | Yes | Yes |
Backlights | |||||
LVDS | Yes | Yes | Yes | Yes (x2) | Yes |
RGB | Yes | Yes | Yes | Yes | Yes |
Touch screens | |||||
eGalax (Hannstar) | Yes | Yes | Yes | Yes | Yes |
ft5x06 | Yes | Yes | Yes | Yes | Yes |
tsc2004 | Yes | Yes | Yes | Yes | N/A |
AR1020 4/5-wire resistive | N/A | N/A | N/A | N/A | Yes |
Cameras | |||||
OV5642 parallel | Yes | Yes | N/A | Yes | N/A |
OV5640 MIPI | Yes | Yes | N/A | Yes | N/A |
Internals | |||||
Tapeout 1.0 | Yes | unknown | N/A | N/A | N/A |
Thermal sensor | Yes | Yes | Yes | Yes | Yes |
CPUFreq | Yes | Yes | Yes | Yes | Yes |
OTP | Yes | Yes | Yes | Yes | Yes |
CAAM | Yes | Yes | Yes | Yes | Yes |
RNG | Yes | Yes | Yes | Yes | Yes |
MTD | Yes | Yes | Yes | Yes | Yes |
GPU | Yes | Yes | Yes | Yes | Yes |
VPU | Yes | Yes | Yes | Yes | Yes |