You are on page 1of 56

LP TRNH H NHNG

GV: Phm Ngc Hng


B mn K thut My tnh
Vin CNTT&TT- H BKHN
email: hungpn@soict.hut.edu.vn

Ni dung
Chng 1. Gii thiu lp trnh h nhng
Chng 2. Lp trnh v{o ra c bn
Chng 3. Lp trnh v{o ra n}ng cao
Chng 4. C|c k thut lp trnh n}ng cao
Chng 5. Lp trnh device driver trn Linux
Chng 6. Lp trnh nn tng QT
Chng 7. Lp trnh mng trn Linux nhng
Chng 8. Lp trnh x l nh trn nn nhng

Lp trnh nhng ARM-Linux

Ti liu tham kho


Ti liu tham kho chnh:

Micro2440 User Manual


S3C2440 MicroController Users Manual
Beginning Linux Programming
Advanced Linux Programming
Linux Device Driver
C++ GUI programming with QT
Website:
https://sites.google.com/site/embedded247/
Lp trnh nhng ARM-Linux

Chng 1

Gii thiu
Lp trnh h nhng

Lp trnh nhng ARM-Linux

Ni dung chng 1
1.1. Gii thiu v lp trnh h nhng
1.2. Gii thiu KIT FriendlyArm micro2440
1.3. H iu h{nh nhng Linux
1.4. Mi trng lp trnh KIT FriendlyArm 2440

Lp trnh nhng ARM-Linux

1.1. Gii thiu lp trnh h nhng


Lp trnh ng dng trn h nhng ph thuc vo nn
tng (platform) phn cng, phn mm ca h nhng .
H nhng khng c h iu hnh:
Thng s dng c|c vi iu khin
hiu nng tng i thp
(8051, ATMega, PIC, ARM7, )
Lp trnh bng C, ASM
Mi trng, cng c lp trnh ty theo tng dng vi iu
khin (CodeVision, AVR Studio, Keil)
Ph hp c|c ng dng iu khin v{o/ra c bn, c|c giao
tip ngoi vi c bn.
Lp trnh nhng ARM-Linux

1.1. Gii thiu lp trnh h nhng


H nhng c h iu hnh:
Da trn c|c vi iu khin, vi x l (CPU) c hiu
nng cao (V d: AVR 32, ARM 9, ARM 11, )
Nhiu nn tng h iu h{nh nhng : uCLinux,
Embedded Linux, Windows CE,
Mi trng, cng c lp trnh ty thuc nn tng h
iu h{nh: C/C++, QT SDK (Nokia), .Net Compact
FrameWork (Microsoft),
ng dng nhiu b{i to|n phc tp: GPS
Tracking/Navigator, X l nh, ng dng
Client/Server,
Lp trnh nhng ARM-Linux

1.1. Gii thiu lp trnh h nhng


Cc thit b di ng thng minh:
Xu hng cng ngh hin nay
Nhiu nn tng: iOS, Android, Windows Phone,
Symbian OS/Memo,
Mi trng, cng c:
iOS: Xcode + iOS SDK (ngn ng Object-C)
Android: C, Java + Android SDK, Eclipse/Netbean
Windows Phone: SDK + Visual Studio (C#)
C|c ng dng phong ph: Google Play Store, Apple
Store, Windows Market Place,
Lp trnh nhng ARM-Linux

1.1. Gii thiu lp trnh h nhng


Mn hc n{y hng ti:
Lp trnh h nhng nn tng ARM + Linux
Minh ha trn KIT FriendlyArm micro 2440
Lp trnh C/C++, lp trnh giao din ha QT

L do:
ARM ? > 90% th phn thit b nhng,
l{ dng vi iu khin hiu nng cao.
Embedded Linux ? M~ ngun m, kh nng can thip, hiu
s}u h thng. Nhiu OS kh|c (iOS, Android) da trn Linux
kernel

Lp trnh nhng ARM-Linux

1.2. Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

10

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

11

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

12

Gii thiu KIT nhng micro2440


Thng s k thut

Lp trnh nhng ARM-Linux

13

Gii thiu KIT nhng micro2440

Lp trnh nhng ARM-Linux

14

1.3. H iu hnh nhng Linux


1.3.1. Tng quan h iu h{nh nhng Linux
1.3.2. C{i t Embedded Linux trn Micro2440
1.3.3. Bin dch, ty bin nh}n Linux

Lp trnh nhng ARM-Linux

15

1.3.1. Tng quan Embedded Linux


H iu h{nh nhng (embedded os) ?
L{ h iu h{nh c{i t cho c|c h thng nhng
(embedded system)
c thit k: compact, efficient, reliable.

Lp trnh nhng ARM-Linux

16

S phn cp h thng

Lp trnh nhng ARM-Linux

17

Kin trc h iu hnh Linux

Lp trnh nhng ARM-Linux

18

c trng h iu hnh nhng


Tng tnh tin cy (reliability)
Tng tnh kh chuyn (portability)
Kh nng tng thch mm: d d{ng n}ng cp hay
thu gn tng thch vi nn tng h thng
Thu gn, i hi t b nh hn. C th h tr khi
ng t b nh ROM, Flash (h thng khng c
cng)
Cung cp c|c c ch lp lch (scheduler) h tr thi
gian thc (Realtime OS RTOS)
Lp trnh nhng ARM-Linux

19

H iu hnh thi gian thc


H thng thi gian thc (Realtime): c|c phn mm,
phn cng hot ng tha m~n c|c r{ng buc v
thi gian
Ph}n loi:
Hard Realtime: khng |p ng deadline -> li h
thng
Soft Realtime: khng |p ng deadline -> gim cht
lng dch v (QoS)

Lp trnh nhng ARM-Linux

20

H iu hnh thi gian thc

Lp trnh nhng ARM-Linux

21

Cu trc nhn h iu hnh

Lp trnh nhng ARM-Linux

22

H thng file trong Linux


Mt s th mc quan trng

/home: th mc ngi dng


/dev: cha c|c file thit b
/bin: cha c|c file thc thi ca h thng
/etc: cha c|c file cu hnh
/var: cha c|c file log
/opt: cha c|c gi chng trnh c{i t thm
/proc: cha thng tin v c|c tin trnh, c|c th{nh phn phn
cng, phn mm ang chy trong h thng
/usr: cha c|c file thc thi, t{i liu lin quan ti ngi dng

Lp trnh nhng ARM-Linux

23

Embedded Linux
H tr rt nhiu kin trc vi x l (c 32 bit v{ 64
bit)
Intel X86, ARM, PowerPC, MIPS, AVR32,

Khng h tr c|c vi iu khin hiu nng thp


H tr c kin trc c v{ khng c khi qun l b
nh (MMU)
C|c h thng c th dng chung toolchains,
bootloader v{ kernel, c|c th{nh phn kh|c phi
ring bit v{ tng thch vi tng h thng
Lp trnh nhng ARM-Linux

24

Qu trnh boot h thng Linux trn PC

Lp trnh nhng ARM-Linux

25

Qu trnh boot h thng Linux nhng

Lp trnh nhng ARM-Linux

26

Qu trnh boot h thng Linux nhng


Boot loader: chng trnh mi, thc hin kim tra
phn cng h thng v{ np nh}n (kernel) ca h
iu h{nh
Kernel: nh}n h iu h{nh, cha c|c th{nh phn
c bn nht
Root file system: h thng file, cha c|c modules
b sung v{ c|c phn mm ng dng

Lp trnh nhng ARM-Linux

27

1.3.2. Ci t Embedded Linux


Bc 1: C{i t bootloader (VD: U-Boot,
Supervivi)
Bc 2: C{i t kernel
Bc 3: C{i t h thng file (root file system)

Lp trnh nhng ARM-Linux

28

Ci t t mi trng Windows
Cng c
Phn mm HyperTerminal: kt ni vi KIT
micro2440 qua cng COM
Phn mm DNW: kt ni vi KIT micro2440 qua
cng USB

C|ch thc
Phn mm HyperTerminal (giao tip vi BIOS trn
Nor Flash qua cng rs232) truyn c|c lnh iu
khin
Phn mm DNW trao i file
Lp trnh nhng ARM-Linux

29

Ci t t mi trng Linux
Cng c:
Phn mm minicom: kt ni vi KIT micro2440
qua cng COM
Phn mm usbpush: kt ni vi KIT micro2440 qua
cng USB

C|ch thc
Phn mm minicom cho php giao tip serial,
truyn c|c lnh iu khin
Phn mm usbpush np file xung KIT

Lp trnh nhng ARM-Linux

30

Ci t h iu hnh nhng Linux

Demo
<Xem hng dn chi tit trong ti liu
hng dn ci t v s dng KIT
micro2440>
Lp trnh nhng ARM-Linux

31

1.3.3. Bin dch, ty bin nhn Linux


Khi n{o cn bin dch li nh}n?
Khi n}ng cp h thng ln c|c phin bn mi hn
Khi cn sa li, thay i, ty chnh c|c module

Qu| trnh bin dch nh}n


Download nh}n ti a ch: kernel.org (Hoc trong
CD i km KIT)
File nn linux-2.6.32.2.tar (ty phin bn);
Gii nn c th mc to{n b m~ ngun ca nh}n
(v d th mc linux-2.6.32.2)
Lp trnh nhng ARM-Linux

32

Bin dch nhn Linux


Qu| trnh bin dch nh}n (tip):
V{o th mc cha m~ ngun nh}n (linux-2.6.32.2)
Cu hnh trc khi bin dch bng lnh:
make menuconfig
Xut hin giao din cu hnh, ty chnh ph hp vi
h thng.
Thc hin bin dch bng lnh: make zImage
Bin dch th{nh cng kt qu s l{ file zImage (trong
th mc linux-2.6.32.2/arch/arm/mach-s3c2440) ,
s c np (porting) xung KIT
Lp trnh nhng ARM-Linux

33

Bin dch nhn Linux

Demo
<Xem hng dn chi tit trong ti liu
hng dn ci t v s dng KIT
micro2440>
Lp trnh nhng ARM-Linux

34

1.4. Mi trng lp trnh KIT


FriendlyARM Micro2440
1.4.1. Mi trng ph|t trin ng dng nhng
1.4.2. C{i t mi trng ph|t trin KIT 2440
1.4.3. Chng trnh HelloWorld

Lp trnh nhng ARM-Linux

35

1.4.1. Mi trng pht trin ng dng


nhng
M hnh lp trnh h thng nhng
Mi trng lp trnh KIT micro 2440

Lp trnh nhng ARM-Linux

36

M hnh lp trnh h thng nhng

Host: h thng cha mi trng pht trin


Target: h nhng cn pht trin ng dng
Lp trnh nhng ARM-Linux

37

Mi trng lp trnh KIT micro 2440


M|y host c{i h iu h{nh Linux (Ubuntu 10.04)
Trnh bin dch cho Cross toolchains (arm-linux-gcc 4.4.3):
bin dch ng dng (vit bng C/C++)
Cng c vit m~ ngun chng trnh C (dng gedit, eclipse)
gFTP: truyn nhn file Host<->KIT qua giao thc FTP
Telnet: kt ni KIT qua Ethernet (s dng cross cable)

Lp trnh nhng ARM-Linux

38

Mi trng lp trnh theo nhm

Mi trng pht trin ng dng theo nhm


Lp trnh nhng ARM-Linux

39

1.4.2. Ci t mi trng pht trin


Cu hnh mng LAN (host + KIT) qua c|p cho v{ s
dng IP cng di:
Linux host: 192.168.1.30
Linux target: 192.168.1.230 (default)

Lp trnh nhng ARM-Linux

40

Ci t trnh bin dch cho


Bc 1: Gii nn arm-linux-gcc-4.4.3.tar.gz
tar zxvf arm-linux-gcc-4.4.3.tar.gz
Bc 2: Cp nht bin mi trng PATH
Thm ng dn ti th mc bin ca arm-linux-gcc4.4.3 (Cp nht bin mi trng PATH trong file
.bashrc trong ng dn ch ra bi bin $HOME)

Bc 3: Kim tra trnh bin dch


M c s console, g lnh: arm-linux-gcc --version
Thng b|o v phin bn ca arm-linux-gcc hin ra =>
qu| trnh c{i t th{nh cng
Lp trnh nhng ARM-Linux

41

Kim tra trnh bin dch cho

Lp trnh nhng ARM-Linux

42

Ci t phn mm gFTP
Bc 1: Ci t phn mm gFTP (nu cha c)
G lnh: sudo apt-get install gftp

Bc 2: Kim tra kt ni gia Host v Target


M phn mm gFTP: Applications->Internet>gFTP
Thit lp cc tham s
a ch IP ca KIT: 192.168.1.230
Username: root
Password: ktmt (c th i bng lnh passwd)

M kt ni
Lp trnh nhng ARM-Linux

43

Kt ni s dng gFTP

Lp trnh nhng ARM-Linux

44

Ci t phn mm debug GDB


Bc 1: download m~ ngun gdb (version 7.0)
Cch 1: apt-get source gdb
Cch 2: http://ftp.gnu.org/gnu/gdb/

Bc 2: Bin dch v{ c{i t gdb client trn m|y


HOST
Bc 3: Bin dch v{ c{i t gdb server trn m|y
TARGET
(Chi tit xem trong ti liu hng dn ci t mi
trng pht trin ng dng)
Lp trnh nhng ARM-Linux

45

1.4.3. Chng trnh HelloWorld


Cu trc chng trnh n gin
C|ch thc bin dch chng trnh
Np file thc thi xung KIT v{ chy ng dng

Lp trnh nhng ARM-Linux

46

Cu trc chng trnh


Tu}n th cu trc chng trnh ANSII C

Lp trnh nhng ARM-Linux

47

Chng trnh Hello World


Son tho m~ ngun chng trnh C bng gedit (file Hello.c)
#include <stdio.h>
int main (int argc, char* argv[])
{
printf(Hello World !\n);
printf (Ten chuong trinh la %s.\n, argv[0]);
printf (Chuong trinh co %d tham so \n, argc - 1);
/* Neu co bat cu tham so dong lenh nao*/
if (argc > 1) {
/* Thi in ra*/
int i;
printf (Cac tham so truyen vao la:\n);
for (i = 1; i < argc; ++i)
printf ( Tham so %d: %s\n, i, argv[i]);
}
return 0;
}

Lp trnh nhng ARM-Linux

48

Cch thc bin dch chng trnh


Cch 1: S dng lnh ca cross compiler
VD: arm-linux-gcc g o Hello Hello.c
Kt qu: bin dch ra mt file thc thi c tn l{ Hello t mt file
m~ ngun l{ Hello.c, file n{y c h tr kh nng debug (-g)
Cch 2: To v{ s dng Makefile
make l{ mt tool cho php qun l qu| trnh bin dch, lin kt
ca mt d |n vi nhiu file m~ ngun.
To Makefile lu c|c lnh bin dch theo nh dng ca
Makefile
S dng lnh make chy Makefile v{ bin dch chng trnh
Cch 3: S dng automake v autoconf
To makefile t ng
Lp trnh nhng ARM-Linux

49

Cu trc Makefile
Makefile cu th{nh t c|c target, variables v{
comments
Target c cu trc nh sau:

target: dependencies
[tab] system command
target: make target
Dependencies: c|c th{nh phn ph thuc (file m~
ngun, c|c file object)
System command: c|c c}u lnh (lnh bin dch, lnh
linux)
Lp trnh nhng ARM-Linux

50

VD 1: Makefile n gin
CC=arm-linux-gcc
all: Hello.c
$(CC) g o Hello Hello.c
clear:
rm Hello
Bin dch chng trnh: make all
Xa file sinh ra trc : make clear

Lp trnh nhng ARM-Linux

51

VD 2: Makefile lin kt
include

Hello.c

Display.c

void display(int index, char* str)


include

Display.h
void display(int index, char* str)

Lp trnh nhng ARM-Linux

52

VD2: Makefile lin kt


Hello.c

Display.c

Compiler

Compiler

Hello.o

Display.o
Linker

Hello

File thc thi

Lp trnh nhng ARM-Linux

53

VD 2: Makefile lin kt
CC=arm-linux-gcc
OUTPUT=Hello
all:Hello.o display.o
$(CC) -o $(OUTPUT) Hello.o display.o
Hello.o:Hello.c
$(CC) -c Hello.c
display.o:display.c
$(CC) -c display.c

Lp trnh nhng ARM-Linux

54

Np file thc thi xung KIT


Bc 1: s dng phn mm gFTP chuyn file Hello
(~ c bin dch trc ) xung KIT, v d
xung th mc: /ktmt
Bc 2: telnet xung KIT, chuyn ti th mc
/ktmt, thc thi chng trnh
G lnh: ./Hello
Nu chng trnh cha c quyn thc thi, thc hin
cp quyn: chmod +x Hello

Bc 3: quan s|t kt qu
Lp trnh nhng ARM-Linux

55

Tho lun

Lp trnh nhng ARM-Linux

56

You might also like