1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Lập trình nhúng ARM Linux course 1

117 1,2K 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 117
Dung lượng 3,53 MB

Nội dung

Lập trình nhúng ARM linux course 1 Bài 1. Giới thiệu lập trình nhúng Arm Linux Bài 2. Biên dịch, cài đặt hệ điều hành nhúng Linux Bài 3. Môi trường lập trình nhúng Arm Linux Bài 4. Lập trình vào ra GPIO cơ bản Bài 5. Lập trình vào ra nâng cao Bài 6. Các kỹ thuật lập trình nâng cao Bài 7. Lập trình Qt cơ bản Bài 8. Lập trình Qt nâng cao

Trang 1

Khóa học LẬP TRÌNH NHÚNG ARM-LINUX

GV: Phạm Ngọc Hưng, Phạm Văn Thuận

Bộ môn Kỹ thuật Máy tính Viện CNTT&TT- ĐH BKHN email: hungpn@soict.hut.edu.vn

Website: https://sites.google.com/site/embedded247/

Mục tiêu khóa học

 Sau khi kết thúc khóa học n{y, học viên có thể

• Nắm được kiến trúc một hệ thống nhúng nền tảng ARM + hệ

điều h{nh nhúng Linux

• Tùy biến, biên dịch, c{i đặt hệ điều h{nh nhúng Linux trên

KIT FriendlyArm 2440

• Lập trình giao tiếp v{o ra GPIO cơ bản trên hệ nhúng

Arm-Linux (giao tiếp gpio)

• Lập trình giao tiếp c|c chuẩn v{o ra RS232, USB, ADC

• Sử dụng driver, v{ cơ chế viết driver trên hệ nhúng Linux

• Nắm được c|c kỹ thuật lập trình giao tiếp giữa c|c tiến trình

trên linux, kỹ thuật lập trình đa luồng, lập trình socket

• Lập trình giao diện đồ họa Qt trên Linux

• B{i tập, Case Study

Trang 2

Lập trình nhúng ARM-Linux

Nội dung khóa học

Bài 1 Giới thiệu lập trình nhúng Arm Linux

Bài 2 Biên dịch, c{i đặt hệ điều hành nhúng Linux

Bài 3 Môi trường lập trình nhúng Arm Linux

Bài 4 Lập trình vào ra GPIO cơ bản

Bài 5 Lập trình vào ra nâng cao

Bài 6 C|c kỹ thuật lập trình nâng cao

• Lập trình usb device driver (giao tiếp usb giữa KIT

micro2440 và Keil Arm7 Board)

• Lập trình mạng Qt

Trang 3

Lập trình nhúng ARM-Linux

Tài liệu tham khảo

 Tài liệu tham khảo chính:

• Micro2440 User Manual

• S3C2440 MicroController User’s Manual

• Beginning Linux Programming

• Advanced Linux Programming

• Linux Device Driver

• C++ GUI programming with QT

Trang 4

• Trình b{y được cấu trúc phần cứng v{ c|c chức

năng của hệ nhúng KIT FriendlyArm micro2440

7

Nội dung bài học

1.1 Giới thiệu về lập trình nhúng

1.2 Tổng quan về kiến trúc ARM

1.3 Giới thiệu KIT FriendlyArm micro2440

1.3 Môi trường ph|t triển ứng dụng trên KIT

FriendlyArm

Trang 5

• Thường sử dụng c|c vi điều khiển

hiệu năng tương đối thấp

(8051, ATMega, PIC, ARM7, …)

• Lập trình bằng C, ASM

• Môi trường, công cụ lập trình tùy theo từng dòng vi điều

khiển (CodeVision, AVR Studio, Keil…)

• Phù hợp c|c ứng dụng điều khiển v{o/ra cơ bản, c|c giao

tiếp ngoại vi cơ bản

9

Giới thiệu lập trình nhúng

 Hệ nhúng có hệ điều hành:

• Dựa trên c|c vi điều khiển, vi xử lý (CPU) có hiệu

năng cao (Ví dụ: AVR 32, ARM 9, ARM 11, …)

• Nhiều nền tảng hệ điều h{nh nhúng : uCLinux,

Embedded Linux, Windows CE, …

• Môi trường, công cụ lập trình tùy thuộc nền tảng hệ

điều h{nh: C/C++, QT SDK (Nokia), Net Compact

FrameWork (Microsoft), …

• Ứng dụng nhiều b{i to|n phức tạp: GPS

Tracking/Navigator, Xử lý ảnh, ứng dụng

Client/Server, …

Trang 6

Lập trình nhúng ARM-Linux

Giới thiệu lập trình nhúng

 Các thiết bị di động thông minh:

• Xu hướng công nghệ hiện nay

• Nhiều nền tảng: iOS, Android, Windows Phone,

Symbian OS/Maemo,

• Môi trường, công cụ:

iOS: Xcode + iOS SDK (ngôn ngữ Object-C)

Android: C, Java + Android SDK, Eclipse/Netbean

Windows Phone: SDK + Visual Studio (C#)

• C|c ứng dụng phong phú: Google Play Store, Apple

Store, Windows Market Place, …

11

Giới thiệu lập trình nhúng

 Khóa học n{y hướng tới:

• Lập trình hệ nhúng nền tảng ARM + Linux

• Minh họa trên KIT FriendlyArm micro 2440

• Lập trình C/C++, lập trình giao diện đồ họa QT

 Lý do:

• ARM ? > 90% thị phần thiết bị nhúng,

l{ dòng vi xử lý hiệu năng cao

• Embedded Linux ? M~ nguồn mở, khả năng can thiệp, hiểu

s}u hệ thống Nhiều OS kh|c (iOS, Android) dựa trên Linux

kernel

Trang 7

Lập trình nhúng ARM-Linux

 ARM:

• Advanced RISC Machine

• Acorn RISC Machine

 ARM l{ kiến trúc tập lệnh RISC 32 bit (Instruction Set

Architecture – ISA) ph|t triển bởi Arm Holdings

(1983)

 Phổ biến nhất trong c|c kiến trúc tập lệnh 32 bit

 Được sử dụng rộng r~i trong c|c hệ thống nhúng:

mobile phones, PDAs, tablets, digital media, music

players, calculators, routers, …

 98% of 1 billion mobile phones (in 2005);

13

1.2 Giới thiệu kiến trúc ARM

Kiến trúc ARM

 Kế thừa các đặc điểm của kiến trúc tập lệnh RISC

• Số lượng thanh ghi lớn v{ có kích thước bằng nhau (32bit)

• Kiến trúc tập lệnh RISC, độ d{i từ lệnh 32 bit, khuôn dạng

lệnh 3 địa chỉ to|n hạng

• Chế độ địa chỉ đơn giản (ít chế độ địa chỉ hơn kiến trúc

CISC)

 Phát triển các đặc trưng mới của ARM

• C|c lệnh có kết hợp với lệnh dịch hoặc c|c lệnh logic

• Chế độ địa chỉ tự động tăng-giảm để tối ưu hóa c|c vòng lặp

• Nạp v{ lưu (load/store) nhiều lệnh cùng lúc cho phép n}ng

cao thông lượng

Trang 8

Lập trình nhúng ARM-Linux

Architecture Family

ARMv4 StrongARM , ARM7TDMI , ARM9 TDMI

ARMv5 ARM7EJ , ARM9E , ARM10E , XScale

ARMv6 ARM11 , ARM Cortex-M

ARMv7 ARM Cortex-A, ARM Cortex-M, ARM

Trang 10

Lập trình nhúng ARM-Linux

Kiến trúc ARM và lịch sử phát triển

 ARM được rất nhiều h~ng ph|t triển v{ sản xuất, ở

Việt Nam phổ biến chip ARM của c|c h~ng

• ATMEL: AT91SAM7, AT91SAM9…

4 KByte SRAM nội

Kiến trúc vi điều khiển S3C2440

Trang 11

Lập trình nhúng ARM-Linux

Lõi vi xử lý ARM920T

21

Ngoại vi S3C2440

Trang 12

Multimedia Card Interface

ADC 10 bit 8 kênh

Giao tiếp cảm biến ảnh (Image Sensor)

Điều khiển LCD

Điều khiển AC97 audio codec

23

Kiến trúc vi điều khiển S3C2440

Kiến trúc vi điều khiển S3C2440

 Đặc điểm của chip S3C2440 (tiếp)

• Hệ thống

4 kênh DMA (Direct Memory Access)

Boot hệ thống từ NOR Flash, NAND Flash, SDCard,

Trang 13

Tập thanh ghi và chế độ hoạt động

Thanh ghi trạng thái chương trình

 Các cờ kết quả hoạt động của ALU

 Điều khiển cho phép/cấm ngắt

 Thiết lập chế độ hoạt động

Trang 14

Lập trình nhúng ARM-Linux

Tập lệnh của S3C2440

 Tập lệnh ARM chia th{nh c|c nhóm lệnh

• Lệnh rẽ nh|nh (Branch)

• Lệnh xử lý dữ liệu (Data Processing)

• Trao đổi thanh ghi trạng th|i (Status Register

Transfer)

• Nạp v{ lưu (Load and Store)

• Ph|t sinh ngoại lệ (Exception-Generating)

6 bank nhớ cho ROM, SRAM (viết tắt SROM)

2 bank nhớ cho ROM, SRAM, SDRAM, …

 Hỗ trợ cả hai kiểu lưu trữ: little endian, big endian

Trang 15

Lập trình nhúng ARM-Linux 29

Bản đồ bộ nhớ

Hỗ trợ hai chế độ khởi động chính

 Với chế độ khởi động từ Nand Flash, 4 Kbytes

BootSram được |nh xạ v{o vùng nhớ chọn bởi

nGCS0

 Với chế độ khởi động từ Nor Flash, Nor Flash

được |nh xạ v{o vùng nhớ chọn bởi nGCS0

 Vùng nhớ cho SDRAM bắt đầu tại địa chỉ

0x30000000 v{ kết thúc ở địa chỉ 0x34000000

 (NOR Flash chứa sẵn BIOS firmware)

Trang 17

Lập trình nhúng ARM-Linux 33

Giới thiệu KIT nhúng micro2440

Giới thiệu KIT nhúng micro2440

 Thông số kỹ thuật

Trang 18

Lập trình nhúng ARM-Linux

Giới thiệu KIT nhúng micro2440

35

1.4 Môi trường phát triển ứng dụng

 Mô hình sử dụng ph|t triển ứng dụng trên KIT

FriendlyArm mini/macro 2440

Trang 19

Lập trình nhúng ARM-Linux

Môi trường phát triển ứng dụng

 Phần mềm

• M|y tính Linux (Ubuntu 9.04 hoặc mới hơn)

• Trình biên dịch chéo (C/C++ cross compiler): Cross

toolchains (arm linux gcc 4.4.3)

• gFTP (Công cụ truyền nhận file theo giao thức FTP)

• minicom (phần mềm giao tiếp cổng Com trên Linux)

• USB push (Công cụ truyền file qua USB trên Linux)

• QT SDK, QT Embedded (Môi trường IDE để ph|t triển ứng

dụng giao diện đồ họa trên nền tảng Qt Framework, dựa trên

C/C++)

37

Môi trường phát triển ứng dụng

Môi trường phát triển ứng dụng theo nhóm

Trang 21

Lập trình nhúng ARM-Linux

Mục tiêu bài học số 2

 Sau khi kết thúc b{i học n{y, học viên có thể

• Nắm được tổng quan về hệ điều h{nh nhúng Linux

(Embedded Linux OS)

• Nắm được c|c kh|i niệm cơ bản về Bootloader,

kernel, root file system

• Biết c|ch nạp hệ điều h{nh nhúng Linux xuống KIT

FriendlyArm Micro2440

• Biết c|ch tùy biến, biên dịch nh}n hệ điều h{nh

41

Nội dung bài học

2.1 Tổng quan về hệ điều h{nh nhúng Linux

2.2 Quy trình c{i đặt hệ điều h{nh nhúng Linux

2.3 Biên dịch nh}n hệ điều h{nh nhúng Linux

Trang 22

Tổng quan Embedded Linux OS

 Đặc trưng cơ bản của hệ điều h{nh

Quản lý t{i nguyên hệ thống (phần cứng, phần mềm)

Trung gian giữa phần cứng v{ phần mềm, giúp phần

cứng l{m việc trong suốt với phần mềm ứng dụng

Cung cấp giao diện h{m chuẩn cho phần mềm ứng

dụng

 Lợi ích của hệ điều h{nh

• Tăng tính ổn định, tin cậy của hệ thống

• Tăng tính khả chuyển (portability)

Trang 24

Lập trình nhúng ARM-Linux

Kiến trúc hệ điều hành nhúng

 Hệ điều h{nh nhúng (embedded os) ?

• L{ hệ điều h{nh c{i đặt cho c|c hệ thống nhúng

(embedded system)

• Được thiết kế: compact, efficient, reliable

47

Kiến trúc hệ điều hành nhúng

 Đặc trưng của hệ điều h{nh nhúng

• Tăng tính tin cậy (reliability)

• Tăng tính khả chuyển (portability)

• Khả năng tương thích mềm: dễ d{ng n}ng cấp hay

thu gọn để tương thích với nền tảng hệ thống

• Thu gọn, đòi hỏi ít bộ nhớ hơn Có thể hỗ trợ khởi

động từ bộ nhớ ROM, Flash (hệ thống không có ổ

cứng)

• Cung cấp c|c cơ chế lập lịch (scheduler) hỗ trợ thời

gian thực (Realtime OS – RTOS)

Trang 25

Lập trình nhúng ARM-Linux

Hệ điều hành thời gian thực

 Hệ thống thời gian thực (Realtime): c|c phần mềm,

phần cứng hoạt động thỏa m~n c|c r{ng buộc về

Trang 26

• /home: thư mục người dùng

• /dev: chứa c|c file thiết bị

• /bin: chứa c|c file thực thi của hệ thống

• /etc: chứa c|c file cấu hình

• /var: chứa c|c file log

• /opt: chứa c|c gói chương trình c{i đặt thêm

• /proc: chứa thông tin về c|c tiến trình, c|c th{nh phần phần

cứng, phần mềm đang chạy trong hệ thống

• /usr: chứa c|c file thực thi, t{i liệu liên quan tới người dùng

Trang 27

Lập trình nhúng ARM-Linux

Embedded Linux

 Hỗ trợ rất nhiều kiến trúc vi xử lý (cả 32 bit v{ 64

bit)

• Intel X86, ARM, PowerPC, MIPS, AVR32, …

 Không hỗ trợ c|c vi điều khiển hiệu năng thấp

 Hỗ trợ cả kiến trúc có v{ không có khối quản lý bộ

nhớ (MMU)

 C|c hệ thống có thể dùng chung toolchains,

bootloader v{ kernel, c|c th{nh phần kh|c phải

riêng biệt v{ tương thích với từng hệ thống

53

Quá trình boot hệ thống Linux trên PC

Trang 28

Lập trình nhúng ARM-Linux

Quá trình boot hệ thống Linux nhúng

55

Quá trình boot hệ thống Linux nhúng

 Boot loader: chương trình mồi, thực hiện kiểm tra

Trang 29

Lập trình nhúng ARM-Linux

2.2 Quy trình cài đặt Embedded Linux

 Bước 1: C{i đặt bootloader (VD: U-Boot,

Supervivi)

 Bước 2: C{i đặt kernel

 Bước 3: C{i đặt hệ thống file (root file system)

57

Cài đặt trên môi trường Windows

 Công cụ

• Phần mềm HyperTerminal: kết nối với KIT

micro2440 qua cổng COM

• Phần mềm DNW: kết nối với KIT micro2440 qua

cổng USB

 C|ch thức

• Phần mềm HyperTerminal (giao tiếp với BIOS trên

Nor Flash qua cổng rs232) truyền c|c lệnh điều

khiển

• Phần mềm DNW trao đổi file

Trang 30

• Phần mềm minicom cho phép giao tiếp serial,

truyền c|c lệnh điều khiển

• Phần mềm usbpush nạp file xuống KIT

59

Cài đặt hệ điều hành nhúng Linux

Demo

<Xem hướng dẫn chi tiết trong tài liệu

hướng dẫn cài đặt và sử dụng KIT

micro2440>

Trang 31

Lập trình nhúng ARM-Linux

2.3 Biên dịch nhân Linux

 Khi n{o cần biên dịch lại nh}n?

• Khi n}ng cấp hệ thống lên c|c phiên bản mới hơn

• Khi cần sửa lỗi, cấu hình, tùy chỉnh c|c module

 Qu| trình biên dịch nh}n

• Download nh}n tại địa chỉ: kernel.org (Hoặc trong

CD đi kèm KIT)

• File nén linux-2.6.32.2.tar (tùy phiên bản);

• Giải nén được thư mục to{n bộ m~ nguồn của nh}n

(ví dụ thư mục linux-2.6.32.2)

61

Biên dịch nhân Linux

 Qu| trình biên dịch nh}n (tiếp):

• V{o thư mục chứa m~ nguồn nh}n (linux-2.6.32.2)

• Cấu hình trước khi biên dịch bằng lệnh:

make menuconfig

• Xuất hiện giao diện cấu hình, tùy chỉnh phù hợp với

hệ thống

• Thực hiện biên dịch bằng lệnh: make zImage

• Biên dịch th{nh công kết quả sẽ l{ file zImage (trong

thư mục linux-2.6.32.2/arch/arm/mach-s3c2440) ,

sẽ được nạp (porting) xuống KIT

Trang 32

Lập trình nhúng ARM-Linux

Biên dịch nhân Linux

Demo

<Xem hướng dẫn chi tiết trong tài liệu

hướng dẫn cài đặt và sử dụng KIT

micro2440>

63

Thảo luận

Trang 33

Lập trình nhúng ARM-Linux

Bài số 3

Môi trường Lập trình nhúng Arm Linux

65

Mục tiêu bài học số 3

 Sau khi kết thúc b{i học n{y, sinh viên có thể

• Trình b{y c|c th{nh phần cần thiết cho việc ph|t

triển ứng dụng nhúng trên Linux

• Biết c|ch c{i đặt c|c công cụ, môi trường ph|t triển

• Trình b{y được cấu trúc một chương trình cơ bản,

viết v{ biên dịch chương trình C đầu tiên “Hello”

chạy trên KIT micro2440

Trang 34

Lập trình nhúng ARM-Linux

Nội dung bài học

3.1 Môi trường ph|t triển ứng dụng nhúng Linux

3.2 C{i đặt môi trường ph|t triển

Trang 35

Môi trường lập trình KIT micro 2440

• M|y host c{i hệ điều h{nh Linux (Ubuntu)

• Trình biên dịch chéo Cross toolchains (arm-linux-gcc 4.4.3):

biên dịch ứng dụng (viết bằng C/C++)

• Công cụ viết m~ nguồn chương trình C (dùng gedit, eclipse)

• gFTP: truyền nhận file Host<->KIT qua giao thức TFTP

• Telnet: kết nối KIT qua Ethernet (sử dụng cross cable)

Trang 36

Lập trình nhúng ARM-Linux

3.2 Cài đặt môi trường phát triển

 Cấu hình mạng LAN (host + KIT) qua c|p chéo v{ sử

dụng IP cùng dải:

• Linux host: 192.168.1.30

• Linux target: 192.168.1.230 (default)

71

Cài đặt trình biên dịch chéo

 Bước 1: Giải nén arm-linux-gcc-4.4.3.tar.gz

tar –zxvf arm-linux-gcc-4.4.3.tar.gz

 Bước 2: Cập nhật biến môi trường PATH

• Thêm đường dẫn tới thư mục bin của

arm-linux-gcc-4.4.3 ( Cập nhật biến môi trường PATH trong file

.bashrc trong đường dẫn chỉ ra bởi biến $HOME )

 Bước 3: Kiểm tra trình biên dịch

• Mở cử sổ console, gõ lệnh: arm-linux-gcc version

• Thông b|o về phiên bản của arm-linux-gcc hiện ra =>

qu| trình c{i đặt th{nh công

Trang 37

• Gõ lệnh: sudo apt-get install gftp

 Bước 2: Kiểm tra kết nối giữa Host và Target

Trang 40

Lập trình nhúng ARM-Linux

Chương trình Hello World

 Soạn thảo m~ nguồn chương trình C bằng gedit (file Hello.c)

79

#include <stdio.h>

int main (int argc, char* argv[])

{

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;

}

Cách thức biên dịch chương trình

 Cách 1: Sử dụng lệnh của cross compiler

• VD: arm-linux-gcc –g –o Hello Hello.c

• Kết quả: biên dịch ra một file thực thi có tên l{ Hello từ một file

m~ nguồn l{ Hello.c, file n{y có hỗ trợ khả năng debug

 Cách 2: Tạo v{ sử dụng Makefile

• make l{ một tool cho phép quản lý qu| trình biên dịch, liên kết

… của một dự |n với nhiều file m~ nguồn

• Tạo Makefile lưu c|c lệnh biên dịch theo định dạng của

Makefile

• Sử dụng lệnh make để chạy Makefile v{ biên dịch chương trình

 Cách 3: Sử dụng automake và autoconf

• Tạo makefile tự động

Trang 41

[tab] system command

 target: make target

 Dependencies: c|c th{nh phần phụ thuộc (file m~

nguồn, c|c file object…)

 System command: c|c c}u lệnh (lệnh biên dịch, lệnh

Biên dịch chương trình: make all

Xóa file sinh ra trước đó: make clear

Trang 42

void display(int index, char* str)

void display(int index, char* str)

Trang 43

Lập trình nhúng ARM-Linux

VD 2: Makefile liên kết

OUTPUT=Hello

$(CC) -o $(OUTPUT) Hello.o display.o

Nạp file thực thi xuống KIT

 Bước 1: sử dụng phần mềm gFTP chuyển file Hello

(đ~ được biên dịch trước đó) xuống KIT, ví dụ

 Bước 2: telnet xuống KIT, chuyển tới thư mục

/ktmt, thực thi chương trình

• Gõ lệnh: /Hello

• Nếu chương trình chưa có quyền thực thi, thực hiện

cấp quyền: sudo chmod +x Hello

 Bước 3: quan s|t kết quả

Ngày đăng: 29/07/2014, 10:09

TỪ KHÓA LIÊN QUAN

w