U-Boot 2014.01

Published on February 28, 2014

Archived Notice

This article has been archived and may contain broken links, photos and out-of-date information. If you have any questions, please Contact Us.

We're about to start shipping U-Boot version 2014.01 in production on our i.MX6 boards. This release contains over 68000 new lines of code, so we won't go through all of the details, but wanted to highlight a few of the things that might interest you.

  • USB OTG is now supported. Troy implemented USB Gadget support, so we can now use this high-speed link (more later in this post).
  • Updated pin-muxing constants - This release contains some broad-strokes re-naming of the mux and pad names to match the main-line Linux kernel. This, and some additional structure paves the way for boards to support both i.MX6DQ and i.MX6DLS processor variants in the same binary. If you're building custom versions based on our designs (SOM customers?), you'll want to schedule some time for this. Most of the changes are mechanical, but can be time consuming.
  • USB Host support is noticeably improved.
  • We patched the splash screen code for use with GCC 4.7. Refer to the notes at the beginning of this post for more detail.

For the impatient

You can grab a package of binaries from the usual place:
The previous set of binaries (described in this post) is also still available.
If you extract the content to an SD card, you can upgrade on our standard 1GiB versions of Nitrogen6X or BD-SL-i.MX6 boards like so: U-Boot > bootfile=u-boot.nitrogen6q ; run upgradeu Refer to this post for more detail and this post for the list of available machine configurations.

Details

USB OTG support

Enabling USB OTG support is the first step toward enabling Fastboot, something that a number of customers have requested, but it also enables a number of existing features of U-Boot, notably USB Networking, USB Net console, and the Device Firmware Upgrade (DFU) protocol.

We enabled support for the first two (Networking and Netconsole) in our default configuration, and we added a new convenience command usbrecover that is directly useful and serves as a good example of how to use USB networking.

usbrecover command

If you look at the details, you'll see all of the details needed to perform file transfers over USB.

There are a number of environment variable assignments:
VariablePurpose
usbnet_devaddrA USB OTG port doesn't have a unique MAC address like a network adapter generally does, since the USB channel is inherently point-to-point. This variable defines a virtual MAC address for the device side of the link.
usbnet_hostaddrThis variable defines the MAC address for the host side of the link. Note that using a constant here allows a single configuration on the host side.
ethactWith the addition of USB networking, we now have multiple network adapters available, the i.MX6 Fast Ethernet Controller (FEC) and the USB Network Adapter (usbnet). The ethact variable tells the networking commands in U-Boot which to use.
ipaddrThis variable defines a static IP address for the device.
netmaskThis variable defines a static subnet mask for the device.
serveripThis variable is used implicitly in some networking commands, and while we don't use it, this bit of the network stack inexplicably requires it.
ncipThis variable defines the network console IP address (see doc/README.NetConsole).
These are followed by three commands to load a kernel, RAM disk and boot them: tftpboot 10800000 10.0.0.1:uImage-${board}-recovery && tftpboot 12800000 10.0.0.1:uramdisk-${board}-recovery.img && bootm 10800000 12800000 The kernel and RAM disk file names are somewhat meaningless, but we're using them internally with our USB mass storage images to allow easy access to SD cards, eMMC, and SATA drives.

In other words, a poor-person's Fastboot or DFU, and rationale for future work.

Branches

As usual, the latest production version is in the production branch of our Github repository. To meet the needs of Yocto, we also have a persistent branch named v2014.01-20140228.

The previous revision is still available on branches v2014.01-20140228 and production-before-20140419.