B mn K thut My tnh Vin CNTT&TT- H BKHN email: hungpn@soict.hut.edu.vn Lp trnh nhng ARM-Linux 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 2 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/
3 Lp trnh nhng ARM-Linux Chng 1
Gii thiu Lp trnh h nhng 4 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 5 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. 6 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, 7 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,
8 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 9 Lp trnh nhng ARM-Linux 1.2. Gii thiu KIT nhng micro2440 10 Lp trnh nhng ARM-Linux Gii thiu KIT nhng micro2440 11 Lp trnh nhng ARM-Linux Gii thiu KIT nhng micro2440 12 Lp trnh nhng ARM-Linux Gii thiu KIT nhng micro2440 Thng s k thut
13 Lp trnh nhng ARM-Linux Gii thiu KIT nhng micro2440 14 Lp trnh nhng ARM-Linux 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 15 Lp trnh nhng ARM-Linux 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. 16 Lp trnh nhng ARM-Linux S phn cp h thng 17 Lp trnh nhng ARM-Linux Kin trc h iu hnh Linux 18 Lp trnh nhng ARM-Linux 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) 19 Lp trnh nhng ARM-Linux 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) 20 Lp trnh nhng ARM-Linux H iu hnh thi gian thc 21 Lp trnh nhng ARM-Linux Cu trc nhn h iu hnh 22 Lp trnh nhng ARM-Linux 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
23 Lp trnh nhng ARM-Linux 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 24 Lp trnh nhng ARM-Linux Qu trnh boot h thng Linux trn PC 25 Lp trnh nhng ARM-Linux Qu trnh boot h thng Linux nhng 26 Lp trnh nhng ARM-Linux 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 27 Lp trnh nhng ARM-Linux 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) 28 Lp trnh nhng ARM-Linux 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 29 Lp trnh nhng ARM-Linux 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
30 Lp trnh nhng ARM-Linux 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> 31 Lp trnh nhng ARM-Linux 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)
32 Lp trnh nhng ARM-Linux 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 33 Lp trnh nhng ARM-Linux Bin dch nhn Linux Demo <Xem hng dn chi tit trong ti liu hng dn ci t v s dng KIT micro2440> 34 Lp trnh nhng ARM-Linux 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
35 Lp trnh nhng ARM-Linux 1.4.1. Mi trng pht trin ng dng nhng M hnh lp trnh h thng nhng Mi trng lp trnh KIT micro 2440 36 Lp trnh nhng ARM-Linux M hnh lp trnh h thng nhng Host: h thng cha mi trng pht trin Target: h nhng cn pht trin ng dng 37 Lp trnh nhng ARM-Linux 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)
38 Lp trnh nhng ARM-Linux Mi trng lp trnh theo nhm Mi trng pht trin ng dng theo nhm 39 Lp trnh nhng ARM-Linux 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)
40 Lp trnh nhng ARM-Linux 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-gcc- 4.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 41 Lp trnh nhng ARM-Linux Kim tra trnh bin dch cho 42 Lp trnh nhng ARM-Linux 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 43 Lp trnh nhng ARM-Linux Kt ni s dng gFTP 44 Lp trnh nhng ARM-Linux 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) 45 Lp trnh nhng ARM-Linux 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 46 Lp trnh nhng ARM-Linux Cu trc chng trnh Tu}n th cu trc chng trnh ANSII C 47 Lp trnh nhng ARM-Linux 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; } 48 Lp trnh nhng ARM-Linux 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 49 Lp trnh nhng ARM-Linux 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) 50 Lp trnh nhng ARM-Linux 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 51 Lp trnh nhng ARM-Linux VD 2: Makefile lin kt Hello.c Display.c Display.h include include void display(int index, char* str) void display(int index, char* str) 52 Lp trnh nhng ARM-Linux VD2: Makefile lin kt Hello.c Compiler Hello.o Display.c Compiler Display.o Linker Hello File thc thi 53 Lp trnh nhng ARM-Linux 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 54 Lp trnh nhng ARM-Linux 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 55 Lp trnh nhng ARM-Linux Tho lun 56 Lp trnh nhng ARM-Linux Chng 2
Lp trnh vo ra c bn 57 Lp trnh nhng ARM-Linux Mc tiu chng 2 Sau khi kt thc chng n{y, sinh vin c th Nm c nguyn tc lp trnh giao tip v{o ra c bn trn h iu h{nh Linux nhng Lp trnh giao tip thit b (ghp ni GPIO) vi driver ~ c (led, button) Bit c|ch lp trnh giao tip GPIO m rng da trn giao din sysfs (gpiolib)
58 Lp trnh nhng ARM-Linux Ni dung bi hc 2.1. C ch lp trnh giao tip thit b 2.2. Lp trnh iu khin led n 2.3. Lp trnh giao tip nt bm 2.4. Lp trnh giao tip GPIO m rng
59 Lp trnh nhng ARM-Linux 2.1. C ch lp trnh giao tip thit b Device files, Device number Kim tra danh s|ch device driver, thit b C ch giao tip 60 Lp trnh nhng ARM-Linux M hnh giao tip ng dng thit b Phn mm ng dng Device files Device Drivers Phn cng User Space Kernel Space (Ton quyn truy xut trc tip ti nguyn phn cng ca h thng) Cc hm giao tip chun: open close read write ioctl
61 Lp trnh nhng ARM-Linux Device files, Device number Device files: ls l /dev Device file khng phi l{ file thng thng, khng phi l{ mt vng d liu trn h thng file Qu| trnh c ghi device file Giao tip vi device driver c, ghi phn cng ca thit b Ph}n loi device files Character device: thit b phn cng c, ghi mt chui c|c byte d liu Block device: thit b phn cng c, ghi mt khi d liu
62 Lp trnh nhng ARM-Linux Device files, Device number Device number: mi thit b c x|c nh bi hai gi| tr Major device number: x|c nh thit b n{y s dng drvier no Minor device number: ph}n bit gia c|c thit b kh|c nhau cng s dng chung mt device driver
63 Lp trnh nhng ARM-Linux Kim tra danh sch thit b Kim tra danh s|ch c|c thit b G lnh ls al /dev Gii thch thng tin Loi thit b: char device hay block device Ti khon ngi dng Tn thit b Major v minor number Mount ponint
64 Lp trnh nhng ARM-Linux Kim tra danh sch thit b Kim tra danh s|ch c|c nhm thit b G lnh cat /proc/devices
65 Lp trnh nhng ARM-Linux C ch lp trnh giao tip thit b C ch lp trnh S dng c|c h{m v{o ra file open close read write S dng h{m iu khin v{o ra: ioctl
66 Lp trnh nhng ARM-Linux 2.2. Lp trnh iu khin led n S dng led driver ~ c 4 led n, ghp ni qua GPB5,6,7,8 iu khin led on/off, to hiu ng: nhp nh|y, chy ui, Cn s dng h{m tr (delay): sleep, usleep (th vin sys/time.h) 67 Lp trnh nhng ARM-Linux M hnh giao tip iu khin led Phn mm ng dng Device files Device Drivers Phn cng leds.c /dev/leds Mini2440_leds.c GPIO Port Hm giao tip: open close ioctl 68 Lp trnh nhng ARM-Linux Lp trnh iu khin led n fd=open(/dev/leds,0) fd: file id /dev/leds: device file 0: WRITE_ONLY ioctl(fd, on, led_no) Ioctl: IO control iu khin bt/tt led n c s hiu led_no Driver cho led n: linux-2.6.32.2/drivers/char/mini2440_leds.c
69 Lp trnh nhng ARM-Linux M ngun minh ha iu khin led n 70 Lp trnh nhng ARM-Linux 2.3. Lp trnh giao tip nt bm Giao tip qua driver ~ c 71 Lp trnh nhng ARM-Linux M hnh giao tip iu khin nt bm Phn mm ng dng Device files Device Drivers Phn cng Buttons.c /dev/buttons Mini2440_buttons.c GPIO Port Hm giao tip: open close read 72 Lp trnh nhng ARM-Linux Lp trnh ghp ni nt bm buttons_fd=open(/dev/buttons,0) buttons_fd: file id /dev/buttons: device file read(buttons_fd,current_buttons,sizeof(curren t_buttons) c trng th|i c|c nt bm close(buttons_fd): ng file M~ ngun driver cho nt bm linux- 2.6.32.2/drivers/char/mini2440_buttons.c
73 Lp trnh nhng ARM-Linux M ngun chng trnh c nt bm 74 Lp trnh nhng ARM-Linux 2.4. Lp trnh giao tip GPIO m rng 2 c|ch s dng giao tip gpio (t Linux user space) Cch 1: Vit gpio driver (trn khng gian nh}n h iu h{nh, kernel space), giao tip qua driver n{y. (V d vi led, button ~ l{m) Cch 2: giao tip c|c ch}n gpio trc tip t khng gian ngi dng (user space) da trn API th vin gpiolib cung cp. Linux cung cp giao din GPIO sysfs cho php thao t|c vi bt k ch}n GPIO t userspace.
75 Lp trnh nhng ARM-Linux Lp trnh giao tip GPIO m rng Tt c c|c giao din iu khin GPIO thng qua sysfs nm trong th mc /sys/class/gpio Kim tra bng lnh: ls /sys/class/gpio
76 Lp trnh nhng ARM-Linux Lp trnh giao tip GPIO m rng Giao din n{y cung cp c|c files iu khin sau }y: 77 Lp trnh nhng ARM-Linux Lp trnh giao tip GPIO m rng V d minh ha
Chi tit xem b{i vit: https://sites.google.com/site/embedded247/ddcour se/giao-tiep-gpio-tu-userspace-1 Cu hnh chn GPF5 (micro2440) output, v xut gi tr 0 ra chn ny echo 165 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio165/direction echo 0 > /sys/class/gpio/gpio165/value 78 Lp trnh nhng ARM-Linux Tho lun 79 Lp trnh nhng ARM-Linux Chng 3
Lp trnh vo ra nng cao 80 Lp trnh nhng ARM-Linux Mc tiu chng 3 Sau khi kt thc chng n{y, sinh vin c th Nm c chun RS232 Lp trnh giao tip chun RS232 trn kit nhng Micro2440 Nm c chun giao tip USB Lp trnh ghp ni USB Joystick qua cng USB Lp trnh giao tip ADC 81 Lp trnh nhng ARM-Linux Ni dung bi hc 3.1. Gii thiu chun RS232 3.2. Lp trnh giao tip chun RS232 3.3. Gii thiu chun USB 3.4. Lp trnh giao tip USB Joystick 3.5. Lp trnh giao tip ADC
82 Lp trnh nhng ARM-Linux 3.1. Gii thiu chun RS232 Mc in |p ng truyn Chun u ni trn m|y tnh PC Khun dng khung truyn Tc truyn Kch bn truyn 83 Lp trnh nhng ARM-Linux Chun RS232 Mc in |p ng truyn (Chun RS-232C)
84 Lp trnh nhng ARM-Linux Chun RS232 Chun u ni trn PC UART UART UART (Universal Asynchronous receiver/transmitter) 85 Lp trnh nhng ARM-Linux Chun RS232 Chun u ni trn PC Chn 1 (DCD-Data Carrier Detect): ph|t hin tn hiu mang d liu Chn 2 (RxD-Receive Data): nhn d liu Chn 3 (TxD-Transmit Data): truyn d liu Chn 4 (DTR-Data Terminal Ready): u cui d liu sn s{ng Ch}n 5 (Signal Ground): t ca tn hiu Chn 6 (DSR-Data Set Ready): d liu sn s{ng Chn 7 (RTS-Request To Send): yu cu gi Chn 8 (CTS-Clear To Send): Xa gi Chn 9 (RI-Ring Indicate): bo chung
86 Lp trnh nhng ARM-Linux Chun RS232 Khun dng khung truyn PC truyn nhn d liu qua cng ni tip RS-232 thc hin theo kiu khng ng b (Asynchronous) Khung truyn gm 4 th{nh phn 1 Start bit (Mc logic 0): bt u mt gi tin, ng b xung nhp clock gia DTE v{ DCE Data (5,6,7,8 bit): d liu cn truyn 1 parity bit (chn (even), l (odd), mark, space): bit cho php kim tra li Stop bit (1 hoc 2 bit): kt thc mt gi tin 87 Lp trnh nhng ARM-Linux Chun RS232 Kch bn truyn Khng c bt tay (none-handshaking): m|y thu c kh nng c c|c k t thu trc khi m|y ph|t truyn k t tip theo
Kt ni khng cn bt tay gia hai thit b
(cng mc in p) 88 Lp trnh nhng ARM-Linux Chun RS232 Kch bn truyn
Ghp ni khng bt tay gia hai thit b (Khc nhau v mc in p) 89 Lp trnh nhng ARM-Linux 3.2. Lp trnh giao tip chun RS232 Khi to: Khai b|o th vin Bc 1: M cng Bc 2: Thit lp tham s Bc 3: c, ghi cng Bc 4: ng cng 90 Lp trnh nhng ARM-Linux Khai bo th vin #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> // UNIX standard function #include <fcntl.h> // File control definitions #include <errno.h> // Error number definitions #include <termios.h> // POSIX terminal control #include <time.h> // time calls
91 Lp trnh nhng ARM-Linux Bc 1: M cng S dng lnh m file int fd = open ("/dev/ttySAC0", O_RDWR); Fd >0 nu m file th{nh cng Fd<0 nu m file tht bi 92 Lp trnh nhng ARM-Linux Bc 2: Thit lp tham s S dng cu trc termios struct termios port_settings; Thit lp tham s (9600, 8, n, 1) cfsetispeed(&port_settings, B9600); cfsetospeed(&port_settings, B9600); port_settings.c_cflag &= ~PARENB; port_settings.c_cflag &= ~CSTOPB; port_settings.c_cflag &= ~CSIZE; port_settings.c_cflag |= CS8; tcsetattr(fd, TCSANOW, &port_settings);
93 Lp trnh nhng ARM-Linux Bc 3: c, ghi cng c cng: s dng lnh c file n=read(fd,&result,sizeof(result)); N: s k t c c Result: cha kt qu Ghi cng: s dng lnh ghi file n=write(fd,Hello World\r",12); N:s k t ~ ghi Fd: file id (c c t thao t|c m file th{nh cng) 94 Lp trnh nhng ARM-Linux Bc 4: ng cng ng cng: s dng lnh ng file close (fd); Fd: file ID (c c t thao t|c m file th{nh cng)
95 Lp trnh nhng ARM-Linux Demo 96 Lp trnh nhng ARM-Linux 3.3. Gii thiu chun USB Nm 1995: USB 1.0 Tc Low-Speed: 1.5 Mbps Tc ti a (Full-Speed): 12 Mbps Nm 1998: USB 1.1 (Sa li ca USB 1.0) Tc ti a (Full-Speed): 12 Mbps Nm 2001: USB 2.0 Tc ti a (High-Speed): 480 Mbps Nm 2008: USB 3.0 Tc ti a (Super-Speed): 4.8 Gbps
97 Lp trnh nhng ARM-Linux Tn hiu chun USB Tn hiu Truyn kiu ni tip Tn hiu trn hai ng D+ v D- l tn hiu vi sai
98 Lp trnh nhng ARM-Linux M hnh bus USB 99 Lp trnh nhng ARM-Linux Vai tr ca cc thnh phn Vai tr ca USB host: Trao i d liu vi c|c thit b ngoi vi iu khin USB bus: Qun l c c|c thit b kt ni v{o ng bus v{ kh nng ca mi thit b : s dng c ch im danh (Enumeration) Ph}n x, qun l lung d liu trn bus, m bo c|c thit b u c c hi trao i d liu Kim tra li: thm c|c m~ kim tra li v{o gi tin cho php ph|t hin li v{ yu cu truyn li gi tin Cung cp ngun in cho tt c c|c thit b
100 Lp trnh nhng ARM-Linux Vai tr ca cc thnh phn Vai tr ca thit b ngoi vi Trao i d liu vi host Ph|t hin c|c gi tin hay yu cu (request) c gi ti thit b x l ph hp Kim tra li: tng t nh Host, c|c thit b ngoi vi cng phi chn thm c|c bit kim tra li v{o gi tin gi i Qun l ngun in: c|c thit b c th s dng ngun in ngo{i hay ngun t bus. Nu s dng ngun t bus, phi chuyn sang ch tit kim in nng. 101 Lp trnh nhng ARM-Linux Endpoint & pipes Mi qu| trnh truyn nhn d liu bao gm mt hay nhiu giao dch (transactions), mi giao dch gm mt hay nhiu packets -> hiu c c|c giao dch, c|c packet v{ ni dung ca chng -> cn tm hiu hai kh|i nim Endpoint v Pipes 102 Lp trnh nhng ARM-Linux Endpoint Endpoint ca thit b: Ch c thit b mi c Endpoint, Host khng c Endpoint Endpoint l{ b m (gi, nhn) C|c Endpoint c |nh a ch v{ x|c nh hng In Endpoint: b m gi Out Endpoint: b m nhn Tt c c|c thit b u phi c Endpoint 0, }y l{ endpoint mc nh gi c|c thng tin iu khin 103 Lp trnh nhng ARM-Linux Pipes Pipes: kt ni Endpoint ca thit b ti Host Phi thit lp pipe trc khi mun trao i d liu Host thit lp pipe trong qu| trnh im danh (Enumeration) C|c Pipe s c hy khi thit b ngt kt ni khi bus Tt c c|c thit b u c mt ng ng iu khin (control pipe) mc nh s dng Endpoint 0
104 Lp trnh nhng ARM-Linux Device Classes C|c thit b ngoi vi cng chc nng (chut, m|y in, nh flash) c c tnh truyn nhn d liu chung -> H iu h{nh c th cung cp driver chung cho c|c nhm, c|c nh{ sn xut thit b khng cn vit driver ring. C|c nhm thit b ~ c nh ngha Audio Communication devices Human interface (HID) IrDA Bridge Mass Storage Cameras and scanners Video
105 Lp trnh nhng ARM-Linux Qu trnh trao i d liu C|c thit b USB c th trao i d liu vi Host theo 4 kiu ho{n to{n kh|c nhau, c th: Truyn iu khin (control transfer) Truyn ngt (interrupt transfer) Truyn theo khi (bulk transfer) Truyn ng thi (isochronous transfer) 106 Lp trnh nhng ARM-Linux Cc kiu truyn Truyn iu khin: iu khin phn cng, c|c yu cu iu khin c truyn. Chng l{m vic vi mc u tin cao v{ vi kh nng kim so|t li t ng. Tc truyn ln v c n 64 byte trong mt yu cu (request) c th c truyn. Truyn ngt: c|c thit b, cung cp mt lng d liu nh, tun ho{n chng hn nh chut, b{n phm u s dng kiu truyn n{y. H thng s hi theo chu k, chng hn 10ms mt ln xem c c|c d liu mi gi n. 107 Lp trnh nhng ARM-Linux Cc kiu truyn Truyn theo khi: khi c lng d liu ln cn truyn v{ cn kim so|t li truyn nhng li khng c yu cu thc p v thi gian truyn th d liu thng c truyn theo khi. VD: m|y in, m|y qut Truyn ng thi: khi c khi lng d liu ln vi tc d liu ~ c quy nh, v d nh card }m thanh. Theo c|ch truyn n{y mt gi| tr tc x|c nh c duy tr. Vic hiu chnh li khng c thc hin v nhng li truyn l t cng khng g}y nh hng |ng k. 108 Lp trnh nhng ARM-Linux 3.4. Lp trnh giao tip USB Joystick 109 Lp trnh nhng ARM-Linux Cu trc JOYINFO trn Windows Windows nh ngha cu trc JOYINFO lu c|c thng tin v tnh trng c|c nt bm trn Joystick Nt tri, phi Nt ln, xung Cc nt chc nng: 1, 2, 3, 4, L1, L2, R1, R2, Select, Start 110 Lp trnh nhng ARM-Linux Cu trc JOYINFO wXpos wXpos=0 -> nt sang tr|i c bm wXpos=65535 -> nt sang phi c bm wYpos wYpos=0 -> nt ln c bm wYpos=65535 -> nt xung c bm wButtons: mi bit biu din trng th|i ca mt nt chc nng VD: Button 1 -> bit 0, Button 2 -> bit 1 111 Lp trnh nhng ARM-Linux Cu trc js_event trn Linux Linux nh ngha cu trc js_event lu c|c thng tin khi c ph|t sinh s kin (khi to thit b, ngi dng bm nt chc nng, nt chnh hng) nh ngha trong include/linux/joystick.h
112 Lp trnh nhng ARM-Linux Cu trc js_event Ni dung c|c trng d liu Time: nh~n thi gian ph|t sinh s kin Value: gi| tr, ph thuc v{o nt chc nng hay nt chnh hng Nt chc nng: 0/1 Nt chnh hng: -32768 -> 32767 Type: loi s kin Khi to thit b: 0x80 Nt chnh hng: 0x02 Nt chc nng: 0x01 Number: x|c nh nt c nhn 113 Lp trnh nhng ARM-Linux Lp trnh kt ni joystick M file thit b: joystick_fd = open(JOYSTICK_DEVNAME, O_RDONLY | O_NONBLOCK); JOYSTICK_DEVNAME: tn ca file thit b, thng l /dev/input/js0 O_RDONLY | O_NONBLOCK: m file ch c ch NONBLOCK
114 Lp trnh nhng ARM-Linux Lp trnh kt ni joystick c d liu t thit b (khi c pht sinh s kin) bytes = read(joystick_fd, jse, sizeof(*jse)); joystick_fd: con tr file c c khi m file jse: bin cu trc js_event bytes: Tng s file c c, nu s n{y bng kch thc ca cu trc js_event th qu| trnh c th{nh cng 115 Lp trnh nhng ARM-Linux Demo 116 Lp trnh nhng ARM-Linux Kt qu demo C|c s kin khi khi to thit b 117 Lp trnh nhng ARM-Linux Kt qu demo C|c s kin khi ngi dng nhn c|c nt 118 Lp trnh nhng ARM-Linux QT Joystick Demo 119 Lp trnh nhng ARM-Linux 3.5. Lp trnh giao tip ADC Gii thiu ADC Minh ha lp trnh ADC 120 Lp trnh nhng ARM-Linux Gii thiu ADC ADC: Analog to Digital Converter Thng s quan trng ca ADC Di in |p chuyn i ADC 8 bit, 10 bit, 12 bit Bao nhiu knh? ph}n ly 121 Lp trnh nhng ARM-Linux Minh ha lp trnh ADC Khai b|o th vin 122 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <linux/fs.h> #include <errno.h> #include <string.h> Lp trnh nhng ARM-Linux Minh ha lp trnh ADC 123 int main(void){ fprintf(stderr, "press Ctrl-C to stop\n"); int fd = open("/dev/adc", 0); if (fd < 0) { perror("open ADC device:"); return 1; } for(;;) { char buffer[30]; int len = read(fd, buffer, sizeof buffer -1); if (len > 0) { buffer[len] = '\0'; int value = -1; sscanf(buffer, "%d", &value); printf("ADC Value: %d\n", value); } else { perror("read ADC device:"); return 1; } usleep(500* 1000); } close(fd); } Lp trnh nhng ARM-Linux Chng 4
K thut lp trnh nng cao 124 Lp trnh nhng ARM-Linux Mc tiu chng 4 Sau khi kt thc chng n{y, sinh vin c th Nm c kh|i nim tin trnh (process), quan h gia c|c tin trnh Trnh b{y c c ch s dng signal giao tip gia c|c tin trnh Lp trnh s dng k thut a tin trnh Trnh b{y kh|i nim lung Lp trnh ng dng a lung
125 Lp trnh nhng ARM-Linux Ni dung 4.1. Tin trnh (process) 4.2. C ch s dng signal 4.3. Lp trnh giao tip a tin trnh 4.4. Lung (thread) 4.5. Lp trnh ng dng a lung
126 Lp trnh nhng ARM-Linux 4.1. Tin trnh (Process) Kh|i nim tin trnh Lp trnh a tin trnh 127 Lp trnh nhng ARM-Linux Khi nim tin trnh Tin trnh c to ra khi ta thc thi mt chng trnh a tin trnh cho php nhiu chng trnh cng thc thi v{ chia s d liu vi nhau C|c tham s ca mt tin trnh PID (Process ID): s hiu tin trnh PPID (Parent Process ID): s hiu tin trnh cha Command: c}u lnh c gi thc thi tin trnh ls e o pid,ppid,command 128 Lp trnh nhng ARM-Linux PID, PPID Ly v PID: s dng hm getpid() Ly v PPID: s dng hm getppid() Hm getpid() v getppid() tr gi tr kiu pid_t (bn cht l kiu int) 129 Lp trnh nhng ARM-Linux Dng tin trnh C|ch 1: S dng t hp phm Ctrl + C C|ch 2: S dng shell command kill PID
130 Lp trnh nhng ARM-Linux To tin trnh mi Cch 1: s dng h{m system
131 Lp trnh nhng ARM-Linux To tin trnh mi Cch 2: s dng h{m fork v{ exec 132 Lp trnh nhng ARM-Linux 4.2. C ch s dng signal Signal l{ c ch cho php giao tip gia c|c tin trnh Signal l{ c ch khng ng b Khi tin trnh nhn c signal, tin trnh phi x l signal ngay lp tc Linux h tr 32 SIGNAL
133 Lp trnh nhng ARM-Linux Danh sch signal thng dng Kiu SIGNAL L do gi SIGNAL SIGHUP Bo cho chng trnh khi thot khi terminal SIGINT Khi ngi dng nhn Ctrl + C tt chng trnh SIGILL Khi chng trnh chy lnh khng hp l SIGABRT Khi chng trnh nhn c lnh abort SIGKILL Khi chng trnh nhn c lnh kill (ng chng trnh) SIGUSR1 Ty bin theo ng dng SIGUSR2 Ty bin theo chng trnh 134 Lp trnh nhng ARM-Linux Gi SIGNAL ti process Cch 1: s dng shell command kill [-SIGNAL_TYPE] PID Cch 2: s dng h{m kill trong chng trnh, cho php process n{y gi signal ti process kh|c kill(PID, SIGNAL_TYPE) 135 Lp trnh nhng ARM-Linux 4.3. Lp trnh giao tip a tin trnh C ch: Tin trnh chnh to ra c|c tin trnh con s dng lnh fork v{ exec S dng c ch signal trao i tn hiu gia c|c tin trnh 136 Lp trnh nhng ARM-Linux V d Bt v{ x l signal c gi ti mt tin trnh (SIGTERM v SIGINT)
137 Lp trnh nhng ARM-Linux killsignal.c
138 Lp trnh nhng ARM-Linux V d: killsignal.c (tip)
139 Lp trnh nhng ARM-Linux Demo 140 Lp trnh nhng ARM-Linux 4.4. Lung (thread) Mt chng trnh mc nh chy mt lung -> lung chnh Lung chnh c th to ra c|c lung kh|c, c|c lung s chy ng thi -> tng tc chng trnh C|c lung chia s khng gian nh, truy xut file v{ cc ti nguyn khc Tham s ca mt lung: thread ID: s hiu lung (kiu d liu pthread_t)
141 Lp trnh nhng ARM-Linux 4.5. Lp trnh x l a lung To lung Truyn tham s cho lung Nhn gi| tr tr v t lung Tt lung 142 Lp trnh nhng ARM-Linux To lung Khai b|o th vin: pthread.h H{m to lung: pthread_create thread: thread id attr: cc thuc tnh ca lung, mc nh NULL start_routine: hm thc thi trong lung arg: cc tham s truyn cho lung Bin dch chng trnh: gcc o multithread multithread.c -pthread 143 Lp trnh nhng ARM-Linux M ngun to lung 144 Lp trnh nhng ARM-Linux Truyn tham s cho lung Khai bo cu trc d liu cha d liu cn truyn cho lung. V d: struct arg { //Ky tu can in char character; //So lan can in int count; }; Truyn d liu cho lung khi to lung qua tham s arg Chng trnh con thc thi lung nhn tham s v v x l 145 Lp trnh nhng ARM-Linux M ngun truyn tham s cho lung 146 Lp trnh nhng ARM-Linux Tt lung S dng h{m pthread_cancel: thread: nhn tham s thread id ca lung mun tt 147 Lp trnh nhng ARM-Linux M ngun tt lung 148 Lp trnh nhng ARM-Linux Tho lun 149 Lp trnh nhng ARM-Linux Chng 5
Lp trnh device driver 150 Lp trnh nhng ARM-Linux Ni dung 5.1. Gii thiu v Kernel Module 5.2. C ch x}y dng Device Driver 5.3. Tm hiu, ty chnh mt s driver ~ c 5.4. X}y dng usb device driver
151 Lp trnh nhng ARM-Linux 5.1. Kernel Module Hot ng trn Kernel Space, c th truy xut ti c|c t{i nguyn ca h thng Kernel Module cho php thm mi c|c module mt c|ch linh hot, tr|nh vic phi bin dch li nh}n h iu h{nh Kernel Module l{ c ch hu hiu ph|t trin c|c device driver Xem danh s|ch c|c module ang chy: lsmod 152 Lp trnh nhng ARM-Linux Kernel Module C|c bc thm mt kernel module v{o h thng Vit m~ ngun: ch s dng c|c th vin c cung cp bi kernel, khng s dng c c|c th vin bn ngoi Bin dch m~ ngun module C{i t module: dng lnh insmod Tn_Module.ko G module: dng lnh rmmod Tn_Module Xem c|c thng tin log: s dng System Log Viewer 153 Lp trnh nhng ARM-Linux M ngun kernel Module 154 Lp trnh nhng ARM-Linux Kernel Module Makefile obj-m += hello.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
155 Lp trnh nhng ARM-Linux Lin kt Kernel Module
156 Lp trnh nhng ARM-Linux 5.2. Device Driver Thm c|c device driver theo c ch s dng Kernel Module C|c thao t|c thm driver v{o h thng Vit m~ ngun (cu trc tng t kernel Module). ng k Major ID Bin dch m~ ngun C{i t s dng lnh insmod S dng lnh mknod to device file trong /dev mknod [options] NAME Type [Major Minor]
157 Lp trnh nhng ARM-Linux V d: Hello Driver
158 Lp trnh nhng ARM-Linux Demo 159 Lp trnh nhng ARM-Linux V d V d 1: Chnh sa driver sn c Chnh sa driver iu khin led, b sung thm hm write iu khin trc tip tt c c|c led n trn KIT V d 2: To driver mi theo c ch kernel module 160 Lp trnh nhng ARM-Linux Tho lun 161 Lp trnh nhng ARM-Linux Bi s 6
Lp trnh nn tng QT 162 Lp trnh nhng ARM-Linux Mc tiu bi hc s 6 Sau khi kt thc b{i hc n{y, sinh vin c th Nm c c|c vn c bn, c trng ca nn tng Qt C{i t Qt Creator (Qt SDK) trn m|y ph|t trin (Ubuntu) L{m quen vi lp trnh ng dng giao din ha s dng nn tng Qt C{i t Qt Everywhere ph|t trin ng dng cho nn tng Arm Embedded Linux 163 Lp trnh nhng ARM-Linux Ni dung bi hc 6.1. Gii thiu QT 6.2. C{i t mi trng ph|t trin Qt 6.3. L{m quen vi lp trnh QT 6.4. C{i t Qt Everywhere (Qt Embedded)
164 Lp trnh nhng ARM-Linux 6.1. Gii thiu Qt Qt Development Frameworks c s|ng lp nm 1994 bi TrollTech 2008: TrollTech s|p nhp v{o Nokia Qt l{ mt Framework ph|t trin ng dng a nn tng (desktop, mobile, embedded). H tr c|c nn tng: Windows, Linux, Embedded Linux, Win CE, Symbian, Maemo
165 Lp trnh nhng ARM-Linux Gii thiu QT Qt cho php vit ng dng mt ln v{ bin dch cho trn nhiu nn tng h iu h{nh khc nhau m khng phi vit li m~. Tuy nhin, m~ ngun cn c bin dch trn nn tng m{ mun ng dng c thc thi. Lp trnh Qt theo chun C++. 166 Lp trnh nhng ARM-Linux Gii thiu QT Qt Framework bao gm: a cross-platform class library (Th vin c|c lp hng i tng) integrated development tools (C|c cng c ph|t trin tch hp) a cross-platform IDE. (Mi trng ph|t trin ng dng) Tham kho: qt.nokia.com; qtcentre.org 167 Lp trnh nhng ARM-Linux QT c s dng rng ri 168 Lp trnh nhng ARM-Linux Kin trc Qt 169 Lp trnh nhng ARM-Linux 6.2. Ci t Qt SDK C{i t Qt SDK trn m|y ph|t trin (Linux, Windows, MacOS) File c{i t qt-sdk-linux-x86-opensource-2010.05.1.bin (http://qt.nokia.com/downloads) Thc thi file c{i t: $ ./qt-sdk-linux-x86-opensource-2010.05.1.bin i qu| trnh c{i t din ra th{nh cng, mc nh th mc c{i t cha ti $HOME/qtsdk-2010.01/qt/bin 170 Lp trnh nhng ARM-Linux Ci t Qt SDK Sau khi c{i t xong Qt SDK, cng c Qt Creator cho php ph|t trin ng dng vi la chn mc nh bin dch trn m|y tnh Linux. bin dch cho ng dng thc thi trn KIT FriendlyArm (Embedded Linux) cn c{i t Qt Everywhere 171 Lp trnh nhng ARM-Linux 6.3. Lm quen vi lp trnh QT S dng mi trng ph|t trin Qt Creator (IDE) Chng trnh HelloQt C ch Signals/Slot Qun l layout 172 Lp trnh nhng ARM-Linux Mi trng pht trin Qt Creator IDE 173 Lp trnh nhng ARM-Linux Cc thnh phn Qt Creator 174 Lp trnh nhng ARM-Linux Cc iu khin (widgets) c bn QLabel QPushButton QLineEdit QTextEdit QSpinBox QComboBox Qslider V.v
175 Lp trnh nhng ARM-Linux 176 Chng trnh HelloQt #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); return app.exec(); } To project HelloQt Trong file main.c b sung on m~: Bin dch, chy chng trnh: Lp trnh nhng ARM-Linux 177 Chng trnh HelloQt Gii thch ? Sa on m~ vi HTML style #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); //QLabel *label = new QLabel("Hello Qt!"); QLabel *label = new QLabel("<h2><i>Hello</i> " "<font color=red>Qt!</font></h2>"); label->show(); return app.exec(); } Lp trnh nhng ARM-Linux C ch event handler X l c|c s kin (s kin tng t|c ngi dng, s kin ca h thng) Cho php to c|c kt ni (connections) gia s kin (signals) vi h{m x l (slot) C 2 c|ch to: To t ng (wizard) To bng tay (manual, hand-code)
178 C ch signals - slot Lp trnh nhng ARM-Linux To bng code (dng phng thc Qobject::connect) 179 Minh ha c ch signals/slot Lp trnh nhng ARM-Linux Minh ha c ch Signals/Slot To bng code connect(sender, SIGNAL(signal), receiver, SLOT(slot)); Trong : sender, receiver l{ con tr Qobjects, signal v{ slot l{ c|c tn h{m khng c tham s. Cc macro SIGNAL() v SLOT() bin i tham s thnh string. VD: ng b gia 2 iu khin slider v{ spinBox
180 Lp trnh nhng ARM-Linux Minh ha c ch Signals/Slot 181 To t ng (wizard): chut phi v{o i tng mun x l s kin, chn Go to slot, tm slot l{ h{m x l s kin tng ng mun dng. V d x l s kin nt bm (QPushButton)
Lp trnh nhng ARM-Linux Qun l layout trong ng dng Qt K thut lay out: Cho php sp xp c|c iu khin (widgets) trn mt form. Kch thc v{ v tr s thay i linh hot khi form thay i kch thc. C c|c kiu lay out: Horizontal lay out Vertical lay out Grid lay out Form lay out 182 Lp trnh nhng ARM-Linux Chng trnh TextFinder X}y dng ng dng TextFinder 183 Lp trnh nhng ARM-Linux Qt Documentations Documentation in Qt Assistant (or QtCreator) Qts examples Qt developer network: http://developer.qt.nokia.com/ Qt Center Forum: http://www.qtcentre.org
184 Lp trnh nhng ARM-Linux 6.4. Ci t Qt Everywhere Bc 1: Ci t QT Embedded (QT Everywhere) (Xem hng dn chi tit km theo) Bc 2: Copy cc file th vin cn thit xung KIT 3 th vin quan trng (VD: copy xung th mc /opt/qte/lib) libQtCore.so.4 libQtGui.so.4 libQtNetwork.so.4 Copy cc fonts vo th mc /opt/qte/lib/fonts Bc 3: Chnh file cu hnh /etc/init.d/rcS, tt Qtopia trnh tranh chp
185 Lp trnh nhng ARM-Linux Cu hnh trnh dch Qmake cho Kit Bc 4: To cu hnh bin dch cho Mini2440, tr ti Qmake ~ bin dch c trn 186 Lp trnh nhng ARM-Linux Cu hnh trnh dch Qmake cho Kit Bc 5: Dch chng trnh QT cho KIT Chn ng b bin dch Qmake cho QT Embedded 187 Lp trnh nhng ARM-Linux Tho lun 188 Lp trnh nhng ARM-Linux Bi s 7
Lp trnh mng trn Linux nhng 189 Lp trnh nhng ARM-Linux Mc tiu bi hc s 7 Sau khi kt thc b{i hc n{y, hc vin c th X}y dng ng dng giao din, s dng c|c iu khin (widgets) Vn dng k thut qun l layout sp xp c|c iu khin trn form Vn dng c ch x l s kin (signal/slot) Lp trnh socket trn nn Linux nhng Lp trnh mng vi Qt
190 Lp trnh nhng ARM-Linux Ni dung bi hc 7.1. Lp trnh socket trn Linux nhng 7.2. Th vin lp trnh mng trn Qt 7.3. Lp trnh ng dng ChatRoom 7.4. Lp trnh ng dng gi/nhn nh qua socket
191 Lp trnh nhng ARM-Linux 7.1. Lp trnh Socket trn Linux Gii thiu lp trnh socket M hnh lp trnh Minh ha 192 Lp trnh nhng ARM-Linux Gii thiu lp trnh socket Socket: Kt ni u cui gia 2 tin trnh/2 m|y qua mng (m hnh client/server) Tin trnh client kt ni n tin trnh server yu cu trao i d liu Client cn bit v a ch v{ s tn ti ca server, trong khi server khng cn bit v client cho n khi n c kt ni n. Mi khi thit lp kt ni, c 2 bn c th gi v{ nhn d liu Lin h nh kt ni trong mt cuc gi in thoi
193 Lp trnh nhng ARM-Linux Gii thiu lp trnh socket C|c h thng (Windows, Linux, ) u cung cp c|c h{m h thng lp trnh socket C 2 loi socket s dng rng r~i: Stream socket Datagram socket Stream sockets: Da trn giao thc TCP (Tranmission Control Protocol), l{ giao thc hng lung (stream oriented). Datagram sockets: Da trn giao thc UDP (User Datagram Protocol), l{ giao thc hng thng ip (message oriented) 194 Lp trnh nhng ARM-Linux M hnh lp trnh socket M hnh lp trnh socket TCP gia 2 tin trnh client/server 195 Lp trnh nhng ARM-Linux Chng trnh minh ha 2 tin trnh (M~ ngun tham kho): server.c client.c Bin dch v{ chy 2 chng trnh n{y (trn cng mt m|y local host, hoc 2 m|y ring bit kt ni mng)
Lp trnh x l nh trn nn nhng 202 Lp trnh nhng ARM-Linux Ni dung 8.1. Tng quan v x l nh 8.2. Gii thiu OpenCV 8.3. C|c php bin i nh c bn 203 Lp trnh nhng ARM-Linux 8.1. Tng quan x l nh Khi nim x l nh N}ng cao cht lng hnh nh theo mt tiu ch n{o (Cm nhn ca con ngi) Ph}n tch nh thu c c|c thng tin c trng gip cho vic ph}n loi nh (image classification), nhn dng nh (image recognition). Hiu nh u v{o c nhng m t v nh mc cao hn, s}u hn.
Lp trnh nhng ARM-Linux M hnh h thng x l nh Camera Sensor Thu nhn nh S ha Phn tch nh i snh Nhn dng H quyt nh Lu tr Lu tr Lp trnh nhng ARM-Linux Cc bi ton x l nh Image Acquisition Image Enhancement Image Restoration Image Compression Image Segmentation Representation & Description Recognition & Interpretation Knowledge Base Cc k thut tin x l-mc thp Image Coding Morphological Image Processing Wavelet Analysis X l mc cao Lp trnh nhng ARM-Linux Cc bi ton x l nh Thu nhn nh, s ha nh (image aquisition) H thng chp nh, tn hiu nh H thng s ha nh: C|c phng ph|p ly mu, lng t ha Ci thin nh, khi phc nh, lc nhiu (tin x l image pre-processing) C|c php x l im nh C|c php x l trn min khng gian C|c php x l trn min tn s 2 0 7 Lp trnh nhng ARM-Linux Cc bi ton x l nh Phn tch nh Trch chn c trng (feature extraction) Biu din, m t nh (image representation, image description) Ph}n lp nh (image classification) Nhn dng nh (image recognition)
M ha, nn nh C|c phng ph|p nn nh, c|c chun nn nh Truyn thng nh: c|c k thut streaming 2 0 8 Lp trnh nhng ARM-Linux ng dng x l nh Lp trnh nhng ARM-Linux ng dng tng cng cht lng Lp trnh nhng ARM-Linux Hiu ng panorama Lp trnh nhng ARM-Linux ng dng nhn dng khun mt Lp trnh nhng ARM-Linux Nhn dng ngi chuyn ng Lp trnh nhng ARM-Linux Nhn dng i tng chuyn ng Lp trnh nhng ARM-Linux Nhn dng ch vit tay Lp trnh nhng ARM-Linux Nhn dng vn tay Lp trnh nhng ARM-Linux Nhn dng mng mt (iris) Lp trnh nhng ARM-Linux M hnh ha 3D & AR (Augmented Reality) KINECT Lp trnh nhng ARM-Linux 8.2. Gii thiu OpenCV OpenCV: Open Computer Vision Library Tp hp c|c h{m C v{ mt s lp C++ gii quyt c|c b{i to|n, thut to|n c bn trong x l nh a nn tng, ~ porting c trn rt nhiu nn tng kh|c nhau: Windows, Linux, Embedded Linux, iOS, Android
http://opencvlibrary.sourceforge.net Lp trnh nhng ARM-Linux Th vin OpenCV Lp trnh nhng ARM-Linux Kin trc th vin OpenCV Lp trnh nhng ARM-Linux Kin trc th vin OpenCV CV: cha c|c h{m c bn v{ n}ng cao thc thi c|c b{i to|n th gi|c m|y (computer vision) ML (Machine Learning): th vin hc m|y vi c|c cng c ph}n lp (classifier) v{ ph}n cm (clustering). HighGUI: c|c h{m v{o ra v{ c|c h{m lu tr, np v{ hin th nh v{ video CXCore: cha c|c kiu d liu c bn, mt s thut to|n c bn v{ c|c h{m v, c h tr XML
Lp trnh nhng ARM-Linux Ci t th vin OpenCV Bc 1: C{i t th vin OpenCV trn m|y host (Linux Desktop) Bc 2: Bin dch cho, c{i t th vin OpenCV bin dch cho c|c ng dng trn KIT Chi tit: Xem t{i liu hng dn c{i t
Lp trnh nhng ARM-Linux Tch hp OpenCV v QT Khai b|o trong file .pro ca d |n QT: thm c|c dng lnh sau v{o cui file .pro Lp trnh nhng ARM-Linux Tch hp OpenCV v QT Khai b|o c|c th vin s c s dng: ng dng linh hot, to file global.h cha include ti c|c th vin ca OpenCV Lp trnh nhng ARM-Linux 226 c nh v hin th Cc kiu d liu c bn trong OpenCV cvArr cvMat IplImage CvCapture Lp trnh nhng ARM-Linux c nh v hin th Hm c nh: cvLoadImage
Tham s u v{o: ng dn ti file nh Tham s u ra: d liu nh lu theo kiu d liu con tr ca IplImage V d: IplImage* img = cvLoadImage("/home/oto.jpeg" );
Lp trnh nhng ARM-Linux Kt ni Camera H{m m webcam: CvCapture* capture=cvCreateCameraCapture(0) Hm m file video: Lp trnh nhng ARM-Linux 229 Kt ni Camera Bc 1: m kt ni vi Camera mc nh CvCapture* camera = cvCreateCameraCapture(0); Bc 2: ly v tng Frame nh ca camera IplImage* preImage=cvQueryFrame(camera); Bc 3: gii phng i tng camera cvReleaseCapture(&camera);
Lp trnh nhng ARM-Linux 230 8.3. Cc php bin i c bn 8.3.1. Tm hiu cch thc biu din nh 8.3.2. Bin i nh mu sang nh a mc xm 8.3.3. Xy dng phn b Histogram ca nh 8.3.4. Lp trnh dn tng phn 8.3.5. Lp trnh cn bng tng phn 8.3.6. Bin i nh a mc xm sang nh nh phn Lp trnh nhng ARM-Linux 8.3.1. Cch thc biu din nh Khi nim nh s: l{ nh thu c t nh lin tc bng php ly mu v{ lng t ha
pixel Gray level Original picture Digital image f(x, y) I[i, j] or I[x, y] x y Lp trnh nhng ARM-Linux nh s Mt nh s thng c biu din nh mt ma trn c|c im nh Trong mi im nh c th c biu din bng 1 bit (nh nh ph}n) 8 bit (nh a mc x|m) 16, 24 bit (nh m{u)
Lp trnh nhng ARM-Linux Cch thc biu din nh nh mu (Color image) Cha thng tin mu ca nh Khng gian mu thng s dng: RGB, CMYK nh RGB 3 knh mu, mi knh s dng 8 bit nh a mc xm (Grayscale image) nh a mc xm l nh c s chuyn dn mc xm t trng sang en. S dng 8 bit biu din mc xm nh nh phn (Binary image) Ch c hai mu en, trng (tng ng gi tr 1,0) 233 Lp trnh nhng ARM-Linux 8.3.2. Chuyn nh mu -> a mc xm S dng cng thc:
Gray scale= 0.2989*R+ 0.5870*G + 0.1140*B; 234 Lp trnh nhng ARM-Linux Chuyn nh mu -> a mc xm Hm chuyn nh mu sang nh a mc xm: Bc 1: To 1 nh trng (cha c d liu) nh dng nh a mc xm IplImage *grayimage = cvCreateImage( cvSize( colorimg- >width, colorimg->height ), IPL_DEPTH_8U, 1 ); Bc 2: Chuyn i nh mu sang a mc xm cvCvtColor( img, grayimage, CV_RGB2GRAY ); 235 Lp trnh nhng ARM-Linux Demo chuyn sang nh a mc xm Lp trnh nhng ARM-Linux 8.3.3. Histogram Biu ny n gin cho chng ta bit s im nh (pixel) trong mt nh a mc xm c mt gi tr mc xm tng ng. Thng s: s bins (=256 vi nh a mc xm) 237 Lp trnh nhng ARM-Linux Histogram nh ti 238 Lp trnh nhng ARM-Linux Histogram nh sng 239 Lp trnh nhng ARM-Linux Hm tnh Histogram Cu trc CvHistogram: lu c|c thng tin v ph}n b Histogram ca nh
Lp trnh nhng ARM-Linux Hm tnh Histogram Bc 1: S dng h{m cvCreateHist khi to cu trc CvHistogram chun b cha kt qu Dims: s chiu ca Histogram Sizes: s lng bins Type: nh dng d liu (thng s dng CV_HIST_ARRAY) Ranges: Di c|c khong gi| tr tnh Histogram Lp trnh nhng ARM-Linux Hm tnh Histogram Bc 2: Tnh Histogram s dng h{m cvCalcHist Image: nh cn tnh Histogram Hist: lu kt qu tnh Histogram Accumulate: ty chn tch ly, cho php tnh Histogram t nhiu nh Mask: x|c nh phm vi c|c pixel s c s dng tnh Histogram, mc nh tnh to{n nh Lp trnh nhng ARM-Linux Hm tnh Histogram Bc 3: V ph}n b Histogram Bc 4: Gii phng b nh s dng h{m cvClearHist Lp trnh nhng ARM-Linux Demo tnh Histogram ca nh Lp trnh nhng ARM-Linux 8.3.4. Dn tng phn y l mt k thut tng cng cht lng nh thng dng, n c tc dng lm tng tng phn ca nh bng cch gin di ga tr mc xm ca nh. Cc bc thc hin Tm ra gii hn mc xm nh nht (a) v ln nht (b) ca nh. Vi nh a mc xm thng a=0 v b=255. Tm gi tr mc xm nh nht (c) v ln nht (d) trong cc im nh Xc nh gi tr mc xm mi theo cng thc
245 Lp trnh nhng ARM-Linux Dn tng phn 246 nh trc v sau khi tin hnh dn tng phn Lp trnh nhng ARM-Linux 8.3.5. Cn bng Histogram Cn bng histogram l mt phng php thay i tng phn ca nh bng cch thay i lc phn b mc xm ca chng. Mc ch lm thay i biu phn b mc xm t phn b ban u sang s phn b hng ti u. Tc dng nhm pht hin nhng i tng bi che khut trong nh ban u. Php bin i ny rt c ngha i vi nhng bc nh chp trong bng m, i tng thng b m, hay b che khut bi bng ti, p dng cn bng histogram c th lm ni r i tng hn.
247 Lp trnh nhng ARM-Linux Cn bng Histogram Cng thc thc hin: b k = (b max b min ) Trong b min , b max l nhng gi tr c chn, p i l xc sut xut hin gi tr mc xm i trong nh ban u, vi i [a min , a max ]
248 Lp trnh nhng ARM-Linux Hm cn bng Histogram S dng h{m cvEqualizeHist Src: ma trn nh gc Dst: ma trn nh sau khi ~ c}n bng Histogram Lp trnh nhng ARM-Linux Demo cn bng Histogram Lp trnh nhng ARM-Linux 8.3.6. Chuyn sang nh nh phn Chuyn i da trn phn ngng Phn ngng c nh (fixed threshold): s dng khi Histogram phn b r rng hai vng sng, ti vi hai nh r rt
251 Lp trnh nhng ARM-Linux Chuyn sang nh nh phn Phn ngng thch nghi (adaptive threshold) Trong trng hp lc mc xm ca nh c ti >=3 nh chp, v d trong nh di y tng ng vi s im nh c gi tr mc xm tng ng l 50, 110 v 180. 252 Lp trnh nhng ARM-Linux Chuyn sang nh nh phn Phn ngng thch nghi: S dng ngng ng cho cc im nh khc nhau K thut ny cho php chng ta c th iu tit, thch nghi vi s thay i v iu kin sng ca nh v d nh nh c s dng cc hiu ng ri sng (illumination) hay bng(shadow).
253 Lp trnh nhng ARM-Linux Chuyn sang nh nh phn 254 Kt qu (S dng ngng cng) Kt qu (S dng ngng thch nghi) Lp trnh nhng ARM-Linux Hm chuyn sang nh nh phn Phn ngng cng Src: nh ban u, dst: nh kt qu Threshold: ngng c chn maxValue: gi| tr ln nht thresholdType: kiu ph}n ngng Lp trnh nhng ARM-Linux Hm chuyn sang nh nh phn Phn ngng thch nghi Src: nh ban u, dst: nh kt qu maxValue: gi| tr ln nht adaptiveMethod: phng ph|p tnh ngng thch nghi (CV_ADAPTIVE_THRESH_MEAN_C hay CV_ADAPTIVE_THRESH_GAUSSIAN_C)
Lp trnh nhng ARM-Linux Demo chuyn sang nh nh phn Lp trnh nhng ARM-Linux Ph lc A Cc lnh Linux Lnh hin th thng tin c|c file trong th mc ls al //hin th danh s|ch vi y thng tin Lnh thay i quyn cho mt file hay th mc chmod vd: chmod +x Filename //Cp thm quyn thc thi Lnh xem danh s|ch c|c file thit b ls al /dev Lnh xem tt c c|c tin trnh ang chy ps 258 Lp trnh nhng ARM-Linux Ph lc A Cc lnh Linux Lnh c{i t mt phn mm t kho cha ca Linux sudo apt-get install Tn_gi_phn_mm Xem danh s|ch c|c major id tng ng vi c|c device driver ang active cat /proc/devices Tm kim file cha mt dng text bt k grep vd: grep r Hello . //Tm tt c c|c file v{ hin th ra c|c dng cha t kha //Hello trong th mc hin ti v{ c|c th mc con 259 Lp trnh nhng ARM-Linux Ph lc B Website quan trng http://www.friendlyarm.net //download http://www.thaieasyelec.com/FriendlyARM //mua KIT, download t{i liu http://dientuvietnam.net //forum chia s http://eetimes.com //Tin tc cng ngh http://www.kernel.org //download m kernel http://qt.nokia.com //H tr QT SDK qtforum.org qtcenter.org