Embedded Linux training

Embedded Linux training

602 Pages · 2010 · 12.38 MB · English

applications can build a catalog of the pictures on the SD card. Modern 3D GUI with nice transitions. Navigation .. OpenWRT, originally a fork of Buildroot for wireless routers, not a more generic project The last argument of the AUTOTARGETS macro, the prefix of all variables must be identical to

Embedded Linux training free download


Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomFree Electrons Embedded Linux training Gregory Clement Thomas Petazzoni Michael Opdenacker Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomRights to copy Attribution – ShareAlike 30 You are free to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions Attribution  You must give the original author credit Share Alike  If you alter, transform, or build upon this work, you  may distribute the resulting work only under a license identical to  this one For any reuse or distribution, you must make clear to others the license  terms of this work Any of these conditions can be waived if you get permission from the  copyright holder Your fair use and other rights are in no way affected by the above License text:  http://creativecommonsorg/licenses/by­sa/30/legalcode ©  Copyright 2004­2010, Free Electrons [email protected]­electronscom Electronic version of this document available on http://free­electronscom/doc/training/beagle Updates will be available on   http://free­electronscom/doc/training/beagle Corrections, suggestions, contributions and translations are welcome! Latest update:  Dec 7, 2010 Custom Development System integration Embedded Linux demos and prototypes System optimization Application and interface developmentFree Electrons Our services Embedded Linux Training All materials released with a free license! Unix and GNU/Linux basics Linux kernel and drivers development Real­time Linux, uClinux Development and profiling tools Lightweight tools for embedded systems Root filesystem creation Audio and multimedia System optimization Consulting and technical support Help in decision making System architecture System design and performance review Development tool and application support Investigating issues and fixing tool bugsLinux kernel Linux device drivers Board support code Mainstreaming kernel code Kernel debugging 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomHardware used in this training session TI OMAP 3530 ARM CPU 256 MB RAM, 256 MB flash RS­232 serial USB Host USB OTG JTAG DVI­D, S­Video Audio In and Out MMC/SD Only 150 USDTI Beagle Board  Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomParticipate! During the lectures Don't hesitate to ask questions Other people in the audience  may have similar questions too This helps the trainer to detect any explanation that wasn't clear  or detailed enough Don't hesitate to share your experience, for example to compare  Linux with other operating systems used in your company Your point of view is most valuable, because it can be similar to  your colleagues' and different from the trainer's Your participation can make our session more interactive and  make the topics easier to learn Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomPractical lab guidelines During practical labs We cannot support more than 8 workstations at once (each with  its board and equipment) Having more would make the whole  class progress slower, compromising the coverage of the whole  training agenda (exception for public sessions: up to 10 people) So, if you are more than 8 participants, please form up to 8  working groups Open the electronic copy of your lecture materials, and use it  throughout the practical labs to find the slides you need again Don't copy and paste from the PDF slides The slides contain UTF­8 characters that look the same as ASCII  ones, but won't be understood by shells or compilers Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCommand memento sheet This memento sheet gives  command examples for the most  typical needs (looking for files,  extracting a tar archive) It saves us 1 day of UNIX / Linux  command line training Our best tip: in the command line  shell, always hit the  [Tab]  key to  complete command names and file  paths This avoids 95% of typing  mistakes Get an electronic copy on http://free­electronscom/docs/command­line Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomvi basic commands The  vi  editor is very useful  to make quick changes to  files in a embedded target Though not very user  friendly at first,  vi  is very  powerful and its main 15  commands are easy to  learn and are sufficient for  99% of everyone's needs! Get an electronic copy on http://free­electronscom/docs/command­lineYou can also take the quick tutorial by running   vimtutor This is a worthy investment! Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCooperate! As in the Free Software and Open Source community, cooperation during practical labs is valuable in this training session: If you complete your labs before other people, don't hesitate to  help other people and investigate the issues they face The faster  we progress as a group, the more time we have to explore extra  topics Explain what you understood to other participants when needed It also helps to consolidate your knowledge Don't hesitate to report potential bugs to your instructor Don't hesitate to look for solutions on the Internet as well Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomPractical lab – Installing Linux Install Ubuntu Desktop 1004 on your PC Make space for Linux See how easy it is to install Ubuntu Apply the latest updates 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomFree Electrons Introduction to embedded  Linux Michael Opdenacker Thomas Petazzoni Free Electrons ©  Copyright 2009, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/embedded­linux­intro Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded system? An  embedded  system  is  a  special­purpose  computer  system  designed  to  perform  one  or  a  few  dedicated  functions,  often  with  real­time  computing  constraints  It  is  usually  embedded  as  part  of  a  complete  device  including  hardware  and  mechanical  parts  In  contrast,  a  general­ purpose  computer,  such  as  a  personal  computer,  can  do  many  different  tasks  depending  on  programming  Embedded  systems  control  many  of  the  common  devices  in use today Wikipedia,  http://enwikipediaorg/wiki/Embedded_system 3 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMany different systems A very generic definition Covers very different types of systems Fuzzy border with “standard” systems Consumer electronics (CE) products Home routers, DVD players, TV sets, digital cameras, GPS,  camcorders, mobile phones, microwave ovens Industrial products Machine control, alarms, surveillance systems, automotive,  rail, aircraft, satellite 4 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMany different products 5 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux The Free Software and Open Source world offers a broad  range of tools to develop embedded systems Advantages Reuse of existing components for the base system Allows to focus on the added value of the product High quality, proven components (Linux kernel, C libraries) Complete control on the choice of components Modifications possible without external constraints Community support: tutorials, mailing lists Low cost, in particular no per­unit royalties  Potentially less legal issues Easier access to software and tools 6 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomDevice examples GPS: TomTom and Garmin Home network routers: Linksys, Netgear PDA: Zaurus, Nokia N8x0 TVs, camcorders, DVD players: Sony, Philips Mobile phones: Motorola, Android, OpenMoko Industrial machinery And many other products you don't even imagine 7 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomIt works with Linux, but what is it for? Quiz 8 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomTo milk cows! Answer 9 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomGlobal architecture HardwareBootloaderLinux kernelStandard C libraryLibrary Library LibraryApplication Application Tools 10 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded hardware Hardware for embedded systems is often different from  hardware for classical systems Often a different CPU architecture: often ARM, MIPS or PowerPC x86 is also used Storage on flash storage, NOR or NAND type, often with  limited capacity (from a few MB to hundreds of MB) Limited RAM capacity (from a few MB to several tens of MB) Many interconnect bus not often found on the desktop: I2C,  SPI, SSP, CAN, etc Development boards starting from a few hundreds of EUR / USD Often used as a basis for the final board design 11 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomExamples Picotux 100 ARM7 55 MHz, Netsilicon  NS7520 2 MB of flash 8 MB of RAM Ethernet 5 GPIOs Serial OpenMoko ARM 920T 400 MHz,  Samsung 2442B 2 MB of NOR flash 128 MB of RAM 256 MB of NAND flash 640x480 touchscreen ,  Bluetooth, GSM, serial,  GPS, sound, 2 buttons,  Wifi, USB, etc 12 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMinimum requirements A CPU supported by gcc and the Linux kernel 32 bit CPU MMU­less CPUs are also supported, through the uClinux project A few MB of RAM, from 4 MB 8 MB are needed to do really do something A few MB of storage, from 2 MB 4 MB to really do something Linux isn't designed for small microcontrollers that just have a  few tens or hundreds of KB of flash and RAM Base metal, no OS Reduced systems, such as FreeRTOS 13 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomSoftware components Cross­compilation toolchain Compiler that runs on the development machine, but generates  code for the target Bootloader Started by the hardware, responsible for basic initialization, loading  and executing the kernel Linux Kernel Contains the process and memory management, network stack,  device drivers and provides services to userspace applications C library The interface between the kernel and the userspace applications Libraries and applications Third­party or in­house 14 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux work Several distinct tasks are needed when deploying embedded Linux in a product Board Support Package development A BSP contains a bootloader and kernel with the suitable device  drivers for the targeted hardware Purpose of our « Kernel Development » training System integration Integrate all the components, bootloader, kernel, third­party libraries  and applications and in­house applications into a working system Purpose of this training Development of applications Normal Linux applications, but using specifically chosen libraries 15 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomRoot filesystem In a Linux system, several  filesystems are mounted and create a  global hierarchy of files and  directories A particular filesystem, the root  filesystem, is mounted as / On embedded systems, this root  filesystem contains all the libraries,  applications and data of the system Therefore, building the root  filesystem is one of the main tasks of  integrating embedded Linux  components into a device The kernel is usually kept separate Bootloader Kernel Root filesystemFlash contents 16 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomDevelopment environment Two ways to switch to embedded Linux Use solutions provided and supported by vendors like MontaVista,  Wind River or TimeSys These solutions come with their own  development tools and environment Use community solutions In Free Electrons trainings, we do not promote a particular  vendor, and therefore use community solutions However, knowing the concepts, switching to vendor solutions will  be easy Doing embedded Linux development  requires  Linux on the  desktop The community solutions usually only exist on Linux Understanding Linux on the desktop allows you to better  understand Linux on the device 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux Training System  administration  basics Michael Opdenacker Thomas Petazzoni Free Electrons ©  Copyright 2009, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/command­line Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomSystem administration basics Networking 3 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomNetwork setup (1) ifconfig ­a Prints details about all the network interfaces  available on your system ifconfig eth0 Lists details about the  eth0  interface ifconfig eth0 1921680100 Assigns the  1921680100  IP address to  eth0  (1 IP address per interface) ifconfig eth0 down Shuts down the  eth0  interface (frees its IP address) 4 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomNetwork setup (2) route add default gw 19216801 Sets the default route for packets outside the local  network The gateway (here  19216801 ) is  responsible for sending them to the next gateway, etc,  until the final destination route ­n Lists the existing routes route del default or  route del  Deletes the given route Useful to redefine a new route ­n  option: immediately displays ip addresses instead of trying to find their domain names 5 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomNetwork setup (3) Your programs need to know what IP address corresponds to  a given host name (such as  kernelorg ) Domain Name Servers (DNS) take care of this You just have to specify the IP address of 1 or more DNS  servers in your  /etc/resolvconf  file: nameserver 21719192132 nameserver 2122732177 The changes take effect immediately! 6 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomNetwork testing First, try to ping the IP address of your gateway This will confirm that your network adapter works fine Then, make sure you can ping the name server IP address,  which will confirm that your gateway is configured properly Finally, make sure you can ping any host using its name, which  will confirm that the nameserver configuration is correct 7 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomSystem administration basics Filesystems and devices 8 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCreating filesystems Examples mkfsext2 /dev/sda1 Formats your USB key ( /dev/sda1 : 1 st  partition raw data) in  ext2   format mkfsext2 ­F diskimg Formats a disk image file in  ext2  format mkfsvfat ­v ­F 32 /dev/sda1  ( ­v : verbose) Formats your USB key back to  FAT32  format mkfsvfat ­v ­F 32 diskimg Formats a disk image file in  FAT32  format Blank disk images can be created as in the below example (64 MB file): dd if=/dev/zero of=diskimg bs=1M count=64 ­F : force Execute even if not a real device file 9 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMounting devices (1) To make filesystems on any device (internal or external storage) visible on your system, you have to  mount  them The first time, create a mount point in your system: mkdir /mnt/usbdisk  (example) Now, mount it: mount ­t vfat /dev/sda1 /mnt/usbdisk /dev/sda1 : physical device ­t : specifies the filesystem (format) type ( ext2 ,  ext3 ,  vfat ,  reiserfs ,  iso9660 ) raw data (file descriptors and file contents) mount file structure 10 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMounting devices (2) You can also mount a filesystem image stored in a regular file ( loop devices ) Useful to develop filesystems for another machine Useful to access the contents of an ISO cdrom image without having to burn it Useful to have a Linux filesystem inside a file in a Windows  partition  cp /dev/sda1 usbkeyimg mount ­o loop ­t vfat usbkeyimg /mnt/usbdisk  11 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomListing mounted filesystems Just use the  mount  command with no argument: /dev/hda6 on / type ext3 (rw,noatime) none on /proc type proc (rw,noatime) none on /sys type sysfs (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda4 on /data type ext3 (rw,noatime) none on /dev/shm type tmpfs (rw) /dev/hda1 on /win type vfat (rw,uid=501,gid=501) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 12 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomUnmounting devices umount /mnt/usbdisk Commits all pending writes and unmounts the given device,  which can then be removed in a safe way To be able to unmount a device, you have to close all the  open files in it: Close applications opening data in the mounted partition Make sure that none of your shells have a working directory in  this mount point You can run the  lsof   command  ( l i s t  o pen  f iles) to view which processes still have open files in the  mounted partition 13 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomSystem administration basics Package management 14 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBeware of the dark side of root root  user privileges are only needed for very specific  tasks with security risks: mounting, creating device  files, loading drivers, starting networking, changing file ownership, package upgrades Even if you have the  root  password, your regular  account should be sufficient for 999 % of your tasks (unless you are a system administrator) In a training session, it is acceptable to use  root In real life, you may not even have access to this  account, or put your systems and data at risk if you  do 15 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomUsing the root account In case you really want to use  root If you have the  root  password: su ­  ( s witch  u ser) In modern distributions, the  sudo  command gives you access to some  root  privileges with your own user password Example:  sudo mount /dev/hda4 /home 16 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomSoftware packages The distribution mechanism for software in GNU/Linux is different  from the one in Windows Linux distributions provides a central and coherent way of  installing, updating and removing applications and libraries :  packages Packages contains the application or library files, and associated  meta­information, such as the version and the dependencies deb on Debian and Ubuntu, rpm on Mandriva, Fedora, OpenSUSE Packages are stored in  repositories , usually on HTTP or FTP  servers One should only use packages from official repositories of its  distribution, unless strictly required 17 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomManaging software packages (1) Instructions for Debian based GNU/Linux systems (Debian, Ubuntu) Package repositories are specified in  /etc/apt/sourceslist To update package repository lists: sudo apt­get update To find the name of a package to install, the best is to use the  search engine on  http://packagesdebianorg  or on  http://packagesubuntucom  You may also use: apt­cache search  18 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomManaging software packages (2) To install a given package: sudo apt­get install  To remove a given package: sudo apt­get remove  To install all available package updates: sudo apt­get dist­upgrade Get information about a package: sudo apt­cache show  Graphical interfaces Synaptic for GNOME Adept for KDE Further details on package management: http://wwwdebianorg/doc/manuals/apt­howto/ 19 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomShutting down halt Immediately halts the system reboot Immediately reboots the system [Ctrl][Alt][Del] Also works on GNU/Linux to reboot Embedded systems: you must use an implementation of  init   and can specify any key combination in  /etc/inittab 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux system development Cross­compiling toolchains Thomas Petazzoni Michael Opdenacker Free Electrons ©  Copyright 2004­2010, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/toolchains Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomDefinition (1) The usual development tools available on a GNU/Linux workstation is a  native toolchain This toolchain runs on your workstation and generates code for your  workstation, usually x86 For embedded system development, it is usually impossible or not  interesting to use a native toolchain The target is too restricted in terms of storage and/or memory The target is very slow compared to your workstation You may not want to install all development tools on your target Therefore,  cross­compiling toolchains  are generally used They run  on your workstation but generate code for your target 3 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomDefinition (2) x86 ARMx86 Compilation machine Execution  machineSource code Native toolchain Cross­compiling toolchain x86 binary ARM binary 4 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomComponents Binutils Kernel headers C/C++ libraries GCC compiler GDB debugger (optional) 5 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBinutils Binutils  is a set of tools to generate and manipulate binaries for a  given CPU architecture as , the assembler, that generates binary code from assembler  source code ld , the linker ar ,  ranlib , to generate  a  archives, used for libraries objdump ,  readelf ,  size ,  nm ,  strings , to inspect binaries  Very useful analysis tools ! strip , to strip useless parts of binaries in order to reduce their size http://wwwgnuorg/software/binutils/ GPL license 6 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomKernel headers (1) The C library and compiled programs  needs to interact with the kernel Available system calls and their  numbers Constant definitions Data structures, etc Therefore, compiling the C library  requires kernel headers, and many  applications also require them Kernel Kernel headers C Library Applications Available in   and   and a few other  directories corresponding to the ones visible in  include/  in the  kernel sources 7 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomKernel headers (2) System call numbers, in  Constant definitions, here in  , included  from  , included from  Data structures, here in  #define __NR_exit                 1 #define __NR_fork                 2 #define __NR_read                 3 #define O_RDWR          00000002 struct stat {          unsigned long  st_dev;          unsigned long  st_ino;   [] }; 8 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomKernel headers (3) The kernel­to­userspace ABI is backward compatible Binaries generated with a toolchain using kernel headers older than  the running kernel will work without problem, but won't be able to  use the new system calls, data structures, etc Binaries generated with a toolchain using kernel headers newer  than the running kernel might work on if they don't use the recent  features, otherwise they will break Using the latest kernel headers is not necessary, unless access to  the new kernel features is needed The kernel headers are extracted from the kernel sources using  the  headers_install  kernel  Makefile  target 9 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomGCC compiler GNU C Compiler, the famous free software compiler Can compile C, C++, Ada, Fortran, Java, Objective­ C, Objective­C++, and generate code for a large  number of CPU architectures, including ARM, AVR,  Blackfin, CRIS, FRV, M32, MIPS, MN10300,  PowerPC, SH, v850, i386, x86_64, IA64, Xtensa, etc http://gccgnuorg/ Available under the GPL license, libraries under the LGPL 10 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomC library The C library is an essential component of a  Linux system Interface between the applications and the  kernel Provides the well­known standard C API to  ease application development Several C libraries are available: glibc ,  uClibc ,  eglibc ,  dietlibc ,  newlib , etc The choice of the C library must be made at  the time of the cross­compiling toolchain  generation, as the GCC compiler is compiled  against a specific C library Kernel C Library Applications 11 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomglibc http://wwwgnuorg/software/libc/ License: LGPL C library from the  GNU  project Designed for performance, standards compliance and  portability Found on all  GNU / Linux  host systems Of course, actively maintained Quite big for small embedded systems: approx 25 MB  on  arm   (version 29 ­  libc : 15 MB,  libm : 750 K B ) 12 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomuClibc http://wwwuclibcorg/  from  CodePoet Consulting License: LGPL Lightweight C library for small embedded systems High configurability: many features can be enabled or  disabled through a  menuconfig  interface Works only with Linux/uClinux, works on most embedded  architectures No stable ABI, different ABI depending on the library  configuration Focus on size rather than performance Small compile time 13 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomuClibc (2) Most of the applications compile with uClibc This applies to all  applications used in embedded systems Size ( arm ): 4 times smaller than  glibc ! uClibc 09301 : approx 600 KB ( libuClibc : 460 KB,  libm : 96KB) glibc 29 : approx 25 MB Used on a large number of production embedded products, including  consumer electronic devices Actively maintained, large developer and user base Now supported by  MontaVista ,  TimeSys  and  Wind River 14 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomuClibc (3) After compilation and installation, the following components are available Standard headers,  stdioh ,  stdlibh ,  unistdh  and others,  and Linux kernel headers, integrated with the C library headers The libraries themselves, with mainly libuClibc , the C library itself ld­uClibc , the dynamic loader, responsible for loading the  shared libraries at the beginning of a program's execution librt , the library implementing the real­time related functions libstdc++ , the C++ standard library libpthread , the threads library libm , the mathematic library 15 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomHoney, I shrunk the programs!C program Compiled with shared libraries Compiled statically glibc uClibc glibc uClibc Plain “hello world” (stripped) 56 K (glibc 29) 54 K (uClibc 09301) 472 K (glibc 29) 18 K (uClibc 09301) Busybox (stripped) 245 K (older glibc) 231 K (older uClibc) 843 K (older glibc) 311 K (older uClibc) Executable size comparison on ARM 16 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomeglibc « Embedded glibc », under the LGPL Variant of the GNU C Library (GLIBC)  designed to work well on  embedded systems Strives to be source and binary compatible with GLIBC eglibc's goals include reduced footprint, configurable components,  better support for cross­compilation and cross­testing Can be built without support for NIS, locales, IPv6, and many other  features Supported by a consortium, with Freescale, MIPS, MontaVista and  Wind River as members The Debian distribution is switching to eglibc too: http://blogaurel32net/?p=47 http://wwweglibcorg 17 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomOther smaller C libraries Several other smaller C libraries have been developed, but  none of them have the goal of allowing the compilation of  large existing applications They need specially written programs and applications Choices: Dietlibc ,  http://wwwfefede/dietlibc/  Approximately 70 KB Newlib ,  http://sourcewareorg/newlib/ Klibc ,  http://wwwkernelorg/pub/linux/libs/klibc/ , designed  for use in an initramfs or initrd at boot time 18 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBuilding a toolchain Three machines must be distinguished when discussing  toolchain creation The build machine, where the toolchain is built The host machine, where the toolchain will be executed The target machine, where the binaries created by the  toolchain will be executed Four build types are possible 19 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBuilding a toolchain (2) build host target Native build used to build the normal gcc of a  workstation build host target Cross build used to build a toolchain that runs on your  workstation but generates binaries for the  target build host target Cross­native build used to build a toolchain that runs on your  target and generates binaries for the  target build host target Canadian build used to build on architecture A a toolchain  that runs on architecture B and generates  binaries for architecture CThe most common solution in embedded 20 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBuilding a toolchain (3) Many decisions must be made when building a toolchain Choosing the C library Choosing the version of the different components Choosing the configuration of the toolchain Which ABI should be used ? Toolchains for the ARM  architecture for example, can generate binaries using the  OABI (Old ABI) or the EABI (Embedded ABI), that are  incompatible Should the toolchain support software floating point, or does  the hardware support floating point operations ? Should the toolchain support locales, IPv6, or other specific  features ? 21 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBuilding a toolchain (4) Crosstool build reports:  http://kegelcom/crosstool/crosstool­043/buildlogs 22 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBasic steps Extract and install kernel headers Extract, configure, compile and install binutils Extract, configure and compile a first version gcc that  generates binaries for the target It will be used to cross­ compile the C library Extract, configure and compile the C library using the  previously generated compiler Re­configure and compile the final gcc cross­compiler 23 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomHomebuilt toolchains Building a cross­compiling toolchain by yourself is a difficult  and painful task! Can take days or weeks! Lots of details to learn Several components to build Lots of decisions to make (such as C library version and configuration for your platform) Need kernel headers and C library sources Need to be familiar with current  gcc  issues and patches on your  platform Useful to be familiar with building and configuring tools http://wwwaleph1couk/armlinux/docs/toolchain/toolchHOWTOpdf can show you how fun it can be! 24 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomGet a precompiled toolchain Solution that most people choose, because it is the simplest  and most convenient solution First, determine what toolchain you need: CPU, endianism, C  library, component versions, ABI, soft float or hard float, etc Many pre­compiled toolchains are freely available: CodeSourcery,  http://wwwcodesourcerycom , is a  reference in that area, but they only provide glibc  toolchains Linaro will give you the most optimized toolchains on  ARM:  https://wikilinaroorg/WorkingGroups/ToolChain (Linaro hired CodeSourcery and added other features) See also  http://elinuxorg/Toolchains 25 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomInstalling and using a precompiled toolchain Follow the installation procedure proposed by the vendor Usually, it is simply a matter of extracting a tarball at the  proper place Toolchains used not to be relocatable! You must install them in the location they were built for This is no longer true with gcc 4x, thanks to sysroot  support, but it is still more convenient to install them at  the proper place Then, add the path to toolchain binaries in your  PATH : export PATH=/path/to/toolchain/bin/:$PATH 26 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomToolchain building utilities Another solution is to use utilities that automate the process of  building the toolchain Same advantage as the pre­compiled toolchains: you don't need  to mess up with all the details of the build process But also offers more flexibility in terms of toolchain configuration,  component version selection, etc They also usually contain several patches that fix known issues  with the different components on some architectures Identical principle: shell scripts or Makefile that automatically  fetch, extract, configure, compile and install the different  components 27 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCrosstool The precursor, written by Dan Kegel Set of scripts and patches, glibc­only Not really maintained anymore http://wwwkegelcom/crosstool Crosstool­ng Rewrite of  Crosstool , with a  menuconfig ­like configuration system Feature­full: supports  uClibc ,  glibc ,  eglibc , hard and soft float, many  architectures Actively maintained http://ymorinis­a­geekorg/dokuwiki/projects/crosstool Toolchain building utilities (2) 28 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomToolchain building utilities (3) Many root filesystem building systems also allow the construction of  cross­compiling toolchain Buildroot Makefile­based,  uClibc  only, maintained by the community http://buildrootuclibcorg PTXdist Makefile­based,  uClibc  or  glibc , maintained mainly by  Pengutronix http://wwwpengutronixde/software/ptxdist/index_enhtml OpenEmbedded The feature­full, but complex building system http://wwwopenembeddedorg/ 29 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomPractical lab – Using Crosstool­NG Time to build your toolchain Configure  Crosstool­NG Run it to build your own cross­ compiling toolchain 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux system development Bootloaders Thomas Petazzoni Michael Opdenacker Free Electrons ©  Copyright 2004­2010, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/bootloaders Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBootloaders The bootloader is a piece of code responsible for Basic hardware initialization Loading of an application binary, usually an operating system  kernel, from flash storage, from the network, or from another type of  non­volatile storage Possibly uncompression of the application binary Execution of the application Besides these basic functions, most bootloaders provide a shell  with various commands implementing different operations Loading of data from storage or network, memory inspection,  hardware diagnostics and testing, etc 3 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBootloaders on x86 (1) The x86 processors are typically bundled on a board with a non­ volatile memory containing a program, the BIOS This program gets executed by the CPU after reset, and is  responsible for basic hardware initialization and loading of a  small piece of code from a non­volatile storage This piece of code is usually the first 512 bytes of an hard disk This piece of code is usually a 1 st  stage bootloader, which will  load the full bootloader itself The bootloader can then offer all its features It typically  understands filesystem formats so that the kernel file can be  loaded directly from a normal filesystem 4 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBootloaders on x86 (2) GRUB, Grand Unified Bootloader, the most powerful one http://wwwgnuorg/software/grub/ Can read many filesystem formats to load the kernel image  and the configuration, provides a powerful shell with various  commands, can load kernel images over the network, etc See our dedicated presentation for details: http://free­electronscom/docs/grub/ LILO, the original Linux Loader http://freshmeatnet/projects/lilo/ Syslinux, for network and removable media booting http://syslinuxzytorcom 5 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBootloaders on embedded architectures (1) On embedded architectures, the low­level booting process is very CPU and  board dependent Some boards have a NOR flash from which the CPU starts executing  instructions after reset In that case, the bootloader must directly be flashed  inside the NOR at the proper location Some CPUs have an integrated bootcode in ROM that automatically loads a  small portion of a DataFlash or NAND flash, usually to a static RAM In that  case, a minimal first stage bootloader is required, that will load the main  bootloader (BootROM on AT91SAM CPUs, Steppingstone on S3C24xx  CPUs, etc) The bootloader on embedded architectures starts right after CPU reset, so it  must initialize all the devices, including the memory controller in order to access  the DRAM As the boot process is very CPU and board dependent, refer to the vendor documentation 6 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomBootloaders on embedded architectures (2) We will focus on the generic part, the main bootloader, offering  the most important features There are several open­source generic bootloaders Here are the most popular ones: U­Boot, the universal bootloader by Denx The most used on ARM, also used on PPC, MIPS, x86, m68k, NIOS, etc  The de­facto standard nowadays We will study it in detail http://wwwdenxde/wiki/U­Boot Barebox, a new architecture­neutral bootloader, written as a successor of  U­Boot Better design, better code, active development, but doesn't yet  have as much hardware support as U­Boot http://wwwbareboxorg There are also a lot of other open­source or proprietary  bootloaders, often architecture­specific RedBoot, Yaboot, PMON, etc 7 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux system development Accessing a serial console 8 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMinicom (1) Definition: serial communication program Available in all  GNU / Linux  distributions Capabilities (all through a serial link): Serial console to a remote Unix system File transfer Modem control and dial­up Serial port configuration 9 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomMinicom (2) Start by running minicom ­s   to setup  Minicom A bit austere at first glance,  but quickly gets friendly  (see the labs for details) 10 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomOther terminal emulators GTKTerm :  http://wwwjls­infocom/julien/linux/ Graphical Less powerful than  Minicom , but with a simpler and  more attractive interface Available in recent distros CuteCom :  http://cutecomsourceforgenet/ Another graphical and user­friendly terminal emulator Available in recent distros picocom:  http://freshmeatnet/projects/picocom/ Tiny terminal emulator (20K), can be used in embedded systems  GNU Screen: can also be used on a serial console: screen   Example: screen /dev/ttyS0 115200 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomThe U­boot bootloader The U­boot bootloader Michael Opdenacker Thomas Petazzoni Free Electrons ©  Copyright 2004­2009, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/u­boot Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomU­Boot U­Boot is a typical free software project Freely available at  http://wwwdenxde/wiki/U­Boot Documentation available at  http://wwwdenxde/wiki/U­Boot/Documentation The latest development source code is available in a Git  repository:  http://gitdenxde/cgi­bin/gitwebcgi?p=u­bootgit;a=summary Development and discussions happen around an open mailing­ list  http://listsdenxde/pipermail/u­boot/ Since the end of 2008, it follows a fixed­interval release schedule  Every two months, a new version is released Versions are  named YYYYMM 3 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCompiling U­Boot (1) Get the source code from the website, and uncompress it The  include/configs/  directory contains one configuration  file for each supported board It defines the CPU type, the peripherals and their configuration, the  memory mapping, the U­Boot features that should be compiled in,  etc It is a simple h file that sets pre­processor constants See the  README  file for the documentation of these constants Assuming that your board is already supported by U­Boot, there  should be one file corresponding to your board, for example  include/configs/omap2420h4h 4 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomCompiling U­Boot (2) U­Boot must be configured before being compiled make BOARDNAME_config Where  BOARDNAME  is the name of the configuration file in  include/configs/ , without the  h Make sure that the cross­compiler is available in  PATH export PATH=/usr/local/uclibc­0929­2/arm/bin/:$PATH Compile U­Boot, by specifying the cross­compiler prefix Example, if your cross­compiler executable is  arm­linux­gcc : make CROSS_COMPILE=arm­linux­ 5 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomInstalling U­Boot U­Boot must usually be installed in a Flash memory to be  executed by the hardware Depending on the hardware, the  installation of U­Boot is done in a different way The board provides some kind of specific boot monitor, which  allows to flash the second stage bootloader In this case, refer to  the board documentation and tools U­Boot is already installed, and can be used to Flash a new version  of U­Boot However, be careful: if the new version of U­Boot doesn't  work, the board is unusable The board provides a JTAG interface, which allows to write to the  Flash memory remotely, without any system running on the board It  also allows to rescue a board if the bootloader doesn't work 6 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomU­boot prompt Connect the target to the host through a serial console Power­up the board On the serial console, you will see  something like: U­Boot 112 (Aug  3 2004 ­ 17:31:20) RAM Configuration: Bank #0: 00000000  8 MB Flash:  2 MB In:    serial Out:   serial Err:   serial u­boot #  The U­Boot shell offers a set of commands We will study  the most important ones, see the documentation for a  complete reference or the  help  command 7 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomInformation commands U­Boot>  flinfo DataFlash:AT45DB021 Nb pages:   1024 Page Size:    264 Size=  270336 bytes Logical address: 0xC0000000 Area 0: C0000000 to C0001FFF (RO) Bootstrap Area 1: C0002000 to C0003FFF      Environment Area 2: C0004000 to C0041FFF (RO) U­Boot U­Boot>  nand info Device 0: NAND 256MiB 3,3V 8­bit, sector size 128 KiB U­Boot>  version U­Boot 200908 (Nov 15 2009 ­ 14:48:35)Flash information NAND Flash  information U­Boot  information Can vary from one board to the other (according to the U­Boot compile configuration) 8 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEnvironment variables (1) U­Boot can be configured through environment variables, which  affect the behavior of the different commands See the documentation for the complete list of environment  variables The  printenv  command also to display all variables or one : u­boot #  printenv baudrate=19200 ethaddr=00:40:95:36:35:33 netmask=2552552550 ipaddr=100011 serverip=10001 stdin=serial stdout=serial stderr=serial u­boot #  printenv serverip serverip=10002 Network configuration 9 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEnvironment variables (2) The value of the environment variables can be changed using  the  setenv  command : u­boot #  setenv serverip 10002 Environment variable changes can be stored to flash using the  saveenv  command The location in flash is defined at compile  time in the U­Boot configuration file You can even create small scripts stored in environment  variables: setenv mmc­boot 'mmc init 0; if fatload mmc 0  80000000 bootini; then source; else if  fatload mmc 0 80000000 uImage; then run mmc­ bootargs; bootm; fi; fi' You can then execute the script: run mmc­boot 10 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomTransferring files to the target U­Boot is mostly used to load and boot a kernel image, but it also  allows to change the kernel image and the root filesystem stored  in flash Files must be exchanged between the target and the  development workstation This is possible : Through the network if the target has an Ethernet connection, and  U­Boot contains a driver for the Ethernet chip If so, the TFTP  protocol can be used to exchange files Through the serial line if no Ethernet connection is available Target Host U­Boot TFTP client TFTP serverEthernet connection 11 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomConfiguring and testing tftp On GNU/Linux systems based on Debian: Ubuntu, Knoppix Install the  tftpd­hpa  package (tftp server): apt­get install tftpd­hpa Copy files to the root directory of the tftp server Example: cp arch/arm/boot/uImage /var/lib/tftpboot To test the server, install a tftp client on your workstation: apt­get install tftp­hpa Use it to download a file ( ­4  to force the use of IPv4) tftp ­4 localhost > get uImage 12 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomU­boot mkimage The kernel image that U­Boot loads and boots must be prepared,  so that an U­Boot specific header is added in front of the image This is done with a tool that comes in U­Boot,  mkimage Debian / Ubuntu: just install the  uboot­mkimage  package Or, compile it by yourself: simply configure U­Boot for any board  of any architecture and compile it Then install  mkimage : cp tools/mkimage /usr/local/bin/ The special target  uImage  of the kernel Makefile can then be  used to generate a kernel image suitable for U­Boot 13 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomFlashing a kernel image Compile your kernel and generate the U­Boot header running  make uImage Copy the kernel image to the directory exported by the TFTP server On the board, in U­Boot, download the kernel image to memory : u­boot #  tftp 8000 uImage Unprotect NOR flash u­boot #  protect off 1:0­4 Erase NOR flash u­boot #  erase 1:0­4 Copy to NOR flash   ( 0x01000000 :  first sector) u­boot #  cpb ${fileaddr} 1000000 ${filesize} Restore NOR flash sector protection: u­boot #  protect on 1:0­4 See our practical labs for details handling NAND flash 14 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomboot commands Specify kernel boot parameters: u­boot # setenv bootargs mem=64M \  console=ttyS0,115200 init=/sbin/init \ root=/dev/mtdblock0 Execute the kernel from a given physical address (RAM or flash): bootm 0x01030000 Continues on the same line 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomOMAP boot components Rom code X­loader U­boot Linux kernel Found in ROM Executed from ROM at boot Found in NAND or in MMC ( MLO  file) Copied to the CPU's internal RAM Initializes the external DRAM controller + other devices Found in NAND or in MMC ( u­bootbin  file) Copied to DRAM Can also initialize some devices Found in NAND, MMC, USB, network, serial Copied  to DRAM (depending on U­boot's features)At least of OMAP3 and OMAP4 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomPractical lab – U­Boot Time to start the practical lab ! Configure and compile U­boot  for your ARM board Flash it on your board 1 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomFree Electrons Linux kernel introduction Michael Opdenacker Thomas Petazzoni Free Electrons ©  Copyright 2004­2009, Free Electrons Creative Commons BY­SA 30 license Latest update:  Dec 7, 2010 ,  Document sources, updates and translations: http://free­electronscom/docs/kernel­intro Corrections, suggestions, contributions and translations are welcome! 2 Free Electrons  Kernel, drivers and embedded Linux development, consulting, training and support  http//free­electronscomEmbedded Linux driver development Kernel overview Linux features 3 Free Electrons

