Building Embedded Linux Full Tutorial for ARM
-
Upload
sherif-mousa -
Category
Technology
-
view
8.395 -
download
17
description
Transcript of Building Embedded Linux Full Tutorial for ARM
![Page 1: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/1.jpg)
Building Embedded Linux (Full Tutorial for ARM)
Information Technology Institute (ITI)
Sherif Mousa
Embedded Linux @ Information Technology Institute 1
![Page 2: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/2.jpg)
2 Embedded Linux @ Information Technology Institute
Using Linux in an embedded project is easier, and
more fun, than ever
![Page 3: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/3.jpg)
Tips for Linux
• Read instructions and tips carefully.
• Always read error messages carefully, in particular the first one which is issued.
• Never stay stuck with a strange problem more than 5 minutes.
• If you ran commands from a root shell by mistake, your regular user may no longer be able to handle the corresponding generated files. In this case, use the chown –R command to give the new files back to your regular user.
3 Embedded Linux @ Information Technology Institute
![Page 4: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/4.jpg)
Tips for Linux
• You should only use the root user for operations that require super-user privileges, such as: mounting a file system, loading a kernel module, changing file ownership, configuring the network. Most regular tasks (such as downloading, extracting sources, compiling...) can be done as a regular user.
4 Embedded Linux @ Information Technology Institute
![Page 5: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/5.jpg)
5
Hardware for Linux systems
Embedded Linux @ Information Technology Institute
![Page 6: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/6.jpg)
Processor and Arch.
• The Linux kernel and most other architecture-dependent component support a wide range of 32 and 64 bits architectures
– x86 and x86-64, as found on PC platforms, but also embedded systems (multimedia, industrial)
– ARM, with hundreds of different SoC (multimedia, industrial)
– PowerPC (mainly real-time, industrial applications)
6 Embedded Linux @ Information Technology Institute
![Page 7: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/7.jpg)
RAM & Storage
• RAM: a very basic Linux system can work within 8 MB of RAM, but a more realistic system will usually require at least 32 MB of RAM. Depends on the type and size of applications.
• Storage: a very basic Linux system can work within 4 MB of storage, but usually more is needed. – Flash storage is supported, both NAND and NOR flash,
with specific filesystems.
– Block storage including SD/MMC cards and eMMC.
7 Embedded Linux @ Information Technology Institute
![Page 8: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/8.jpg)
Communication
• The Linux kernel has support for many common communication busses – USB
– SPI (Serial Peripheral Interface)
– CAN (Controller Area Network)
– 1-wire
• And also extensive networking support – Ethernet, Wi, Bluetooth, CAN, etc.
– IPv4, IPv6, TCP, UDP, etc.
– Firewalling, advanced routing.
8 Embedded Linux @ Information Technology Institute
![Page 9: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/9.jpg)
Types of HW platforms
• Evaluation platforms from the SoC vendor. Usually expensive, but many peripherals are built-in. Generally unsuitable for real products.
• Component on Module, a small board with only CPU/RAM/ash and a few other core components, with connectors to access all other peripherals. Can be used to build end products for small to medium quantities.
• Custom platform. Schematics for evaluation boards or development platforms are more and more commonly freely available, making it easier to develop custom platforms. (Open Hardware)
9 Embedded Linux @ Information Technology Institute
![Page 10: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/10.jpg)
Tips for HW
• Make sure the hardware you plan to use is already supported by the Linux kernel, and has an open-source bootloader.
• Having support in the official versions of the projects (kernel, bootloader) is a lot better: quality is better, and new versions are available.
• Some SoC vendors and/or board vendors do not contribute their changes back to the mainline Linux kernel.
10 Embedded Linux @ Information Technology Institute
![Page 11: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/11.jpg)
11
Software Components
Embedded Linux @ Information Technology Institute
![Page 12: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/12.jpg)
Software Components
• Cross-compilation ToolChain
• Bootloader
• Linux Kernel
• System libraries (C library)
• Filesystem with other libraries & apps.
12 Embedded Linux @ Information Technology Institute
![Page 13: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/13.jpg)
Embedded Linux Output
• Board Support Package development – A BSP contains a bootloader and kernel with the
suitable device drivers for the targeted hardware
• System integration – Integrate all the components, bootloader, kernel,
third-party libraries and applications and in-house applications into a working system
• Development of applications – Normal Linux applications, but using specially chosen
libraries
13 Embedded Linux @ Information Technology Institute
![Page 14: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/14.jpg)
Cross-ToolChain
14 Embedded Linux @ Information Technology Institute
X86 Binary Target Binary
X86
X86 Target CPU
Source Code
Native ToolChain Cross ToolChain
![Page 15: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/15.jpg)
15
Where to get Cross-ToolChain
Embedded Linux @ Information Technology Institute
![Page 16: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/16.jpg)
Where to get Cross-ToolChain
• http://elinux.org/Toolchains • Codesourcery, ready-made
– http://www.mentor.com/embedded-software/codesourcery
• Linaro, ready made – http://www.linaro.org/
• Buildroot, tool to build – http://www.buildroot.net/
• Crosstool-NG, tool to build – http://crosstool-ng.org/
16 Embedded Linux @ Information Technology Institute
![Page 17: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/17.jpg)
17
Building Cross-ToolChain
Embedded Linux @ Information Technology Institute
![Page 18: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/18.jpg)
Cross-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 are executed.
18 Embedded Linux @ Information Technology Institute
![Page 19: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/19.jpg)
Cross-ToolChain components
19 Embedded Linux @ Information Technology Institute
GDB (optional)
GCC Compiler C/C++ libs
binutils Kernel Headers
![Page 20: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/20.jpg)
Binutils
• 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://www.gnu.org/software/binutils/
20 Embedded Linux @ Information Technology Institute
![Page 21: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/21.jpg)
Kernel Headers
• 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.
21 Embedded Linux @ Information Technology Institute
![Page 22: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/22.jpg)
GCC
• GNU Compiler Collection, 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://gcc.gnu.org/
22 Embedded Linux @ Information Technology Institute
![Page 23: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/23.jpg)
C Library
• The C library is – 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 C library.
• We will use uClibc: http://www.uclibc.org/
23 Embedded Linux @ Information Technology Institute
![Page 24: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/24.jpg)
24
crosstool-ng
Embedded Linux @ Information Technology Institute
![Page 25: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/25.jpg)
crosstool-ng
• Don’t forget the required pkgs – sudo apt-get install ncurses-dev bison texinfo
flex autoconf automake libtool libexpat1-dev
libncurses5-dev patch curl cvs build-essential
subversion gawk python-dev gperf
• http://crosstool-ng.org
• Untar the source code, then build it – ./configure --enable-local
– make
25 Embedded Linux @ Information Technology Institute
![Page 26: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/26.jpg)
crosstool-ng
• You can use help – ./ct-ng help
– ./ct-ng list-samples
• We will use – ./ct-ng arm-unknown-linux-uclibcgnueabi
26 Embedded Linux @ Information Technology Institute
![Page 27: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/27.jpg)
crosstool-ng
• You can configure it again – ./ct-ng menuconfig
• We will use – ./ct-ng arm-unknown-linux-uclibcgnueabi
• In Path and misc options: – Prefix directory
– Change Maximum log level to see to DEBUG
• In Toolchain options: – Set Tuple’s alias to arm-linux
27 Embedded Linux @ Information Technology Institute
![Page 28: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/28.jpg)
crosstool-ng
• In Debug facilities:
• Enable gdb, strace and ltrace.
• Remove the other options (dmalloc and duma).
• In gdb options: – Make sure that the Cross-gdb and Build a static
gdbserver options are enabled; the other options are not needed.
– Set gdb version to 7.4.1
28 Embedded Linux @ Information Technology Institute
![Page 29: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/29.jpg)
crosstool-ng
• Build
– Create in you home directory
• src >> save the tarballs it will download
• x-tools >> the outbut
–./ct-ng build
And wait
29 Embedded Linux @ Information Technology Institute
![Page 30: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/30.jpg)
30
Using Cross-ToolChain
Embedded Linux @ Information Technology Institute
![Page 31: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/31.jpg)
Using Cross-ToolChain
• Now you have your own built toolchain from ARM arch. Inside x-tools directory.
• Add the bin directory to your PATH environment variable to be able to use it from anywhere
export PATH=$PATH:PATH_TO_BIN_INSIDE_TOOLCHAIN
• You can add this line to bash startup script to be global every time you log in.
sudo gedit /etc/bash.bashrc
31 Embedded Linux @ Information Technology Institute
![Page 32: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/32.jpg)
Compile a simple program
• Compile any C program to check the toolchain arm-linux-gcc hello.c -o hello
• Or by using static compiling arm-linux-gcc -static hello.c -o hellostatic
• You can view the file type file hello
32 Embedded Linux @ Information Technology Institute
![Page 33: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/33.jpg)
33
Kernel Compilation
Embedded Linux @ Information Technology Institute
![Page 34: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/34.jpg)
Kernel Compilation
• Where to get Linux Kernel source
– https://www.kernel.org/
• You can download any Linux version according to your needs.
34 Embedded Linux @ Information Technology Institute
![Page 35: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/35.jpg)
Kernel patching
• Changes to the kernel sources are distributed as patch files. The patch utility is used to apply a series of edits to a set of source files. So, for example, if you have the 2.0.29 kernel source tree and you wanted to move to the 2.0.30 source tree, you would obtain the 2.0.30 patch file and apply the patches (edits) to that source tree:
patch -p1 < patch-2.0.30
35 Embedded Linux @ Information Technology Institute
![Page 36: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/36.jpg)
Linux source dir
• arch – The arch subdirectory contains all of the architecture specific kernel
code. It has further subdirectories, one per supported architecture, for example i386 and alpha.
• include – The include subdirectory contains most of the include files needed to
build the kernel code. It too has further subdirectories including one for every architecture supported. The include/asm subdirectory is a soft link to the real include directory needed for this architecture, for example include/asm-i386. To change architectures you need to edit the kernel makefile and rerun the Linux kernel configuration program.
• init – This directory contains the initialization code for the kernel and it is a
very good place to start looking at how the kernel works.
36 Embedded Linux @ Information Technology Institute
![Page 37: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/37.jpg)
Linux source dir
• mm – This directory contains all of the memory management code. The
architecture specific memory management code lives down in arch/*/mm/, for example arch/i386/mm/fault.c.
• drivers – All of the system's device drivers live in this directory. They are further
sub-divided into classes of device driver, for example block.
• ipc – This directory contains the kernels inter-process communications
code.
• modules – This is simply a directory used to hold built modules.
• fs – All of the file system code. This is further sub-divided into directories,
one per supported file system, for example vfat and ext2.
37 Embedded Linux @ Information Technology Institute
![Page 38: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/38.jpg)
Linux source dir
• kernel – The main kernel code. Again, the architecture specific
kernel code is in arch/*/kernel.
• net – The kernel's networking code.
• lib – This directory contains the kernel's library code. The
architecture specific library code can be found in arch/*/lib/.
• scripts – This directory contains the scripts (for example awk and tk
scripts) that are used when the kernel is configured.
38 Embedded Linux @ Information Technology Institute
![Page 39: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/39.jpg)
Kernel Compilation
• Configure the Linux kernel make vexpress_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
• Edit the default configuration make menuconfig
• Build the kernel image make all ARCH=arm CROSS_COMPILE=arm-linux-
• You will find the kernel image in arch/arm/boot/zImage
39 Embedded Linux @ Information Technology Institute
![Page 40: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/40.jpg)
40
HW Emulators
Embedded Linux @ Information Technology Institute
![Page 41: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/41.jpg)
HW Emulators
• Hardware emulation is the process of imitating the behavior of one or more pieces of hardware (typically a system under design) with another piece of hardware, typically a special purpose emulation system.
41 Embedded Linux @ Information Technology Institute
![Page 42: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/42.jpg)
Qemu
• QEMU is a generic and open source machine emulator and virtualizer.
• QEMU lets you run another operating system on top of your existing OS.
• When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.
42 Embedded Linux @ Information Technology Institute
![Page 43: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/43.jpg)
Qemu
• Install Qemu on Ubuntu sudo apt-get install qemu-system
• Test Qemu running qemu-system-i386 -m 256M –kernel \
/boot/vmlinuz-3.2.0-57-generic-pae \
-initrd /boot/initrd.img-3.2.0-57-generic-pae
• This command will run your current installed Linux kernel inside Qemu emulator
43 Embedded Linux @ Information Technology Institute
![Page 44: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/44.jpg)
Qemu ARM
• To run the ARM kernel inside Qemu
• We need the zImage Kernel & initrd image filesystem with init process to run
• Compile a simple C program arm-linux-gcc -static hello.c -o init
• Generate the initramfs image echo init | cpio -o --format=newc > initramfs
44 Embedded Linux @ Information Technology Institute
![Page 45: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/45.jpg)
Qemu ARM
• Put the zImage & initramfs together and execute the command qemu-system-arm -M vexpress-a9 \
-kernel zImage -initrd initramfs \
-append "console=tty1“
• The Linux system should start and execute the single process init.
45 Embedded Linux @ Information Technology Institute
![Page 46: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/46.jpg)
46
Building full ARM system with Busybox
Embedded Linux @ Information Technology Institute
![Page 47: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/47.jpg)
Linux Kernel
• The same zImage kernel already built.
47 Embedded Linux @ Information Technology Institute
![Page 48: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/48.jpg)
Busybox
• Inside Busybox source dir, configure & cross-compile for ARM (static)
make ARCH=arm CROSS_COMPILE=arm-linux- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
Busybox Settings -->
Build Options -->
Build Busybox as a static binary (CHECK)
• Command to start building make CONFIG_PREFIX=/home/user-name/ARM_SYSTEM_DIR
ARCH=arm CROSS_COMPILE=arm-linux- install
48 Embedded Linux @ Information Technology Institute
![Page 49: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/49.jpg)
Complete the filesystem dirs
• Inside the ARM_SYSTEM_DIR mkdir proc sys dev etc etc/init.d
gedit etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev –s
• Change the rcS file permissions chmod +x etc/init.d/rcS
49 Embedded Linux @ Information Technology Institute
![Page 50: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/50.jpg)
Create the root fs image file
• Inside the ARM_SYSTEM_DIR find . | cpio -o --format=newc > ../rootfs.img
cd ..
gzip -c rootfs.img > rootfs.img.gz
• Now you have the kernel image & the root fs image compressed
50 Embedded Linux @ Information Technology Institute
![Page 51: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/51.jpg)
Run Qemu emulator
qemu-system-arm -M vexpress-a9 \
-kernel zImage -initrd rootfs.img.gz \
-append "root=/dev/ram rdinit=/bin/sh“
• Now you got a console running, and can try any command or app installed.
51 Embedded Linux @ Information Technology Institute
![Page 52: Building Embedded Linux Full Tutorial for ARM](https://reader036.fdocuments.us/reader036/viewer/2022081717/555e2230d8b42a384f8b4b36/html5/thumbnails/52.jpg)
http://about.me/shatrix
52 Embedded Linux @ Information Technology Institute