Linux i Inbyggda System, 7.5hp Linux Cross Toolchain. Cross Development Toolchain binutil, glibc and gcc

Relevanta dokument
Programmering i C++ Kompilering från kommandoraden

Tillämpad programmering

Föreläsning 3. Programmering, C och programmeringsmiljö

IDA kursmaterial Informationsblad make. make

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Övning Installation av Gentoo och/eller Arch Linux

prog: prog.c gcc -g -Wall prog.c /usr/local/bib/c/58an/modules/modul.o -o prog

Din egen webserver med Apache

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

TDP005 Projekt: Objektorienterat system

Embedded Linux på Olimex SAM9-L9260

NetBeans 5.5. Avsikt. Projektfönster

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Datorlaboration 0, Programmering i C++ (EDA623)

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

TDP005: Introduktion till Make

Laboration 10 - Eclipse

Övningar för del I av kursen

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Arbetsuppgift 1: På virtuell maskin med Ubuntuserver, skapa katalog och skapa Dockerfile. Skapa ny katalog i din hemmakatalog, med namnet webbserver.

TDP005, Projekt: objektorienterade system

Instruktioner för att kunna programmera på skolans datorer

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Eclipse en handledning

NetBeans 7. Avsikt. Projektfönster

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Datorlaboration 0, Programmering i C++ (EDAF30)

Avslutning. Kapitel Komprimering av filer

SKAPA DET FÖRSTA PROJEKTET I mikrobasic PRO for AVR

Det finns många flaggor till g++,

Linuxadministration I 1DV417 - Laboration 2 Filsystemet och kickstart. Marcus Wilhelmsson

Du kan installera Widgitprodukter på ett nätverk. Följande program och tillägg hanteras (du kanske inte har licens att installera all dessa):

Laboration 10 - NetBeans

Oövervakade, tysta och administrativa installationer av RIB Huvudprogram

Föreläsning 2 Verktyg m.m.

kommando -fl argument

Professional Services. Linux Support Group (LSG)

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix

2 Eclipse en handledning

Ladda upp filer fra n PLC till PC

Objektorienterad programmering i Java I

Installationsmanual Onepix RSS Vatech SVENSK

Oövervakade, tysta och administrativa installationer av RIB Huvudprogram 1.3.3

TDP005. Föreläsning 2. Filip Strömbäck

Guide för installation av programvara NPD SV

Tips och tricks. Några bra tips. Lägg till sökvägar

STADSLEDNINGSKONTORET SOA SDK IT-AVDELNINGEN VERSION 2.1. Läs mig först. Stockholms stad SOA-plattform. Sida 1 (5)

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Föreläsning 2. Operativsystem och programmering

Så här skriver du ditt första program i C++

wxwidgets, Programmering i C++ (EDAF30)

Kort-kort om utdelade användarkonton och datormiljön på NADA

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Bilaga D, Hjälpprogram

SMD 134 Objektorienterad programmering

Code-Lite tutorial ( /RoJ)

Inledande programmering med C# (1DV402) Introduktion till C#

7 Mamut Client Manager

Jobbschemaläggare. Morgan N. Sandquist Utvecklare: Gary Meyer Granskare: Lauri Watts Översättare: Stefan Asserhäll

CVS-Introduktion. CyberRymden Introduktion till CVS,17 november (27) Marcus Rejås

Att använda Java SE JDK 6

Installation av Virtualiseringsplattform

Scan Station Pro 550 Administration och serviceverktyg för Scan Station

Eclipse en handledning

Lab1 Introduktion. 1 Syfte. 2 Innehåll Win32API Skapa trådar Kritiska sektioner Mailslothantering. 3 Förberedelse & Tips

Myndigheten för samhällsskydd och beredskap 1 (10) Datum Installationsguide ROPA

Innehåll i detta dokument

Föreläsning 3. Programmering, C och programmeringsmiljö

Lathund för Linuxkommandon

Installation av WinPig Slakt

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Snabbguide Visma Compact API Copyright Visma Spcs AB

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

1 Logga in 1. 2 Byta lösenord 1. 3 Hemkatalog 1. 4 Unixintroduktion Viktiga kommandon Läsa 3

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

FileMaker. Köra FileMaker Pro 10 på Terminal Services

Simulering med ModelSim En kort introduktion

Administrationsmanual ImageBank 2

TDP005, Projekt: Objektorienterade System. Laboration: Eclipse

UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

Handbok KAppTemplate. Anne-Marie Mahfouf Översättare: Stefan Asserhäll

Sjukhusbiblioteket i Karlstad, september 2012, Modifierad av Linköpings universitetsbibliotek tisdag den 11 december 2018

