Embedded Linux


Summary

The course aims at teaching the fundamentals of using Linux on an Embedded System. The course introduces the developer to different components of an embedded Linux system, provides information on using cross-compilers, building the kernel, building the root filesystem, building U-boot.

Since familiarity with the command line and networking is essential to working on an Embedded Linux system, the course has a couple of sessions to refresh these areas.

Pre-requisite

  • C Programming

  • Using GNU/Linux

  • Embedded Systems

Duration

  • Duration: 68 hours

  • Span: 8 weeks

Syllabus

Desktop Linux Review

Command Line Basics

  • History of GNU/Linux

  • Logging On To The System

  • Changing Your Password

  • Using UNIX Commands

  • File and Directory Commands

  • Getting Help

  • Logging Off The System

The Filesystem

  • Hierarchical File Structure

  • File Types

  • File Names

  • Pathnames

  • Access Permissions

  • Mounting

Shell Basics

  • What is the Shell?

  • Processes

  • Job Control

  • Redirection

  • Variables

  • Quoting

  • Pipes and Filters

  • Scripting Introduction

System Boot Sequence

  • Overview

  • Role of Bootloader

  • Specifying Boot Arguments

  • Role of Ramfs

  • Role of Init

  • Runlevels

  • Getty and Login

  • Bash Login Script

Networking

  • Accessing a System Remotely

  • Transfering Files Between Systems

  • Network Interfaces

  • Configuring Network Interfaces

  • DHCP - dhclient

Embedded Linux

System Components

  • Boot Loader

  • Console

  • Storage Media

  • Filesystems

  • Root Filesystem + Shell + Utilities

  • Compiler

  • C Library

  • Debuggers

Getting Started

  • Accessing the target

    • Console on Serial Port

    • Minicom Usage

Devices Intro.

  • Memory Interfacing

  • Device Interfacing

  • Memory Mapped IO

  • IO using Controllers

File I/O

  • File Descriptors

  • Opening and Closing Files

  • Reading and Writing to Files Sequentially

  • Reposition Read/Write File Offset

  • File Tables and File Descriptor Tables

Driver Intro.

  • Unix/Linux Device Abstraction

  • Device Files

  • Types of Drivers

  • Keypad and LCD example

Kernel Modules

  • Kernel Modules Introduction

  • Advantages of Kernel Modules

  • Listing, Loading, Unloading

Filesystems

  • Filesystems Internals - inodes, dentry

  • Filesystems - ext2, fat

  • Network Filesystems

  • Ramdisks

  • USB Pen Drive

  • Pseudo filesystems - proc, sysfs

Using U-Boot

  • Processor

  • Interfaces

  • Memory Map

  • U-Boot commands

Ramdisks and NFS

  • Downloading program to target

  • TFTP commands

  • Using Ramdisks

  • Building Ramdisks

  • Using NFS as Root FS

Memory Technology Devices

  • NAND Flash and NOR Flash

  • MTD vs Block devices

  • Partitioning

  • Flash FileSystems - JFFS2

  • UBI

Building Embedded Linux

Build Tools

  • Make

    • Make Rules

    • Macros

    • Suffix Rules

  • Cross compiling hello world program

    • About cross compilers

    • GNU Tool Chain

    • Using cross compilers

Building Userspace

  • Busybox Introduction

  • Configuring Busybox

  • Rebuilding the root file system

  • Building third party applications

    • configure

    • build, host, target

    • cross compilation

  • Contents of root filesystem

  • Building root filesystem

  • Space optimization

Building the Kernel

  • Kernel configuration

  • Building the kernel

  • Booting from the new kernel

  • Kernel Configuration Recipies

Building the Boot Loader

  • U-Boot Introduction

  • Role of a Boot Loader

  • Commands

  • Building U-Boot