Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Embedded Linux on i.MX6ULL
Embedded Linux on i.MX6ULL

Front matter

  • Embedded Linux on i.MX6ULL — From First Boot to First Driver
  • PART I — FOUNDATIONS
  • PART II — BARE-METAL i.MX6ULL
  • PART III — U-BOOT, DEEPLY
  • PART IV — THE KERNEL
  • PART V — ROOT FILESYSTEM & USER SPACE
  • PART VI — DRIVER DEVELOPMENT
  • PART VII — DEVICE COOKBOOK
  • PART VIII — DEBUG, PRODUCTION, ADVANCED
  • PART IX — APPLIED VIRTUALIZATION AND MIXED-CRITICALITY SYSTEMS
  • Status

Part I — Foundations

  • Chapter 1: Preface and how to use this book
  • Chapter 2: What “Embedded Linux” actually is
  • Chapter 3: Host environment setup
  • Chapter 4: ARMv7-A and the Cortex-A7, for the MCU engineer
  • Chapter 5: A tour of the i.MX6ULL SoC
  • Chapter 6: The toolchain
  • Chapter 7: The Boot ROM, IVT, DCD, and BootData
  • Chapter 8: Hardware bring-up checklist

Part II — Bare-metal i.MX6ULL

  • Chapter 9: First LED, pure assembly
  • Chapter 10: C + startup.S + linker script
  • Chapter 11: Hand-building a Boot ROM-acceptable image
  • Chapter 12: UART driver and printf
  • Chapter 13: CCM clock tree bring-up
  • Chapter 14: DDR3 initialization with MMDC
  • Chapter 15: Exceptions and the GIC
  • Chapter 16: Timers, EPIT and GPT
  • Chapter 17: MMU and caches
  • Chapter 18: Optional bare-metal peripherals
  • Chapter 18A: Project organization
  • Chapter 18B: Button input and beep
  • Chapter 18C: Bare-metal RTC

Part III — U-Boot, deeply

  • Chapter 19: U-Boot from source, first boot
  • Chapter 20: U-Boot SPL: the missing link
  • Chapter 21: U-Boot internals
  • Chapter 22: Porting U-Boot to a custom board
  • Chapter 22A: Building i.MX6ULL U-Boot from nothing
  • Chapter 23: bootcmd, bootargs, FIT images
  • Chapter 23A: Multi-variant FIT images and DT overlays
  • Chapter 24: Workflows, TFTP, NFS, USB-OTG

Part IV — The Kernel

  • Chapter 25: Building mainline Linux for i.MX6ULL
  • Chapter 26: Booting the kernel from U-Boot
  • Chapter 27: Device Tree: the contract between firmware and kernel
  • Chapter 27A: DT bindings YAML and dt_binding_check
  • Chapter 28: Kernel startup, traced
  • Chapter 29: Initramfs from scratch
  • Chapter 30: Kernel configuration deep-dive
  • Chapter 30A: Kernel lifecycle: mainline, stable, LTS, vendor BSPs

Part V — Root filesystem & user space

  • Chapter 31: A root filesystem, by hand
  • Chapter 32: /proc, /sys, devtmpfs
  • Chapter 33: Init systems
  • Chapter 34: libc, dynamic linking, and the loader
  • Chapter 35: Buildroot, after you can do it by hand
  • Chapter 35A: Ubuntu-base rootfs as a peer to BusyBox/Buildroot
  • Chapter 35B: Read-only rootfs + overlayfs
  • Chapter 35C: Container runtimes on embedded
  • Appendix — Userspace tooling reference

Part VI — Driver development (foundations)

  • Chapter 36: Your first kernel module
  • Chapter 37: A character driver, by hand
  • Chapter 38: Auto-creating /dev/ nodes
  • Chapter 39: Platform drivers + device tree
  • Chapter 40: The misc framework
  • Chapter 41: Concurrency in the kernel
  • Chapter 42: Sleeping, waiting, polling
  • Chapter 43: Interrupts

Part VI — Driver development (common subsystems)

  • Chapter 44: GPIO subsystem + pinctrl
  • Chapter 45: Input subsystem
  • Chapter 46: I²C drivers
  • Chapter 47: SPI drivers
  • Chapter 48: PWM and RTC subsystems
  • Chapter 49: IIO subsystem (ADCs, sensors)
  • Chapter 50: regmap

Part VI — Driver development (advanced + insertions)

  • Chapter 51: DMA
  • Chapter 51A: Watchdog
  • Chapter 51B: Power management
  • Chapter 52: Network driver: FEC + KSZ8081
  • Chapter 52A: PREEMPT_RT
  • Chapter 53: Sound: ALSA and ASoC
  • Chapter 54: LCD framebuffer and DRM/KMS
  • Chapter 54A: MTD / UBI for raw NAND
  • Chapter 54B: V4L2 + GStreamer
  • Chapter 55: USB gadget
  • Chapter 55A: Kernel timers and hrtimers
  • Chapter 55B: Async notification (SIGIO)
  • Chapter 55C: CAN bus (SocketCAN + FlexCAN)
  • Chapter 55D: Block device drivers
  • Chapter 55E: WiFi + wpa_supplicant
  • Chapter 55F: Cellular modems
  • Chapter 55G: Multi-touch (GT911)
  • Chapter 55H: RGB-to-HDMI bridge (sii902x)
  • Chapter 55I: Rust for Linux