FLEX Personalsystem. Uppdateringsanvisning

Eclipse. Kort genomgång

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

grundläggande C++, funktioner m.m.

PRINTER DRIVER ADMINISTRATOR GUIDE

Så här byter du från Unifaun WebOrder (UWO) till Unifaun OnlineConnect (UOCT)

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Installation, Novaschem 2005

Instruktion för användande av Citrix MetaFrame

Att använda Java SE JDK 6

1. Log on to the system using the user ide and password ide. 2. Copy the file /etc/ca-certificates.conf to the home directory of the user.

Smartair System. TS1000 Version 4.23

Installationsguide. Innehållsförteckning

Gissa ordet, tutorial

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Transkript:

Linux i Inbyggda System, 7.5hp 120202 Linux Cross Toolchain Cross Development Toolchain binutil, glibc and gcc Innehållsförteckning: sida 1. Introduktion 2 2. Redovisa 2 3. Workspace 2 4. Komponent versioner 3 5. Byggkrav 3 6. Byggööversikt 3 7. Workspace inställningar 4 8. Förbered för att bygga verktygen 4 9. Kernel Headers 4 10. Binutils 5 10. Bootstrap Compiler 5 11. C library 5 12. Full Kompilering 6 13. Setup verktygskedjan 6 14. Att använda en Toolchain 7 15. C Library Alternativ 8

1. Introduktion Målet är att bygga en Linux kors verktygskedja på en host dator för vår target maskin. Se kapitel 4: Development Tools, in Building Embedded Linux Systems by Karim Yaghmour. Ungefär som vanliga programutvecklare så behöver inbäddade systemutvecklare kompilatorer, länkare, integrerade utvecklingsmiljöer och andra sådana utvecklingsverktyg. Den inbäddade utvecklarens verktyg är dock annorlunda i och med att de körs vanligtvis på en plattform och samtidigt byggs applikationer för en annan. Det är därför dessa verktyg ofta kallas plattformsoberoende utvecklingsverktyg, eller kors utvecklingsverktyg. För att välja rätt inställning för verktygskedjan behöver vi studera hårdvaran för målmaskinen. Kors utvecklingverktyget tillverkas av binutils, glibc och GCC för kärnan som körs på target. 2. Redovisa. Skapa ett fungerande Linux Cross Toolchain genom att bygga en kärna för target. Skriv en detaljerad Resultatrapport hur du har gjort din Linux Cross Toolchain. Redovisa någon av följande nivåer. 3. Du har byggt den själv! 2. Har byggt den med hjälp av Buildroot 1. Tagit en färdigutvecklad Linux Cross Toolchain 3. Workspace Under utveckling av och anpassning till programvaran för ditt målsystem, kommer du att behöva organisera olika mjukvarupaket och komponenter i projekt i ett omfattande och lättanvänd katalogstruktur. Placeringen av ditt projekts workspace är upp till dig, men jag rekommenderar att du använder en post i katalogen / home. Varje styrsystemskomponent har en separat post i min hemkatalog. Tabell 4-1. Föreslagna projektet katalogstruktur build-tools debug doc images kernel project rootfs sysapps tmp tools

Verktygskedjan måste vi sätta ihop för att korsutveckla applikationer för vilket target som helst, ingår binutils, såsom ld, gas, och ar, C-kompilatorn och C- biblioteket, glibc, eglibc eller uclibc.

4. Komponentversioner Det första steget i att bygga verktygskedjan är att välja den komponentversioner som vi kommer att använda. Detta innebär att välja en binutils-version, en gcc version och en glibc/eglibc version för target kernel. Eftersom dessa paket underhålls och godkänts oberoende av varandra, kommer inte alla versioner av ett paket, att bygga på rätt sätt, när den kombineras med olika versioner av andra paket. Du kan försöka använda de senaste versionerna av varje paket, men denna kombination är inte garanterat att det heller fungerar. Ett förslag är att använda de versioner som Buildroot använder för att bygga sin verktygskedja. 5. Byggkrav Att bygga en plattformsoberoende verktygskedjan behöver du ett fungerande verktygskedjan på din host. Du behöver också en giltig uppsättning kernel-headers för din host. Dessa headers finns oftast i / usr / include / linux, / usr / include / asm, och / usr / include / asmgeneric katalogen, och är de headers som bör används för att kompilera target glibc installerat på din datorn. I äldre distributioner, och i vissa installationer är dessa kataloger är egentligen symboliska länkar till kataloger i / usr / src / linux katalogen. 6. Byggöversikt. Med rätta verktyg på plats. Låt oss ta en titt på det förfarande som används för att bygga verktygskedjan. Dessa är de fem huvudsakliga stegen: l. Kernel headers installeras 2. Binutils installeras 3. Bootstrap kompilatorn installeras 4. C-biblioteket setup (bygga glibc och uclibc, använd en) 4. C-biblioteket setup (bygga glibc och uclibc, använd en) 5. Fullständig kompilator installeras De flesta steg i att bygga verktygskedjor innebär att följande åtgärder utföres: l. Packa upp paketet. 2. Konfigurera paket för plattformsoberoende utveckling. 3. Bygg paketet. 4. Installera paketet.

