Kỹ thuật máy tính - Hệ nhúng

Nắm được kiến trúc tổng quan, đặc điểm v{ hoạt

động của một hệ nhúng.

 Biết thiết kế hệ nhúng cơ bản (nguyên lý, mạch)

 Nắm được kiến trúc vi điều khiển

 Biết lập trình vi điều khiển từ cơ bản đến n}ng cao

với c|c dòng vi điều khiển phổ biến.

 Nghiên cứu ph|t triển hệ nhúng ARM Linux với c|c

giao tiếp v{o ra cơ bản, n}ng cao, cơ chế x}y dựng

device driver

pdf334 trang | Chia sẻ: Mr Hưng | Lượt xem: 823 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Kỹ thuật máy tính - Hệ nhúng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
t + 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) 246 Embedded System HungPN-HUST Ví dụ chương trình Hello  Soạn thảo m~ nguồn chương trình (sử dụng gedit, eclipse, v.v) 247 #include 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; } Embedded System HungPN-HUST Biên dịch chéo chương trình  Cách 1: Sử dụng lệnh của cross compiler • VD: arm-linux-gcc –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 248 Embedded System HungPN-HUST Cấu trúc Makefile  Makefile cấu th{nh từ c|c target, variables v{ comments  Target có cấu trúc như sau: target: dependencies [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 linux) 249 Embedded System HungPN-HUST Ví dụ Makefile đơn giản CC=arm-linux-gcc all: Hello.c $(CC) –o Hello Hello.c clear: rm Hello  Biên dịch chương trình: make all  Xóa file sinh ra trước đó: make clear 250 Embedded System HungPN-HUST Đưa chương trình lên KIT  Sử dụng phần mềm gFTP kết nối host v{ KIT 251 Embedded System HungPN-HUST 5.3. Lập trình Arm Linux  5.3.1. Cơ chế giao tiếp thiết bị  5.3.2. Lập trình giao tiếp vào ra cơ bản  5.3.3. Lập trình RS232 trên Linux  5.3.4. Lập trình giao tiếp usb joystick  5.3.5. Lập trình device driver 252 Embedded System HungPN-HUST 5.3.1. Cơ chế giao tiếp thiết bị Phần mềm ứng dụng Device files Device Drivers Phần cứng User Space Kernel Space (Toàn quyền truy xuất trực tiếp tài nguyên phần cứng của hệ thống) Các hàm giao tiếp chuẩn: •open •close •read •write •ioctl • 253 Mô hình giao tiếp ứng dụng – thiết bị trên hệ điều h{nh Embedded System HungPN-HUST Cơ chế giao tiếp thiết bị  File thiết bị (device file): Hệ điều h{nh đối xử với c|c thiết bị ngoại vi phần cứng tương tự như c|c file dữ liệu thông thường.  Qu| trình ứng dụng giao tiếp với thiết bị l{ qu| trình đọc/ghi file thiết bị đó thông qua driver.  Linux quản lý c|c file thiết bị trong thư mục /dev (Sử dụng lệnh ls –l /dev để xem)  Phân loại device files • Character device: thiết bị phần cứng đọc, ghi một chuỗi c|c byte dữ liệu • Block device: thiết bị phần cứng đọc, ghi một khối dữ liệu (Đứng trên phương diện giao tiếp của driver) 254 Embedded System HungPN-HUST Cơ chế giao tiếp thiết bị  Để quản lý c|c file thiết bị, hệ điều h{nh sử dụng số hiệu định danh device number cho mỗi thiết bị. Số hiệu n{y gồm 2 gi| trị: • Major device number: X|c định thiết bị n{y sử dụng driver nào • Minor device number: ph}n biệt giữa c|c thiết bị kh|c nhau sử dụng cùng một driver 255 Embedded System HungPN-HUST Cơ chế giao tiếp thiết bị  Kiểm tra danh s|ch c|c thiết bị • C|c file thiết bị (device file) nằm trong thư mục /dev • Gõ lệnh ls –al /dev • Các thông tin: Loại thiết bị: character (c) hay block (b) device T{i khoản người dùng Tên thiết bị Major number và Minor number Mount point 256 Embedded System HungPN-HUST Cơ chế giao tiếp thiết bị  Cơ chế lập trình giao tiếp: • Sử dụng cơ chế giao tiếp file v{ c|c h{m do driver cung cấp • C|c h{m mở đóng file thiết bị: open, close • H{m điều khiển cổng v{o ra: ioctl • H{m đọc/ghi file thiết bị: read, write • • Được qui định trong cấu trúc file operations của driver. 257 Embedded System HungPN-HUST 5.3.2. Lập trình giao tiếp vào ra cơ bản Lập trình giao tiếp GPIO A. Lập trình giao tiếp LED  Sử dụng led driver đ~ có  4 led đơn, ghép nối qua GPB5,6,7,8  Điều khiển led on/off, tạo hiệu ứng: nhấp nh|y, chạy đuổi,  Cần sử dụng h{m trễ (delay): sleep, usleep (thư viện sys/time.h) 258 https://sites.google.com/site/embedded247/ escourse/gpioprogramming Embedded System HungPN-HUST Mô hình giao tiếp điều khiển led Phần mềm ứng dụng Device files Device Drivers Phần cứng leds.c /dev/leds Mini2440_leds.c GPIO Port (GPB5,6,7,8) Hàm giao tiếp: • open • close • ioctl 259 Embedded System HungPN-HUST Lập trình điều khiển led  Mở file thiết bị: fd=open(“/dev/leds”, 0) • fd: file description (int, định danh file thiết bị) • /dev/leds: device file name (tên file thiết bị) • 0: WRITE_ONLY (chế độ mở để ghi)  H{m điều khiển ioctl(fd, onoff, led_no) • ioctl: input output control (out 0, 1) • Điều khiển bật/tắt led đơn có số hiệu led_no  M~ nguồn driver cho led đơn: linux-2.6.32.2/drivers/char/mini2440_leds.c 260 Embedded System HungPN-HUST M~ nguồn minh họa 261 #include #include #include #include int main(int argc, char **argv){ int on; int led_no; int fd; //Nhận tham số từ dòng lệnh, kiểm tra điều kiện tham số hợp lệ if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 || on 1 || led_no 3) { fprintf(stderr, "Usage: leds led_no 0|1\n"); exit(1); } //Mở file thiết bị leds fd = open("/dev/leds", 0); if (fd < 0) { perror("error open device leds\n"); exit(1); } ioctl(fd, on, led_no); //Điều khiển bật/tắt led có số hiệu led_no close(fd); //Đóng file thiết bị return 0; } Embedded System HungPN-HUST Minh họa giao tiếp v{o ra cơ bản B. Lập trình giao tiếp nút bấm  Giao tiếp qua driver đ~ có  Đọc trạng th|i c|c nút bấm sử dụng phương ph|p thăm dò (polling) 262 Embedded System HungPN-HUST Mô hình giao tiếp nút bấm Phần mềm ứng dụng Device files Device Drivers Phần cứng Buttons.c /dev/buttons Mini2440_buttons.c GPIO Port Hàm giao tiếp: •open •close •read 263 Embedded System HungPN-HUST Lập trình giao tiếp nút bấm  Mở file thiết bị: buttons_fd=open(“/dev/buttons”, O_RDONLY) • buttons_fd: file description • /dev/buttons: device file  H{m đọc dữ liệu read(buttons_fd, current_buttons, sizeof(current_buttons)) • Đọc trạng th|i c|c nút bấm  H{m đóng file thiết bị: close(buttons_fd)  M~ nguồn driver cho nút bấm linux-2.6.32.2/drivers/char/mini2440_buttons.c 264 Embedded System HungPN-HUST M~ nguồn minh họa 265 #include int main(void){ int buttons_fd; char buttons[6] = {'0', '0', '0', '0', '0', '0'}; buttons_fd = open("/dev/buttons", O_RDONLY); if (buttons_fd < 0) { perror("open device buttons"); exit(1);} for (;;) { char current_buttons[6]; int count_of_changed_key; int i; if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) { perror("read buttons:"); exit(1);} count_of_changed_key = 0; for (i = 0; i < sizeof buttons / sizeof buttons[0]; i++) { if (buttons[i] != current_buttons[i]) { buttons[i] = current_buttons[i]; printf("%skey %d is %s", count_of_changed_key? ", ": "", i+1, buttons[i] == '0' ? "up" : "down"); count_of_changed_key++;} } if (count_of_changed_key) printf("\n"); } close(buttons_fd); return 0;} Embedded System HungPN-HUST Lập trình giao tiếp sử dụng gpiolib  2 c|ch sử dụng giao tiếp gpio (từ Linux user space) • Cách 1: Viết gpio driver (trên không gian nh}n hệ điều h{nh, kernel space), giao tiếp qua driver n{y. (Ví dụ với led, button đ~ l{m) • Cách 2: giao tiếp c|c ch}n gpio trực tiếp từ không gian người dùng (user space) dựa trên API thư viện gpiolib cung cấp. Linux cung cấp giao diện GPIO sysfs cho phép thao t|c với bất kỳ ch}n GPIO từ userspace. 266 Embedded System HungPN-HUST Lập trình giao tiếp sử dụng gpiolib  Tất cả c|c giao diện điều khiển GPIO thông qua sysfs nằm trong thư mục /sys/class/gpio  Kiểm tra bằng lệnh: ls /sys/class/gpio 267 Embedded System HungPN-HUST Lập trình giao tiếp sử dụng gpiolib  Giao diện n{y cung cấp c|c files điều khiển sau đ}y: 268 Embedded System HungPN-HUST Lập trình giao tiếp GPIO sử dụng gpiolib  Minh họa giao tiếp gpiolib sử dụng linux command Chi tiết: https://sites.google.com/site/embedded247/ddcour se/giao-tiep-gpio-tu-userspace-1 269 Cấu hình chân GPF5 (micro2440) output, và xuất giá trị 0 ra chân này echo 165 > /sys/class/gpio/export echo “out” > /sys/class/gpio/gpio165/direction echo 0 > /sys/class/gpio/gpio165/value Embedded System HungPN-HUST Minh họa lập trình giao tiếp gpiolib  File gpio.h 270 #ifndef GPIO_H #define GPIO_H int gpio_export(unsigned int gpio); //export pin to user space int gpio_unexport(unsigned int gpio); //unexport pin from user space int gpio_dir_out(unsigned int gpio); //Config pin as output int gpio_dir_in(unsigned int gpio); //Config pin as input int gpio_set_value(unsigned int gpio, unsigned int value); //Ghi gia tri cua mot pin gpio output int gpio_get_value(unsigned int gpio, unsigned int *value); //Doc gia tri cua mot pin gpio input int gpio_set_edge(unsigned int gpio, char *edge); #endif Embedded System HungPN-HUST Minh họa lập trình giao tiếp gpiolib  File gpio.c (ví dụ h{m đăng ký ch}n gpio sử dụng) 271 int gpio_export(unsigned int gpio){ int fd, len; char buf[64]; fd = open("/sys/class/gpio/export", O_WRONLY); if (fd < 0) { perror("gpio/export"); return fd; } len = snprintf(buf, sizeof(buf), "%d", gpio); write(fd, buf, len); //Ghi gpio vao file export close(fd); return 0; } Embedded System HungPN-HUST  Demo: Ứng dụng giao tiếp Board mở rộng, điều khiển led đơn, 7 seg, buttons. 272 Minh họa lập trình giao tiếp gpiolib Embedded System HungPN-HUST 5.3.3. Lập trình RS232 trên Linux Giới thiệu chuẩn RS232 Lập trình giao tiếp RS232 trên Linux 273 Embedded System HungPN-HUST Chuẩn RS232  Chuẩn đấu nối trên PC UART UART UART (Universal Asynchronous receiver/transmitter) 274 Embedded System HungPN-HUST Chuẩn RS232  Chuẩn đầu nối trên PC • Chân 1 (DCD-Data Carrier Detect): phát hiện tín hiệu mang dữ liệu • Chân 2 (RxD-Receive Data): nhận dữ liệu • Chân 3 (TxD-Transmit Data): truyền dữ liệu • Chân 4 (DTR-Data Terminal Ready): đầu cuối dữ liệu sẵn sàng • Chân 5 (Signal Ground): đất của tín hiệu • Chân 6 (DSR-Data Set Ready): dữ liệu sẵn sàng • Chân 7 (RTS-Request To Send): yêu cầu gửi • Chân 8 (CTS-Clear To Send): Xóa để gửi • Chân 9 (RI-Ring Indicate): báo chuông 275 Embedded System HungPN-HUST Chuẩn RS232  Khuôn dạng khung truyền • PC truyền nhận dữ liệu qua cổng nối tiếp RS-232 thực hiện theo kiểu không đồng bộ (Asynchronous) • Khung truyền gồm 4 thành phần 1 Start bit (Mức logic 0): bắt đầu một gói tin, đồng bộ xung nhịp clock giữa DTE và DCE Data (5,6,7,8 bit): dữ liệu cần truyền 1 parity bit (chẵn (even), lẻ (odd), mark, space): bit cho phép kiểm tra lỗi Stop bit (1 hoặc 2 bit): kết thúc một gói tin 276 Embedded System HungPN-HUST Chuẩn RS232  Kịch bản truyền Ghép nối không bắt tay giữa hai thiết bị (Khác nhau về mức điện áp) 277 Embedded System HungPN-HUST Lập trình giao tiếp chuẩn RS232 trên Linux  C|c bước cơ bản gồm: • Khởi tạo: Khai b|o thư viện • Bước 1: Mở cổng COM • Bước 2: Thiết lập tham số cấu hình cổng COM • Bước 3: Đọc/ghi cổng (gửi/nhận dữ liệu) • Bước 4: Đóng cổng 278 Embedded System HungPN-HUST Khai b|o thư viện  #include  #include  #include  #include // UNIX standard function  #include // File control definitions  #include // Error number definitions  #include // POSIX terminal control  #include // time calls 279 Embedded System HungPN-HUST Bước 1: Mở cổng  Sử dụng lệnh mở file int fd = open ("/dev/ttySAC0", O_RDWR);  “/dev/ttySAC0”: Tên file thiết bị cổng COM muốn mở  fd >0 nếu mở file th{nh công  fd<0 nếu mở file thất bại 280 Embedded System HungPN-HUST Bước 2: Thiết lập tham số  Sử dụng cấu trúc termios struct termios port_settings;  Thiết lập 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); 281 Embedded System HungPN-HUST Bước 3: Đọc, ghi cổng  Đọc cổng: sử dụng lệnh đọc file n=read(fd,&result,sizeof(result)); N: số ký tự đọc được Result: chứa kết quả  Ghi cổng: sử dụng lệnh 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 công) 282 Embedded System HungPN-HUST Bước 4: Đóng cổng  Đóng cổng: sử dụng lệnh đóng file close (fd); fd: file ID (có được từ thao t|c mở file th{nh công) https://sites.google.com/site/embedded247/esco urse/rs232programming 283 Demo Embedded System HungPN-HUST 5.3.4. Lập trình giao tiếp usb  Tìm hiểu giao thức USB  Lập trình giao tiếp thiết bị usb joystick 284 Embedded System HungPN-HUST Tìm hiểu giao thức usb Giới thiệu chuẩn USB:  Năm 1995: USB 1.0 • Tốc độ Low-Speed: 1.5 Mbps • Tốc độ tối đa (Full-Speed): 12 Mbps  Năm 1998: USB 1.1 (Sửa lỗi của USB 1.0) • Tốc độ tối đa (Full-Speed): 12 Mbps  Năm 2001: USB 2.0 • Tốc độ tối đa (High-Speed): 480 Mbps  Năm 2008: USB 3.0 • Tốc độ tối đa (Super-Speed): 4.8 Gbps  Tín hiệu • Truyền kiểu nối tiếp • Tín hiệu trên hai đường D+ và D- là tín hiệu vi sai 285 Embedded System HungPN-HUST Mô hình bus USB 286 Embedded System HungPN-HUST Vai trò của c|c th{nh phần  Vai trò của USB host: • Trao đổi dữ liệu với c|c thiết bị ngoại vi • Điều khiển bus: Quản lý được c|c thiết bị kết nối v{o đường bus v{ khả năng của mỗi thiết bị đó: sử dụng cơ chế điểm danh (Enumeration) Ph}n xử, quản lý luồng dữ liệu trên bus, đảm bảo c|c thiết bị đều có cơ hội trao đổi dữ liệu • Kiểm tra lỗi: thêm c|c m~ kiểm tra lỗi v{o gói tin cho phép ph|t hiện lỗi v{ yêu cầu truyền lại gói tin • Cung cấp nguồn điện cho tất cả c|c thiết bị 287 Embedded System HungPN-HUST Vai trò của c|c th{nh phần  Vai trò của thiết bị ngoại vi • Trao đổi dữ liệu với host • Ph|t hiện c|c gói tin hay yêu cầu (request) được gửi tới thiết bị để xử lý phù hợp • Kiểm tra lỗi: tương tự như Host, c|c thiết bị ngoại vi cũng phải chèn thêm c|c bit kiểm tra lỗi v{o gói tin gửi đi • Quản lý nguồn điện: c|c thiết bị có thể sử dụng nguồn điện ngo{i hay nguồn từ bus. Nếu sử dụng nguồn từ bus, thường có chế độ tiết kiệm điện năng. 288 Embedded System HungPN-HUST Endpoint & pipes  Mỗi qu| trình truyền nhận dữ liệu bao gồm một hay nhiều giao dịch (transactions), mỗi giao dịch gồm một hay nhiều packets -> Để hiểu được c|c giao dịch, c|c packet v{ nội dung của chúng -> cần tìm hiểu hai kh|i niệm Endpoint và Pipes 289 Embedded System HungPN-HUST Endpoint  Endpoint của thiết bị: • L{ “điểm cuối” trong kênh giao tiếp giữa host v{ usb device. • Endpoint l{ bộ đệm (gửi, nhận) nằm trên thiết bị. • C|c Endpoint được đ|nh địa chỉ v{ x|c định hướng In Endpoint: bộ đệm gửi (host lấy dữ liệu về) Out Endpoint: bộ đệm nhận (host gửi dữ liệu v{o) • Tất cả c|c thiết bị đều phải có Endpoint 0, đ}y l{ endpoint mặc định để gửi c|c thông tin điều khiển 290 Embedded System HungPN-HUST Endpoint 291 Embedded System HungPN-HUST Pipes  Pipes: kết nối Endpoint của thiết bị tới Host • Phải thiết lập pipe trước khi muốn trao đổi dữ liệu • Host thiết lập pipe trong qu| trình điểm danh (Enumeration) • C|c Pipe sẽ được hủy khi thiết bị ngắt kết nối khỏi bus • Tất cả c|c thiết bị đều có một đường ống điều khiển (control pipe) mặc định sử dụng Endpoint 0 292 Embedded System HungPN-HUST Device Classes  C|c thiết bị ngoại vi chuẩn (chuột, m|y in, ổ nhớ flash) có đặc tính truyền nhận dữ liệu chung -> Hệ điều h{nh có thể cung cấp driver chung cho c|c nhóm, c|c nh{ sản xuất thiết bị không cần viết driver riêng.  C|c thiết bị đặc thù riêng: cần có driver từng loại  C|c nhóm thiết bị đ~ được định nghĩa • Audio • Communication devices • Human interface (HID) • IrDA Bridge • Mass Storage • Cameras and scanners • Video 293 Embedded System HungPN-HUST Qu| trình trao đổi dữ liệu  C|c thiết bị USB có thể trao đổi dữ liệu với Host theo 4 kiểu ho{n to{n kh|c nhau, cụ thể: • Truyền điều khiển (control transfer) • Truyền ngắt (interrupt transfer) • Truyền theo khối (bulk transfer) • Truyền đẳng thời (isochronous transfer) 294 Embedded System HungPN-HUST C|c kiểu truyền  Truyền điều khiển: để điều khiển phần cứng, c|c yêu cầu điều khiển được truyền. Chúng l{m việc với mức ưu tiên cao v{ với khả năng kiểm so|t lỗi tự động. Tốc độ truyền lớn vì có đến 64 byte trong một yêu cầu (request) có thể được truyền.  Truyền ngắt: c|c thiết bị, cung cấp một lượng dữ liệu nhỏ, tuần ho{n chẳng hạn như chuột, b{n phím đều sử dụng kiểu truyền n{y. Hệ thống sẽ hỏi theo chu kỳ, chẳng hạn 10ms một lần xem có c|c dữ liệu mới gửi đến. 295 Embedded System HungPN-HUST C|c kiểu truyền  Truyền theo khối: khi có lượng dữ liệu lớn cần truyền v{ cần kiểm so|t lỗi truyền nhưng lại không có yêu cầu thúc ép về thời gian truyền thì dữ liệu thường được truyền theo khối. VD: m|y in, m|y quét  Truyền đẳng thời: khi có khối lượng dữ liệu lớn với tốc độ dữ liệu đ~ được quy định, ví dụ như card }m thanh. Theo c|ch truyền n{y một gi| trị tốc độ x|c định được duy trì. Việc hiệu chỉnh lỗi không được thực hiện vì những lỗi truyền lẻ tẻ cũng không g}y ảnh hưởng đ|ng kể. 296 Embedded System HungPN-HUST Lập trình giao tiếp thiết bị USB Joystick 297 https://sites.google.com/site/embedded247 /escourse/joystickprogramming Embedded System HungPN-HUST Cấu trúc js_event trên Linux  Linux định nghĩa cấu trúc js_event để lưu c|c thông tin khi có ph|t sinh sự kiện (khởi tạo thiết bị, người dùng bấm nút chức năng, nút chỉnh hướng)  Định nghĩa trong include/linux/joystick.h 298 Embedded System HungPN-HUST Cấu trúc js_event  Nội dung c|c trường dữ liệu • Time: nh~n thời gian ph|t sinh sự kiện • Value: gi| trị, phụ thuộc v{o nút chức năng hay nút chỉnh hướng Nếu l{ nút chức năng: 0/1 (1: pressed, 0: released) Nếu l{ nút chỉnh hướng: -32768 -> 32767 (Ph}n biệt hướng x, y phụ thuộc v{o gi| trị number=0/1) • Type: loại sự kiện Khởi tạo thiết bị: 0x80 Nút chỉnh hướng: 0x02 Nút chức năng: 0x01 • Number: x|c định nút được nhấn (trường hợp type =1 hoặc x|c định nút chỉnh hướng x, y trong trường hợp type =2) 299 Embedded System HungPN-HUST Lập trình kết nối joystick  Mở file thiết bị: joystick_fd = open(JOYSTICK_DEVNAME, O_RDONLY | O_NONBLOCK);  JOYSTICK_DEVNAME: tên của file thiết bị, thường là /dev/input/js0  O_RDONLY | O_NONBLOCK: mở file chỉ đọc ở chế độ NONBLOCK 300 Embedded System HungPN-HUST Lập trình kết nối joystick  Đọc dữ liệu từ thiết bị (khi có ph|t sinh sự kiện) bytes = read(joystick_fd, jse, sizeof(*jse));  joystick_fd: con trỏ file có được khi mở file  jse: biến cấu trúc js_event  bytes: Tổng số file đọc được, nếu số n{y bằng kích thước của cấu trúc js_event thì qu| trình đọc th{nh công 301 Embedded System HungPN-HUST Demo giao tiếp usb joystick  Các sự kiện khi khởi tạo thiết bị 302 Embedded System HungPN-HUST Demo giao tiếp usb joystick  Các sự kiện khi người dùng nhấn các nút 303 Embedded System HungPN-HUST QT Joystick Demo 304 Embedded System HungPN-HUST 5.3.5. Lập trình Device Driver  Giới thiệu về Kernel Module  Cơ chế x}y dựng Device Driver 305 Embedded System HungPN-HUST Kernel Module  Hoạt động trên Kernel Space, có thể truy xuất tới c|c t{i nguyên của hệ thống  Kernel Module cho phép thêm mới c|c module một c|ch linh hoạt, tr|nh việc phải biên dịch lại nh}n hệ điều h{nh  Kernel Module l{ cơ chế hữu hiệu để ph|t triển c|c device driver  Xem danh s|ch c|c module đang chạy: lsmod 306 Embedded System HungPN-HUST Kernel Module  C|c bước để thêm một kernel module v{o hệ thống • Viết m~ nguồn: chỉ sử dụng c|c thư viện được cung cấp bởi kernel, không sử dụng được c|c thư viện bên ngoài • Biên dịch m~ nguồn module • C{i đặt module: dùng lệnh insmod Tên_Module.ko • Gỡ module: dùng lệnh rmmod Tên_Module • Xem c|c thông tin log: sử dụng System Log Viewer 307 Embedded System HungPN-HUST M~ nguồn kernel module 308 //File: hello_kernel_module.c #include #include #include static int hello_init(void) { printk(KERN_ALERT "Khoi tao thanh cong\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Ket thuc thanh cong\n"); } module_init(hello_init); module_exit(hello_exit); Embedded System HungPN-HUST  Viết Makefile biên dịch kernel module  Biên dịch bằng lệnh make được file hello_kernel_module.ko Kernel Module Makefile obj-m += hello_kernel_module.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 309 Embedded System HungPN-HUST C{i đặt kernel module v{o hệ thống  Cài đặt module v{o hệ thống (runtime) sử dụng lệnh insmod insmod hello_kernel_module .ko  Gỡ kernel module dùng lệnh rmmod  Trên Ubuntu để kiểm tra qu| trình c{i đặt xem module đ~ c{i đặt th{nh công hay chưa mở System/Log Viewer xem mục kernel log) 310 Embedded System HungPN-HUST Lập trình linux device driver  Sử dụng cơ chế lập trình kernel module để x}y dựng c|c device driver  Qui trình x}y dựng device driver: • Viết m~ nguồn (cấu trúc tương tự kernel module). • Biên dịch m~ nguồn (dùng Makefile) (được file .ko) • C{i đặt sử dụng lệnh insmod • Đăng ký tên file thiết bị (device file) với hệ thống Đăng ký tự động trong m~ nguồn Hoặc sử dụng lệnh mknod để tạo device file (trong thư mục /dev) mknod [options] NAME Type [Major Minor] 311 Embedded System HungPN-HUST Ví dụ: Hello Driver 312 Embedded System HungPN-HUST Tham khảo + Demo Demo 313 https://sites.google.com/site/embedded247/ddcourse/ kernelmoduleprogramming Embedded System HungPN-HUST 5.4. Lập trình nền tảng Qt 5.4.1. Giới thiệu Qt 5.4.2. Cài đặt môi trường phát triển Qt 5.4.3. Làm quen với lập trình Qt 314 Embedded System HungPN-HUST 5.4.1. Giới thiệu Qt  Qt Development Frameworks được sáng lập năm 1994 bởi TrollTech  2008: TrollTech sáp nhập vào Nokia  Hiện nay Qt thuộc sở hữu của Digia  Qt l{ một Framework ph|t triển ứng dụng đa nền tảng (desktop, mobile, embedded).  Hỗ trợ các nền tảng: Windows, Linux, Embedded Linux, Win CE, Symbian, Maemo 315 Embedded System HungPN-HUST Giới thiệu QT  Qt cho phép viết ứng dụng một lần v{ biên dịch chéo trên nhiều nền tảng hệ điều h{nh khác nhau mà không phải viết lại m~. Tuy nhiên, m~ nguồn cần được biên dịch trên nền tảng m{ muốn ứng dụng được thực thi.  Lập trình Qt theo chuẩn C++.  Qt Framework bao gồm: • a cross-platform class library (Thư viện c|c lớp hướng đối tượng) • integrated development tools (C|c công cụ ph|t triển tích hợp) • a cross-platform IDE. (Môi trường ph|t triển ứng dụng)  Tham khảo: qt.nokia.com; qtcentre.org 316 Embedded System HungPN-HUST QT được sử dụng rộng r~i 317 Embedded System HungPN-HUST Kiến trúc Qt 318 Embedded System HungPN-HUST 5.4.2. Cài đặt Qt SDK  Cài đặt Qt SDK trên máy phát triển (Linux, Windows, MacOS)  File cài đặt qt-sdk-linux-x86-opensource-2010.05.1.bin Phiên bản mới:  Thực thi file cài đặt: $ ./qt-sdk-linux-x86-opensource-2010.05.1.bin  Đợi qu| trình c{i đặt diễn ra th{nh công, mặc định thư mục c{i đặt chứa tại $HOME/qtsdk-2010.01/qt/bin 319 Embedded System HungPN-HUST C{i đặt Qt SDK  Sau khi c{i đặt xong Qt SDK, công cụ Qt Creator cho phép ph|t triển ứng dụng với lựa chọn mặc định biên dịch trên m|y tính Linux.  Để biên dịch chéo ứng dụng thực thi trên KIT FriendlyArm (Embedded Linux) cần c{i đặt Qt Everywhere  https://sites.google.com/site/embedded247/esco urse/qtinstall 320 Embedded System HungPN-HUST Cài đặt Qt Everywhere  Bước 1: Cài đặt QT Em

Các file đính kèm theo tài liệu này:

  • pdfbaigianghenhung_4539.pdf
Tài liệu liên quan