Embedded Linux presents the experienced software engineer challenges. 1) Many developers working with RTOS's find difficulty to switch to Linux based systems. 2) Cross-development relative complexities understanding.
Intended Students
This course is intended for programmers who have working knowledge of programming in C. Understanding of compiling and linking a C program.
Course Purpose It's primer for those interested in making their career in embedded systems based on linux. The course has been designed around the reference “Embedded Linux primer-A practical real world approach”.
Practicals:Using BeagleBoardxM
Fee: Rs 12500/-
1) Introduction to the GNU/Linux Operating Systems 1.1 Why Linux? 1.2 Embedded Linux Today 1.3 Open Source and the GPL 1.3.1 Free Versus Freedom 1.4 Standards and Relevant Bodies 1.4.1 Linux Standard Base 1.4.2 Linux Foundation 1.4.3 Carrier-Grade Linux 1.4.4 Mobile Linux Initiative: Moblin 1.4.5 Service Availability Forum
2) The Big Picture 2.1 Embedded or Not? 2.1.1 BIOS Versus Bootloader
2.2 Anatomy of an Embedded System 2.2.1 Typical Embedded Linux Setup 2.2.2 Starting the Target Board 2.2.3 Booting the Kernel 2.2.4 Kernel Initialization: Overview 2.2.5 First User Space Process: init
2.3 Storage Considerations 2.3.1 Flash Memory 2.3.2 NAND Flash 2.3.3 Flash Usage 2.3.4 Flash File Systems 2.3.5 Memory Space 2.3.6 Execution Contexts 2.3.7 Process Virtual Memory 2.3.8 Cross-Development Environment
2.4 Embedded Linux Distributions 2.4.1 Commercial Linux Distributions 2.4.2 Do-It-Yourself Linux Distributions
3) Processor Basics 3.1 Stand-Alone Processors 3.1.1 IBM 970FX 3.1.2 Intel Pentium M 3.1.3 Intel Atom tm 3.1.4 Freescale MPC7448 3.1.5 Companion Chipsets
3.2 Integrated Processors: Systems on Chip 3.2.1 Power Architecture 3.2.2 Freescale Power Architecture 3.2.3 Freescale PowerQUICC I 3.2.4 Freescale PowerQUICC II 3.2.5 PowerQUICC II Pro 3.2.6 Freescale PowerQUICC III 3.2.7 Freescale QorIQTM 3.2.8 AMCC Power Architecture 3.2.9 MIPS 3.2.10 Broadcom MIPS 3.2.11 Other MIPS 3.2.12 ARM 3.2.13 TI ARM 3.2.14 Freescale ARM 3.2.15 Other ARM Processors
4.5 Kernel Documentation 4.6 Obtaining a Custom Linux Kernel 4.6.1 What Else Do I Need?
5) Kernel Initialization
5.1 Composite Kernel Image: Piggy and Friends 5.1.1 The Image Object 5.1.2 Architecture Objects 5.1.3 Bootstrap Loader 5.1.4 Boot Messages
5.2 Initialization Flow of Control 5.2.1 Kernel Entry Point: head.o 5.2.2 Kernel Startup: main.c 5.2.3 Architecture Setup
5.3 Kernel Command-Line Processing 5.3.1 The __setup Macro
5.4 Subsystem Initialization 5.4.1 The *__initcall Macros
5.5 The init Thread 5.5.1 Initialization Via initcalls 5.5.2 initcall_debug 5.5.3 Final Boot Steps
6) User Space Initialization
6.1 Root File System 6.1.1 FHS: File System Hierarchy Standard 6.1.2 File System Layout 6.1.3 Minimal File System 6.1.4 The Embedded Root FS Challenge 6.1.5 Trial-and-Error Method 6.1.6 Automated File System Build Tools
6.2 Kernel’s Last Boot Steps 6.2.1 First User Space Program 6.2.2 Resolving Dependencies 6.2.3 Customized Initial Process
6.3 The init Process 6.3.1 inittab 6.3.2 Sample Web Server Startup Script
6.4 Initial RAM Disk 6.4.1 Booting with initrd 6.4.2 Bootloader Support for initrd 6.4.3 initrd Magic: linuxrc 6.4.4 The initrd Plumbing 6.4.5 Building an initrd Image
6.5 Using initramfs 6.5.1 Customizing initramfs
6.6 Shutdown
7) Bootloaders
7.1 Role of a Bootloader 7.2 Bootloader Challenges 7.2.1 DRAM Controller 7.2.2 Flash Versus RAM 7.2.3 Image Complexity 7.2.4 Execution Context
7.3 A Universal Bootloader: Das U-Boot 7.3.1 Obtaining U-Boot 7.3.2 Configuring U-Boot 7.3.3 U-Boot Monitor Commands 7.3.4 Network Operations 7.3.5 Storage Subsystems 7.3.6 Booting from Disk
7.4 Porting U-Boot 7.4.1 EP405 U-Boot Port 7.4.2 U-Boot Makefile Configuration Target 7.4.3 EP405 First Build 7.4.4 EP405 Processor Initialization 7.4.5 Board-Specific Initialization 7.4.6 Porting Summary 7.4.7 U-Boot Image Format
7.5 Device Tree Blob (Flat Device Tree) 7.5.1 Device Tree Source 7.5.2 Device Tree Compiler 7.5.3 Alternative Kernel Images Using DTB
7.6 Other Bootloaders 7.6.1 Lilo 7.6.2 GRUB 7.6.3 Still More Bootloaders
8.3 Driver Methods 8.3.1 Driver File System Operations 8.3.2 Allocation of Device Numbers 8.3.3 Device Nodes and mknod
8.4 Bringing It All Together
8.5 Building Out-of-Tree Drivers 8.6 Device Drivers and the GPL
9) File Systems 9.1 Linux File System Concepts 9.1.1 Partitions 9.2 ext2 9.2.1 Mounting a File System 9.2.2 Checking File System Integrity 9.3 ext3 9.4 ext4 9.5 ReiserFS 9.6 JFFS2 9.6.1 Building a JFFS2 Image 9.7 cramfs 9.8 Network File System 9.8.1 Root File System on NFS
9.9 Pseudo File Systems 9.9.1 /proc File System 9.9.2 sysfs
9.10 Other File Systems 9.11 Building a Simple File System
10) MTD Subsystem
10.1MTD Overview 10.1.1 Enabling MTD Services 10.1.2 MTD Basics 10.1.3 Configuring MTD on Your Target
14.2 Using KGDB for Kernel Debugging 14.2.1 KGDB Kernel Configuration 14.2.2 Target Boot with KGDB Support 14.2.3 Useful Kernel Breakpoints 14.2.4 Sharing a Console Serial Port with KGDB 14.2.5 Debugging Very Early Kernel Code 14.2.6 KGDB Support in the Mainline Kernel
17.1 What Is Real Time? 17.1.1 Soft Real Time 17.1.2 Hard Real Time 17.1.3 Linux Scheduling 17.1.4 Latency
17.2 Kernel Preemption 17.2.1 Impediments to Preemption 17.2.2 Preemption Models 17.2.3 SMP Kernel 17.2.4 Sources of Preemption Latency
17.3 Real-Time Kernel Patch 17.3.1 Real-Time Features 17.3.2 O(1) Scheduler 17.3.3 Creating a Real-Time Process
17.4 Real-Time Kernel Performance Analysis 17.4.1 Using Ftrace for Tracing 17.4.2 Preemption Off Latency Measurement 17.4.3 Wakeup Latency Measurement 17.4.4 Interrupt Off Timing 17.4.5 Soft Lockup Detection
18) Universal Serial Bus
18.1 USB Overview 18.1.1 USB Physical Topology 18.1.2 USB Logical Topology 18.1.3 USB Revisions 18.1.4 USB Connectors 18.1.5 USB Cable Assemblies 18.1.6 USB Modes
18.2 Configuring USB 18.2.1 USB Initialization
18.3 sysfs and USB Device Naming
18.4 Useful USB Tools 18.4.1 USB File System 18.4.2 Using usbview 18.4.3 USB Utils (lsusb)
18.5 Common USB Subsystems 18.5.1 USB Mass Storage Class 18.5.2 USB HID Class 18.5.3 USB CDC Class Drivers 18.5.4 USB Network Support
18.6 USB Debug 18.6.1 usbmon 18.6.2 Useful USB Miscellanea
19) udev 19.1 What Is udev? 19.2 Device Discovery 19.3 Default udev Behavior 19.4 Understanding udev Rules 19.4.1 Modalias 19.4.2 Typical udev Rules Configuration 19.4.3 Initial System Setup for udev 19.5 Loading Platform Device Drivers 19.6 Customizing udev Behavior 19.6.1 udev Customization Example: USB Automounting