This is an old revision of the document!


FreeBSD on Freescale i.MX6 systems

The Freescale i.MX6 family of SoCs is available in single, dual, and quad core versions. These SoCs are showing up in a growing number of development boards and small low power computer systems. FreeBSD has basic support for many of these boards and systems, including the following:

Development of FreeBSD i.MX6 support is active and ongoing. For the latest information or help with anything, please send an email to freebsd-arm@freebsd.org.

FreeBSD 11 boots to multiuser mode on Solo, Dual, and Quad SoCs. The following device drivers are available:

  • Serial console
  • uarts [tested up to 1mbaud]
  • i2c
  • USB 2.0
  • SD Card (iMMC support not verified yet)
  • Gigibit ethernet (hw limits throughput to 40MB/s, driver currently achieves 26MB/s)
  • Basic CPU thermal management (frequency is scaled back if temperature limits are exceeded)
  • Hardware floating point

Lots of device drivers still need to be written, including:

  • Audio
  • Video / framebuffer
  • SATA [work is in progress]
  • PCIe
  • SPI
  • CCM (clocks, work is in progress)
  • PMU (power managment)

The Crochet script supports Wandboard and is probably the easiest way to get started with FreeBSD on i.MX6.

The i.MX6 chip has a small on-chip rom and a small amount of on-chip sram. The rom code is able to boot from several different device types, based on how pullup and pulldown resistors are connected to some gpio pins. Most systems are set to boot from SD card. The on-chip rom tries to load a boot program from offset 1024 (the start of sector 3) on the SD card. If it can read from the card it loads the boot program into the internal sram, verifies that it's a valid boot program, and begins executing it.

Most i.MX6 systems use U-Boot as the boot program. Recent versions of U-Boot are split into a small first-stage loader called SPL and a main boot program. The SPL program for i.MX6 determines what type of chip it is (solo, dual, or quad) and how much ram it has, and sets up the main ram timing registers. It then loads the main U-Boot program from a fixed sector number on the SD card into ram and begins executing it. The fixed location on the SD card for the main U-Boot program can vary, but is usually in the neighborhood of 40-60K into the card. Following the main U-Boot program is the area of the card where U-Boot stores the saved environment data. In general, the first megabyte of the SD card is reserved for boot stuff.

  • arm/imx6.1421034339.txt.gz
  • Last modified: 2015/01/12 03:45
  • by IanLepore