------------- Read More -------------

Download embedded-linux-training.pdf

Embedded Linux training related documents

Training Syllabus for: SolidWorks Advanced Part Modeling 2012

2 Pages · 2012 · 633 KB · English

SolidWorks Advanced Part Modeling 2012 Feature Scope Patterning Bodies Tool Body Sweep Options Sweep with Guide Curves Introducing:

ADOPTIVE PARENTS’ TRAINING NETWORK

2 Pages · 2011 · 42 KB · English

consider ways to support the child in managing self-regulation and will also address the Adoptive Parents’ Training Network, c/o Brian Semple, Interlaken,

Economic Impact Assessment of Banning Embedded Commissions in the Sale of Mutual Funds

124 Pages · 2017 · 1.5 MB · English

Sensitivity Analysis on the Potential Impact of a Ban on Canada's Economic Footprint. 54 . spread and thus the likelihood of an advice gap would be more pronounced than in those countries. redemption fee rate is set on a sliding scale, starting at up to 7%, which diminishes to 0% over a 5 to 7 year

Dreamweaver 102 - ITS Training - Cal Poly

48 Pages · 2004 · 1.93 MB · English

The Cal Poly web page template has a navigation bar on the left side of the page to assist the viewer in navigating to the other pages in the web site.

Online Safe Environment Training

1 Pages · 2014 · 135 KB · English

Online Safe Environment Training Instructions for VOLUNTEERS & CATECHISTS All volunteers and catechists may complete the diocesan safe environment training requirement

Management training

1 Pages · 2016 · 236 KB · English

Management training Programme contents:€ We give students and young graduates the possibility to carry out “management training” in our hotels in Asia.

Genetic variants influencing effectiveness of exercise training programmes in obesity

8 Pages · 2016 · 265 KB · English

current evidence, through a literature review and the results of our studies on the influence of gene variants Review Paper. Biol. Sport 2016;33:207-214. DOI: 10.5604/20831862.1201052. Key words: Genetics. Physical activity. Obesity-related traits MM, Patey G, Tate K, Delavier-Klutchko.

Training Calendar

23 Pages · 2016 · 4.27 MB ·

like to learn more about the Illinois Department of Human Services Child Presenter(s): Cheryl Bulat, ITN Curricula Trainer. Program for Infant 

vocational training

52 Pages · 1999 · 286 KB ·

their lack of language skills and to their need for stability and security Programmes should be established to support refugees in developing 1975 by the EC with the remit to “assist the Commission in encouraging at a to mainstream training courses and employment in an English-speaking