This instructor-led course will give you the step-by-step framework for developing an embedded Linux product. Starting with the cross-compiler, you’ll learn about setting up a development system, boot loaders, the kernel, drivers, device tree, and all the various software and decisions that need to be made when building a user space root filesystem, such as those in use in consumer electronics, military, medical, industrial, and auto industries. Hands-on labs with a RISC-V based emulated development target allow students to practice both coding and building the various parts of the system covered in class.
Embedded Linux Development (LFD450)




- Who You Are
- The Linux Foundation
- Copyright and No Confidential Information
- Linux Foundation Training
- Certification Programs and Digital Badging
- Linux Distributions
- Platforms
- Preparing Your System
- Things change in Linux
- Documentation and Links

- Virtual Machine Installation
- Procedures
- Labs

- Know Where the Code is Coming From: DCO and CLA
- Stay Close to Mainline for Security and Quality
- Study and Understand the Project DNA
- Figure Out What Itch You Want to Scratch
- Identify Maintainers and Their Work Flows and Methods
- Get Early Input and Work in the Open
- Contribute Incremental Bits, Not Large Code Dumps
- Leave Your Ego at the Door: Don’t Be Thin-Skinned
- Be Patient, Develop Long Term Relationships, Be Helpful

- Protection Motivations
- Off the Shelf (OTS)
- Embedded Caveats
- Real Time Operating Systems
- Real Time Linux
- Custom Hardware Assistance
- Resources

- Why is it Hard?
- Project Goal Considerations
- Links to Additional Discussions
- Labs

- Kbuild Makefiles
- Kconfig Basics
- Searching Kconfig

- Built-in Linux Distribution Cross Compiler
- Linaro
- CodeSourcery
- crosstool-ng
- Buildroot
- OpenEmbedded
- Yocto Project
- Clang
- Labs

- Why use QEMU?
- Emulated Architectures
- Image Formats
- Labs

- Getting SW onto a uSD card
- Booting from flash
- Why is using uSD cards a bad idea?
- Labs

- An easier way to develop
- The Boot Sequence using TFTP and NFSroot
- Objectives of the Lab
- Labs

- Some GPL BIOSes
- Some GPL Boot Loaders
- Das U-Boot
- U-Boot Command Line
- U-Boot Environment
- Labs

- Labs

- Device Nodes
- Character Drivers
- An Example
- Labs

- What Device Trees Do and What They Do Not Do
- Device Tree Syntax
- Device Tree Walk Through
- Device Tree Bindings
- Device Tree support in Boot Loaders
- Using Device Tree Data in Drivers
- Coexistence and Conversion of Old Drivers
- Labs

- Directories: a Survey
- Embedded Filesystem Types

- Labs

- udev vs. BusyBox mdev
- Systemd
- C Library Choices
- Labs

- Labs

- Configuring BuildRoot for musl
- Labs

- Integrated with Buildroot
- Labs

- Ftrace, Trace-Cmd, Kernelshark
- Perf
- Using perf
- sysctl
- SysRq Key
- oops Messages
- Kernel Debuggers
- debugfs

- Taking Inventory of Kernel Sizes

- NAND vs. NOR vs. eMMC
- Driver and User Modules
- Flash Filesystems

- Deploying in an MTD Partition
- Labs

- Update strategies
- Prebuilt upgrade systems
- Labs

- PREEMPT RT Project
- Real-Time Checklist


- Monolithic and Micro Kernels
- Main Kernel Tasks
- User-Space and Kernel-Space

- Kernel Browsers
- Kernel Configuration Files
- Why is it Hard? Part 2

- kernel-doc
- Using Generic Kernel Routines and Methods
- Error Numbers, Printing Kernel Output, syslogd
- Task Structure
- Memory Allocation
- Transferring Data between User and Kernel Space

- A Trivial Example
- Compiling Modules
- Modules vs Built-in
- Module Utilities
- Automatic Module Loading
- Module Usage Count
- Module Licensing
- Exporting Symbols
- Resolving Symbols **
- Labs

- Labs

- Labs

- The Boot Sequence using TFTP and NFSroot
- Objectives of the Lab
- Labs