Part VII — Device cookbook (Storage)

  • Chapter 64: QSPI NOR flash
  • Chapter 65: I²C / SPI EEPROM
  • Chapter 66: SD card and eMMC deep dive

Part VII — Device cookbook (Environmental sensors)

  • Chapter 67: Temperature / humidity / pressure
  • Chapter 68: Light & color sensors
  • Chapter 69: Air quality, gas, particulate matter

Part VII — Device cookbook (Motion sensors)

  • Chapter 70: I²C IMUs
  • Chapter 71: SPI IMUs

Part VII — Device cookbook (Position & distance)

  • Chapter 72: Distance & proximity sensors
  • Chapter 73: Magnetometer / compass
  • Chapter 74: Hall-effect & rotary position sensors

Part VII — Device cookbook (Power & current)

  • Chapter 75: Current & power monitoring
  • Chapter 76: Battery fuel gauge + charger

Part VII — Device cookbook (Specialty sensors)

  • Chapter 77: 1-Wire sensors
  • Chapter 78: MEMS microphones
  • Chapter 79: Health sensors

Part VII — Device cookbook (ADC / DAC / clocks)

  • Chapter 80: External ADCs
  • Chapter 81: External DACs + clock generators

Part VII — Device cookbook (Displays)

  • Chapter 82: RGB parallel LCD on LCDIF
  • Chapter 83: SPI LCD
  • Chapter 84: QSPI LCD
  • Chapter 85: OLED & e-paper
  • Chapter 86: Touch input ICs

Part VII — Device cookbook (Cameras)

  • Chapter 87: Parallel CSI cameras
  • Chapter 88: USB UVC cameras

Part VII — Device cookbook (Audio)

  • Chapter 89: I²S audio codecs
  • Chapter 90: Digital class-D amplifiers

Part VII — Device cookbook (WiFi)

  • Chapter 91: SDIO WiFi
  • Chapter 92: USB WiFi
  • Chapter 93: Hosted WiFi via ESP32 / ESP8266
  • Chapter 94: WiFi+BT combo modules

Part VII — Device cookbook (Bluetooth)

  • Chapter 95: HCI Bluetooth over UART/USB
  • Chapter 96: AT-command BLE modules
  • Chapter 97: BLE Mesh

Part VII — Device cookbook (Long-range & specialty wireless)

  • Chapter 98: LoRa
  • Chapter 99: Sub-GHz proprietary
  • Chapter 100: ZigBee / Thread / 802.15.4
  • Chapter 101: UWB ranging

Part VII — Device cookbook (Cellular)

  • Chapter 102: USB 4G LTE modems
  • Chapter 103: UART AT-command modems
  • Chapter 104: NB-IoT / Cat-M1

Part VII — Device cookbook (Identification)

  • Chapter 105: RFID / NFC
  • Chapter 106: Fingerprint sensors

Part VII — Device cookbook (Positioning)

  • Chapter 107: GPS / GNSS + PPS

Part VII — Device cookbook (Industrial buses)

  • Chapter 108: RS-485 + Modbus RTU
  • Chapter 109: LIN bus
  • Chapter 110: CAN deep dive

Part VII — Device cookbook (Motors & encoders)

  • Chapter 111: Quadrature encoders & rotary
  • Chapter 112: Stepper & DC motor drivers

Part VII — Device cookbook (Indicators & actuators)

  • Chapter 113: WS2812 / SK6812 / APA102 addressable LEDs
  • Chapter 114: Beepers, relays, SSRs

Part VII — Device cookbook (Network & system power)

  • Chapter 115: Dual FEC + hosted Ethernet
  • Chapter 116: PMICs and regulator framework
  • Chapter 117: External RTC

Part VIII — Debug, production, advanced

  • Chapter 118: JTAG, OpenOCD, GDB at every layer
  • Chapter 119: Kernel debugging without JTAG
  • Chapter 120: User-space debugging
  • Chapter 120A: Mainline patch submission workflow
  • Chapter 121: Capstone: custom board port
  • Chapter 121A: CI/CD for embedded Linux
  • Chapter 122: Build your own cross-toolchain
  • Chapter 122A: BSP → mainline migration playbook
  • Chapter 123: Yocto vs Buildroot, an honest comparison
  • Chapter 123A: Yocto layer development in depth
  • Chapter 124: Secure boot (HAB) and OP-TEE
  • Chapter 125: Field updates
  • Chapter 125A: VSCode + gdbserver remote-debug workflow
  • Chapter 126: Closing: what to read next

Part IX — Applied virtualization

  • Chapter 127: Why embedded products use hypervisors
  • Chapter 128: QEMU as a virtual hardware lab
  • Chapter 129: Build and boot tiny Linux in QEMU
  • Chapter 130: U-Boot in QEMU
  • Chapter 131: HYP mode, stage-2 MMU, and virtual interrupts
  • Chapter 132: Xen in QEMU
  • Chapter 133: First DomU Linux
  • Chapter 134: Xen on i.MX6ULL
  • Chapter 135: DomU Linux on i.MX6ULL
  • Chapter 136: Devices, memory, and DMA boundaries
  • Chapter 137: Jailhouse in QEMU ARM64
  • Chapter 138: Bare-metal or Zephyr inmate cell
  • Chapter 139: STM32MP1 Linux plus RTOS, the production pattern
Back to top
Copyright © 2026, DangViTin
Made with Furo