This instructor-led Embedded Linux Development 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