Download presentation
Presentation is loading. Please wait.
Published byEmory Barnett Modified over 9 years ago
1
Building a Cross Compiler, Assembler and Linker Designed by Prof. Peng-Sheng Chen
2
2 What can You Learn? During embedded-system development, why do we need to use cross compiler, assembler / linker and C standard library How to build cross compiler 、 assembler / linker How to build cross C standard library
3
3 Equipment Requirement PC with Linux OS installed Native gcc compiler installed Internet access
4
4 Software Requirement GNU binutils source code (version 2.16.1) ftp://sources.redhat.com/pub/binutils/releases/binutils- 2.16.1.tar.gz ftp://sources.redhat.com/pub/binutils/releases/binutils- 2.16.1.tar.gz http://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.gz http://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.gz GNU C/C++ compiler (version 3.3.6) ftp://sources.redhat.com/pub/gcc/releases/gcc-3.3.6/gcc- 3.3.6.tar.gz ftp://sources.redhat.com/pub/gcc/releases/gcc-3.3.6/gcc- 3.3.6.tar.gz ftp://ftp.nctu.edu.tw/computer-languages/C/gcc/releases/gcc- 3.3.6/gcc-3.3.6.tar.gz ftp://ftp.nctu.edu.tw/computer-languages/C/gcc/releases/gcc- 3.3.6/gcc-3.3.6.tar.gz GNU newlib (version 1.14.0) ftp://sources.redhat.com/pub/newlib/newlib-1.14.0.tar.gz ftp://sources.redhat.com/pub/newlib/newlib-1.14.0.tar.gz
5
5 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
6
6 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
7
7 Introduction A total solution for embedded system development Hardware Software => software-development tools, applications Software-development tools Compiler, assembler, linker, debugger and C standard library Commercial => very high cost Open source => free. Users can modify, distribute and use the software
8
8 GNU Binutils The GNU binutils are a collection of binary tools ld - the GNU linker as - the GNU assembler Other binary tools ar - A utility for creating, modifying and extracting from archives gprof - Displays profiling information objcopy - Copys and translates object files objdump - Displays information from object files … Easy to port binutils to other platforms Suitable for embedded-system development
9
9 GNU C/C++ Compiler Retargettable Available from the Free Software Foundation GPL Licensed Free Written by Richard Stallman originally (FSF) Front-end, back-end system with support for many of each Code quality is better than some known compiler, very close to DEC’s compiler on Alpha Supplied as vendor compiler by NeXT, BeOS, Linux, BSD
10
10 Front Ends C 、 C++ 、 Objective C Ada 95 (GNAT) Fortran77 、 Fortran95 Pascal Modula-2 、 Modula-3 Java (supported from gcc 3.0) Java->Bytecode, Bytecode->native code Java->Native code Cobol Chill (Cygnus, a language in the Modula II family used in European telecommunications )
11
11 Machines Supported by GCC Essentially all machines in widespread. Acorn (Advanced) RISC Machine. Alpha (DEC) Intel x86 Families 、 i860 、 i960. Motorola 680x0 、 68C11 、 DSP56000 Hitachi SH 、 H8300 MIPS 、 IBM PowerPC 、 HP PA-RISC 、 SUN SPARC …… Intel IA64, AMD x86-64 Cell processor (used by PS3)
12
12 GCC Execution
13
13 GNU C Standard Library GLIBC Newlib A C standard library intended for use on embedded systems Usually work on any architecture with the addition of a few low-level routines
14
14 Cross System-Development Tools The characteristics of most embedded systems Limited memory Diskless No output screen Poor performance … Sometimes, it is impossible to execute compiler, assembler / linker and debugger on target platform For embedded system, we need cross system- development tools to help software development
15
15 Machine Classification Build machine The machine builds cross-toolchains Host machine The machine cross-toolchains will execute on Target machine The assembly code of the machine cross- toolchains will produce output for
16
16 Machine Identification Three items to identify machine CPU type Company name System type Example vax-dec-ultrix4.2 i386-redhat-linux m68k-coff arm-elf
17
17 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
18
18 Basic Linux Commands (1) CommandDescription cdChange directory cd /home Change the current working directory to /home cd.. Move to the parent directory of the current directory cd ~ Move to the user's home directory cpCopy files cp file1 file2 Copy the file “file1” to the file “file2”
19
19 Basic Linux Commands (2) CommandDescription dfShow the amount of disk space used on each mounted filesystem lsList files ls List files in the current working directory except those starting with. and only show the file name ls -al List all files in the current working directory in long listing format showing permissions, ownership, size, and time and date stamp
20
20 Basic Linux Commands (3) CommandDescription catSends file contents to standard output cat /etc/hosts Sends the contents of the “/etc/hosts" file to the screen lessSimilar to the more command, but the user can page up and down through the file less file1 The example displays the contents of file1
21
21 Basic Linux Commands (4) CommandDescription moreAllows file contents or piped output to be sent to the screen one page at a time more /etc/hosts Lists the contents of the "/etc/profile" file to the screen one page at a time ls –al |more Performs a directory listing of all files and pipes the output of the listing through more. If the directory listing is longer than a page, it will be listed one page at a time
22
22 Basic Linux Commands (5) CommandDescription rmDelete the files rm file1 Delete the file “file1” mvMove or rename files mv file1 file2 Move the file from “file1" to “file2". This effectively changes the name of “file1" to “file2” mv file1. Locates binaries and manual pages for the ls command
23
23 Basic Linux Commands (6) CommandDescription pwdShow the name of the current working directory whereisShow where the binary, source and manual page files are for a command whereis ls Locates binaries and manual pages for the ls command manformat and display the on-line manual pages man ls Display the on-line manual of “ls”
24
24 Setting Environment Variables (1) Which shell do you use? CommandDescription psReport process status $ ps PID TTY TIME CMD 13580 pts/11 00:00:00 bash 13626 pts/11 00:00:00 ps $ $ ps PID TTY TIME CMD 13580 pts/11 00:00:00 csh 13626 pts/11 00:00:00 ps $ C shell Bash Shell
25
25 Setting Environment Variables (2) Set PATH Ex: Add “ /foo/bin ” to PATH $ export PATH=/foo/bin:$PATH $ setenv PATH /foo/bin:$PATH Bash Shell C shell
26
26 Log Information: Redirection Before a command is executed, its input and output may be redirected Executable file: myexec Log file: log.txt Direct both standard output and standard error to the file “log.txt” $ myexec > log.txt 2>&1 Bash Shell $ myexec >& log.txt C Shell
27
27 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
28
28 Build Cross-Binutils download source code of GNU binutils uncompress source code configure binutils This step will detect system status, adjust related building parameters and generate corresponding Makefile file --target=arm-elf sets target machine for ARM, and supported file format for ELF --prefix=/foo sets the package will be installed in directory /foo make make install configure --target=arm-elf --prefix=/foo
29
29 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
30
30 Build Cross-Compiler (1) Add the directory of binutils executable to PATH download source code of GNU gcc uncompress source code configure gcc This step will detect system status, adjust related building parameters and generate corresponding Makefile file --target=arm-elf sets target machine for ARM, and supported file format for ELF (The setting should consist with the setting in binutils) --prefix=/foo sets the package will be installed in directory /foo (The setting should consist with the setting in binutils) --enable-languages=c sets front-end will support C (That is we will build C compiler only) --with-newlib sets the compiler will use newlib as standard C library
31
31 Build Cross-Compiler (2) make make install configure --target=arm-elf --prefix=/foo --enable-languages=c --with-newlib
32
32 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
33
33 Build Cross-Newlib Add the directory of binutils 、 gcc executable to PATH download source code of GNU newlib uncompress source code configure newlib This step will detect system status, adjust related building parameters and generate corresponding Makefile file --target=arm-elf sets target machine for ARM, and supported file format for ELF (The setting should consist with the setting in binutils and gcc) --prefix=/foo sets the package will be installed in directory /foo (The setting should consist with the setting in binutils and gcc) make make install configure --target=arm-elf --prefix=/foo
34
34 Directory Structure
35
35 Outline Introduction Basic Linux commands Build cross assembler / linker Build cross compiler Build cross C standard library Testing
36
36 Testing /foo/bin/arm-elf-gcc -S test1.c
37
37 Reference Linux/UNIX commands http://www.computerhope.com/unix.htm#04 http://www.computerhope.com/unix.htm#04 GNU binutils http://sources.redhat.com/binutils http://sources.redhat.com/binutils GCC http://gcc.gnu.org http://gcc.gnu.org GNU newlib http://sources.redhat.com/newlib http://sources.redhat.com/newlib
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.