Learning Linux for embedded systems

jag blev nyligen frågad hur en person med erfarenhet av inbyggda systemprogrammering med 8-bitars processorer, till exempel PIC, samt 32-bitars processorer, till exempel PowerPC, men ingen Linux-erfarenhet, kan lära sig att använda inbäddad Linux.

vad jag alltid rekommenderar till en sådan inbäddad systemprogrammerare är detta: titta på inbäddad Linux som två delar, den inbäddade delen och Linux-delen. Låt oss överväga Linux-delen först.

Linux-sidan
operativsystem finns i överflöd och valen är många för ett inbäddat system, både proprietär och öppen källkod. Linux är ett av dessa val. Oavsett vad du använder för din utvecklingsvärd, oavsett om det är Linux eller Windows eller Mac, måste du lära dig att programmera med Target OS. I detta avseende är det inte mycket annorlunda att använda inbäddad Linux än att använda VXworks, WindowCE eller ett annat operativsystem. Du behöver en förståelse för hur operativsystemet är utformat, hur du konfigurerar operativsystemet och hur du programmerar med dess applikationsprogrammeringsgränssnitt (API).

några faktorer gör det lättare att lära sig att programmera Linux än andra inbäddade operativsystem. Du hittar många böcker och handledning om Linux, liksom Unix som det härrör från — många fler än för andra operativsystem. Online-resurser för Linux är gott, medan andra operativsystem har en mycket mindre närvaro, eller en som drivs av OS-tillverkaren. Linux är öppen källkod, och du kan läsa koden för att få en förståelse för exakt vad operativsystemet gör, något som ofta är omöjligt med ett proprietärt operativsystem som distribueras som binärer. (Jag rekommenderar verkligen inte att läsa Linux-källa för att försöka lära mig hur man programmerar Linux. Det är som att försöka lära sig att köra genom att studera hur en bils överföring fungerar.)

den viktigaste faktorn som skiljer Linux från andra operativsystem är att samma kärna används för alla system, från de minsta inbäddade korten, till stationära system, till stora serverfarmar. Det betyder att du kan lära dig en stor mängd Linux-programmering på skrivbordet i en miljö, vilket är mycket mer flexibelt än att använda ett målkort med alla komplexiteter att ansluta till målet, ladda ner en testprogrammering och köra testet. Alla grundläggande begrepp och de flesta API: er är desamma för din stationära Linux och din inbäddade Linux.

installera Linux
du kan installera en stationär Linux-distribution på ditt utvecklingssystem, ersätta ditt Windows-eller Mac-system, men det kan vara en ganska stor bit att bita av på en gång, eftersom du sannolikt skulle behöva konfigurera e-post, lära dig nya verktyg och komma igång med ett annat skrivbordsgränssnitt. Du kan installera Linux i en dual-boot-miljö, där du använder den gamla miljön för e-post etc., och använd Linux-systemet för lärande. Detta kan vara ganska besvärligt, eftersom du måste stänga en miljö för att ta upp den andra. Dessutom kan det vara opraktiskt eller omöjligt att göra antingen inom en företagsmiljö. Det folk föredrar att stödja en känd miljö, inte en som du har valt.

ett enklare sätt är att skapa en virtuell maskinmiljö på ditt nuvarande utvecklingssystem. För Windows-värdar kan du installera VMware Player eller VirtualBox, och på Mac kan du installera Parallels eller VMware Fusion. Att använda en VM ger dig mycket mer flexibilitet. Du kan installera en stationär Linux-distribution, som Ubuntu eller Fedora. Du kan använda den här distributionen för att bli bekant med grundläggande Linux-koncept, lära dig kommandoskalet och lära dig att bygga och köra program. Du kan konfigurera om kärnan eller ladda drivrutiner, utan oro för att du ska krascha ditt skrivbordssystem. Du kan bygga hela kärnan och applikationsmiljön, liknande vad du kan göra med en korsutvecklingsmiljö för ett inbäddat Linux-mål.

om din VM som kör Linux kraschar startar du helt enkelt om VM. Kraschen påverkar inte andra saker som du kan göra på ditt utvecklingssystem, till exempel att läsa en webbsida om hur man bygger och installerar en drivrutin, eller att skriva ett e-postmeddelande till en av de många supportmeddelandelistorna.

några av VM-produkterna har snapshot-funktioner som gör att du kan ta en kontrollpunkt med en känd arbetskonfiguration, som du kan rulla tillbaka om du inte enkelt kan korrigera en krasch. Denna ögonblicksbild är mycket lättare än att försöka rädda ett kraschande skrivbordssystem eller ett svarande målkort.

en Linux VM som körs på skrivbordet är inte en perfekt modell för en inbäddad Linux-miljö. VM emulerar hårdvaran i ett skrivbordssystem, med en begränsad uppsättning enheter som sannolikt inte matchar ett riktigt inbäddat mål. Men vårt mål vid denna tidpunkt är inte att modellera ett riktigt mål (något vi kommer att diskutera senare) men skapa en miljö där du enkelt kan lära dig Linux-koncept och programmering.

Detta är det första steget: skapa en VM och installera en stationär Linux-distribution på VM. Vi väljer härifrån i vår nästa del.

Michael Eager är huvudkonsult på Eager Consulting i Palo Alto, Kalifornien. Han har över fyra decennier erfarenhet av att utveckla kompilatorer, debuggers och simulatorer för ett brett spektrum av processorarkitekturer som används i inbyggda system. Hans nuvarande och tidigare kunder inkluderar stora halvledarföretag och systemutvecklare. Michael har varit medlem i ISO C++ Standard Committee och ABI Committees för flera processorarkitekturer. Han är ordförande för Debugging Standards Committee for DWARF, ett allmänt använt felsökningsdataformat. Han är aktiv i öppen källkod och Linux-samhällen.

relaterade länkar:

  • lärande Linux för inbyggda system
  • komma igång med Embedded Linux: del två
  • komma igång med Embedded Linux: del tre
  • komma igång med Embedded Linux: del fyra
  • komma igång med Embedded Linux: del fem
  • komma igång med Embedded Linux: Del sex
  • komma igång med Embedded Linux: del sju

Leave a Reply

Din e-postadress kommer inte publiceras.