7. Workspace inställning För detta ändamål behöver vi definiera några fler miljövariabler. De underlätta byggprocessen och baseras på de miljövariabler som redan definierats. Med samma exempelprojekt som tidigare. Här är den nya develdaq skriptet med de nya variablerna: export PROJECT=daq-module export PRJROOT=/home/karim/control-project/${PROJECT} export TARGET=i386-linux export PREFIX=${PRJROOT}/tools export TARGET_PREFIX= ${PREFIX}/${TARGET} export PATH=${PREFIX}/bin:${PATH} cd $PRJROOT För köra det här skriptet $./Develdaq 8. Förbered för att bygga verktygen. Men först måste vi skapa de kataloger som kommer att innehålla paketen medans de byggs. Skapa en katalog för var och en av verktygskedjans komponenter. $ cd ${PRJROOT}/build-tools $ mkdir build-binutils build-boot-gcc build-glibc build-gcc Först och främst kommer varje packet med sin egen dokumentation. En hel del färdiga plattformsoberoende vektygskedjor finns antingen online eller kommersiellt. Eftersom jag inte känner till själva processen, genom vilken varje byggdes, jag kan inte erbjuda några råd om dessa paket. 9. Kernel Headers Installationsprogrammet av kärnans headers är det första steget i uppbyggnaden av verktygskedjan. $ tar xvzf linux-2.4.18.tar.gz eller $ tar xvjf linux-2.4.18.tar.bz2 $ cd linux-2.4.18 $ make ARCH=i386 CROSS_COMPILE=i386-linux- menuconfig Vi kan nu skapa den omfattar katalogen som krävs för verktygskedjan och kopiera kernel headers till den. $ mkdir p ${TARGET_PREFIX}/include $ cp r include/linux/ ${TARGET_PREFIX}/include $ cp r include/asm-i386/ ${TARGET_PREFIX}/include/asm $ cp r include/asm-generic/ ${TARGET_PREFIX}/include

10. Binutils I binutils paketet ingår verktyg som oftast används för att manipulera binära objektfiler. $ cd $ {PRJROOT} / build-tools $ tar -xvzf binutils-2.10.1.tar.gz $ cd build-binutils $../binutils-2.10.1/configure - target = $ TARGET - prefix = $ {PREFIX} $ make $ make install $ ls $ {PREFIX} / bin 11. Bootstrap Compiler gcc-2.95.3 I detta skede kommer vi att bygga bootstrap-kompilatorn gcc-2.95.3, som bara kommer att stödja C-språket. $ cd ${PRJROOT}/build-tools $ tar xvzf gcc-2.95.3.tar.gz $ cd build-boot-gcc $../gcc-2.95.3/configure - target=$target -prefix=${prefix} \ > --without-headers -with-newlib -enable-languages=c $ make all-gcc $ make install-gcc 12. C Library för gcc 3.2 och högre Glibc-paketet består av ett antal bibliotek och är den känsligaste och längsta package build i våra krossplattforms verktygskedja. Det är en extremt viktig programvarukomponent som de flesta, om inte alla, program som finns eller är under utveckling för ditt target är beroende av. $ cd ${PRJROOT}/build-tools $ tar xvzf glibc-2.3.1.tar.gz $ tar xvzf glibc-linuxthreads-2.3.1.tar.gz -directory=glibc-2.3.1 $ mkdir build-glibc header $ cd build-glibc-headers $../glibc-2.3.1/configure -host=$target -prefix= /usr \ > --enable-add-ons -with-headers=${target_prepix}/include $ make cross-compilings=yes install_root=${target_prefix} \ > prefix= install-headers Därefter skapar vi en dummy stubs.h fil som behövs för att gcc skall gå att bygga. $ mkdir p ${TARGET_PREFIX>/include/gnu $ touch ${TARGET_PREFIX}/include/gnu/stubs.h

Slutligen kan vi bygga bootstrap gcc-kompilatorn. $ cd ${PRJROOT>/build-tools/build-boot-gcc $../gcc-3.2.1/configure -target=$target -prefix=${prefix} \ > --disable-shared -with-headers=${target_prefix}/include \ > --with-newlib -enable-languages=c $ make all-gcc Med konfigureringsskriptet gjort, kan vi nu bygga glibc och installera det: $ cd ${PRJROOT}/build-tools/build-glibc $ make $ make cross-compiling=yes install_root=${target_prefix} \ > prefix= install 13. Full Kompilering Vi är nu redo att installera den fullständiga kompilatorn för din målgrupp med både C och C + +-stöd. $ cd ${PRJROOT}/build-tools/build-gcc $../gcc-2.95.3/configure - target=$target -prefix=${prefix} \ > --enable-languages=c,c++ $ make all $ make install 14. Setup verktygskedjan En kopia av några av host utilities utan det till target kopplade namnet har installerats i ${PREFIX}/$ TARGET}/bin katalogen. Eftersom denna katalog nu innehåller riktade binärfiler som installeras av C-biblioteket byggprocess föreslår jag starkt att du flyttar host binärer från denna katalog och in en annan katalog mer lämpade för host binärerna. $ cd ${PREFIX}/${TARGET}/bin $ file as ar gcc ld nm ranlib strip $ i386-linux-gcc print-search-dirs $ mv as ar gcc ld nm ranlib strip \ > ${PREFIX}/lib/gcc-lib/i386-linux/2.95.3 Följande skript utför länkningen: $ for file in as ar gcc ld nm ranlib strip > do > ln s ${PREFIX}/lib/gcc-lib/i386-linux/2.95.3/$file > done

15. Att använda en Toolchain Du har nu en fullt fungerande gränsöverskridande verktygskedja. Följande är en Makefile för att kontrollera demonen på DAQ-modul som ger ett bra exempel på den gränsöverskridande verktygskedjan användning: # Tool names CROSS COMPILE = ${TARGET}- AS = $(CROSS_COMPILE)as AR = $(CROSS_COMPILE)ar CC = $(CROSS_COMPILE)gcc CPP = $(CC) E LD = $(CROSS_COMPILE)ld NM = $(CROSS_COMPILE)nm OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS-COMPILE)objdump RANLIB = $(CROSS_COMPILE)ranlib READELF = $(CROSS COMPILE)readelf SIZE = $(CROSS COMPILE)size STRINGS = $(CROSS_COMPILE)strings STRIP = $(CROSS COMPILE)strip export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF SIZE \ > STRINGS STRIP # Build settings CFLAGS = -O2 Wall HEADER OPS = LDFLAGS = # Installation variables EXEC_NAME = command-daemon INSTALL = install INSTALL_DIR = ${PRJROOT}/rootfs/bin # Files needed for the build OBJS =daemon.o # Make rules all: daemon.c.o: $(CC) $(CFLAGS) $(HEADER_OPS) c $< daemon: ${OBJS} $(CC) o $(EXEC_NAME) ${OBJS} $(LDFLAGS) install: daemon test d $(INSTALL_DIR) $(INSTALL) d m 755 $(INSTALL_DIR) (INSTALL) m 755 $(EXEC_NAME) $(INSTALL_DIR) clean: rm f *.o $(EXEC_NAME) core distclean: rm f *~ rm f *.o $(EXEC_NAME) core

16. C Library alternativ Med tanke på de restriktioner och begränsningar för inbyggda system, så innebär storleken på standard GNU C-biblioteket en osannolik kandidat för användning på vårt target. Istället måste vi leta efter en C-bibliotek som kommer att ha tillräckligt med funktionalitet och samtidigt vara relativt liten, uclibc/eglibc $ cd ${PRJROOT}/build-tools/uClibc-0.9.16 $ make CROSS=i386-linux- menuconfig Den viktigaste konfigurationsmenyn innehåller följande undermenyer: Target Architecture Features and Options General Library Settings Networking Support String and Stdio Support Library Installation Options uclibc hacking options Med uclibc nu konfigurerad kan vi kompilera den: $ make CROSS=i386-linux- Med bygget nu avslutad, kan vi installera uclibc: $ make CROSS=i386-linux- PREFIX= install Det första steget i att använda dessa verktyg är att ändra vår PATH: $ export PATH=${PREFIX}/uclibc/bin:${PATH) Med samma Makefile som tidigare, kan vi kompilera kontrollen för demonen som följer: $ make CROSS_COMPILE=i386-uclibc- $ make CROSS COMPILE=i386-uclibc- LDFLAGS= -static "Hello World!", För glibc, är mindre än 12 kb i storlek när de länkas dynamiskt och runt 350 KB när den är statiskt länkade och avskalad. Samma "Hello World!" Är bara 2 kb i storlek om den dynamiskt länkas till uclibc och 18 KB när de är statiskt länkade med det. Detta är en stor skillnad