Tài liệu tham khảo công nghệ thông tin Nghiên cứu hệ thống nhúng và xây dựng ứng dụng giao tiếp Webcam
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCMKHOA ĐIỆN-ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ VIỄN THÔNG
DỤNG GIAO TIẾP WEBCAM
GVHH: THẦY TRƯƠNG NGỌC SƠN
SVTH: ĐÀO THANH MAI MSSV: 06119058
TRƯƠNG XUÂN KIM MSSV: 06119023
Tp Hồ Chí Minh - Tháng 7/2010
Trang 2TÓM TẮT NỘI DUNG ĐỀ TÀI VÀ BÁO CÁO
Đồ án tốt nghiệp “nghiên cứu hệ thống nhúng và xây dựng ứng dụng giao tiếp webcam” là đề tài nghiên cứu về một lĩnh vực mới của Việt Nam Đó là lập trình nhúng
Qua thực tế và khoa học ngày càng phát triển thì nhóm đề tài tốt nghiệp đả quyết định chọn đề tài hướng về lập trình nhúng này để tìm hiểu về các kiến thức nền, kiến thức cơ bản về lập trình nhúng,hệ thống nhúng, vi điều khiển nhúng và hệ điều hành mã nguồn mở là linux.
Nội dung đề tài có hai phần:
Phần I là nghiên cứu về lý thuyết
phần lý thuyết có những nội dung sau :
- Nghiên cứu về thống nhúng bao gồm nghiên cứu những đặt trưng, đặt điểm kiến truc phần mềm hệ thống nhúng,- Nghiên cứu về hệ điều hành thời gian thực , phân tích
quy trình xử lý của hệ điều hành
- Phân tích một hệ thống nhúng chạy hệ điều hành thời gian thực
- Giới thiệu kiến thức cơ bản về hệ điều hành linux- Nghiên cứu về vi điều khiển arm là vi điều khiển ứng
dụng nhiều nhất trong hệ thống nhúng.
- Nghiên cứu các tính năng , cấu trúc, kiến trúc và ưu
Trang 33 Phần 2 là phần xây dựng các ứng dụng
chạy trên board phát triển hệ thống nhúng
- Trươc tiên là nghiên cứu cài đặt cho board phát triển hệ thống nhúng KM9260 Từ việc nghiên cứu quá trình hoặt động chạy hệ điều hành nhúng mà nhóm tiến hành cài đặt hệ điều hành cho board.
- Sau đó phát triển các ứng dụng mô phỏng về giao tiếp , lập trình C/C++ lập trình I/O , lập trình driver
- Ứng dụng nhóm đồ án làm gồm có xây dựng board phát triển nhúng chạy tập tin multimedia
- Trong đó gồm chạy file audio phát nhạc
- Giao tiếp với Webcam USB truyền và nhận ảnh để ứng dụng vào xử lý ảnh
- Giao tiếp với các thiết bị khác như MOUSE, nút nhấn , led đơn.
Đó là những nội dung cơ bản mà nhóm làm đồ án tốt nghiệp đả hoàn thành mặt dù còn hạn chế về kiến thức và khả năng nhiên cứu nhưng nhóm đả cố gắn hoàn thành và xây dựng nhiều ứng dụng mô phỏng để có thể hiểu sâu về lập trình nhúng và vi điều khiển nhúng.
Lý thuyết về các vấn đề nghiên cứu trong đồ án
Mô phỏng chạy tập tin mp3
Mô phỏng chạy ứng dụng giao tiếp webcam
TRÊN BOARD PHÁT TRIỂN HỆ THỐNG NHÚNG
Trang 41 BOOT LOADER CHO KM9260
Boot loader có vai trò quan trọng trong hệ thống nhúng Tùy theo loại MPU khác nhaumà ta có cơ chế, trình tự boot khách nhau Đối với AT91SAM9260, Khi cấp nguồn,AT9260 chạy chương trình boot bên trong ROM (được xây dựng sẵn trong quá trình sảnxuất chíp) Hình sau thể hiện lưu đồ ROM boot của AT91SAM9260:
Trang 5Hình: Trình tự boot của MPU AT91SAM9260.
B1> Chương trình chạy với bộ dao động nội, hoặc với bộ dao động thạch anh.
B2> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong SPI serial dataflashdevice (NPCS0) hay không, nếu tồn tại, MPU thực hiện chép mã thực thi củaAT91BootStrap từ SPI serial dataflash device vào SRAM nội của MPU, sau đó thực thilệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình AT91BootStrap Nếukhông tồn tại chương trình boostrap trong SPI serial dataflash device, MPU thực hiệnbước B3 sau đây.
B3> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong SPI serial dataflashdevice (NPCS1) hay không, nếu tồn tại, MPU thực hiện chép mã thực thi củaAT91BootStrap từ SPI serial dataflash device vào SRAM nội của MPU, sau đó thực thilệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình AT91BootStrap Nếukhông tồn tại chương trình boostrap trong SPI serial dataflash device, MPU thực hiệnbước B4 sau đây.
B4> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong NAND FLASH devicehay không, nếu tồn tại, MPU thực hiện chép mã thực thi của AT91BootStrap từ NANDFLASH vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên củaSRAM để thực thi chương trình AT91BootStrap Nếu không tồn tại chương trìnhboostrap trong SPI serial dataflash device, MPU thực hiện bước B5 sau đây.
B5> Nếu MPU nhận được ký tự bất kỳ từ bàn phím máy tính (qua cổng DBGU) Hoặckhi cắm cable USB vào máy tính chương trình sẽ nhảy sang SAM-BA boot.
Từ lưu đồ trên, ta có thể lưu trữ AT91BootStrap.bin theo 3 cách: SPI serial dataflash(NPCS0 or NPCS2) hoặc lưu trữ trên NAND Flash KM9260 sử dụng SPI serial dataflash(NPCS1) và NAND FLASH
Trang 6TRÌNH TỰ BOOT LINUX CỦ A KM9260:
Quá trình boot kernel Linux trên KM9260 được thực thi qua 3 tầng, hình sau biểu thịcách hoạt động của board:
Hình : Trình tự boot kernel của KM9260.
(1) KM9260 thực thi ROM boot, load AT91AT91BootStrap.bin từ AT45DB041D-SU(SPI NPCS1) vào SRAM, thực hiện lệnh nhảy và thự thi chương trình AT91BootStrap.
(2) KM9260 thực hiện khởi động PLL cho system clock, khởi động SDRAM controller,load u-boot.bin từ AT45DB041D-SU tại offset 0x8400 vào địa chỉ 0x21F00000 củaSDRAM Sau đó thực hiện lệnh nhảy vào vùng SDRAM để chạy chương trình U-Boot.
(3) U-Boot load kernel uImage từ nhiều nguồn khác nhau (TFTP, NAND FLASH )chép vào địa chỉ 0x20000000 trên SDRAM, sau đó thực hiện lệnh boot hệ điều hànhLinux.
Trang 72 CÀI ĐặT CHO BOARD PHÁT TRIỂN NHÚNG
1 Tổ chức phần mềm trong hệ thống nhúng KM9260
2 Cài đặt chương trình cho hệ thống2.1 Cài đặt BootStrap và U- boot
- BootStrap là một chương trình khởi động được nạp xuống trước tiên cho các vi điều khiển dòng ARM 9 của Atmel.
- BootStrap là một module ứng dụng, nó được sử dụng để thực hiện các chức năng sau:
o Khởi tạo phần cứng như tần số xung clock, thiết lập các PIO (programmable Input Output).
o Thiết lập các ngoại vi như PIO, PCM, SDRAMC,
o Thực hiện các thực toán truy xuất vật lý các ngoại vi như DataFlash, NANDFlash, Paralell Flash
o Điều khiển các tập tin hệ thống như JFFS2, FAT o Thực thi các ứng dụng như ELF, Linux,
- BootStrap có thể được đặt trong vùng bootLoader, cụ thể là được đặt trong vùng DataFlash BootStrap được chép lên RAM nội bởi trình SAM-BA Boot BootLoader thực hiện khởi tạo vi xử lý (PLL, PIO, SDRAMC, SPI).
- BootStrap thực hiện load U-boot từ DataFlash lên SRAM và trỏ đến thực hiện chương trình U-Boot.
- Cài đặt BootStrap và u-boot thực hiện theo hướng dẫn trong tài liệu kèm theo board.
- U-boot (universal bootLoader) là một tập mã nguồn mở, hổ trợ bootLoader cho nhiều kiến trúc nền khác nhau U-boot hổ trợ các lệnh tương tác, các biến môi trường, các lệnh thực thi và boot hệ thống từ các thiệt bị media bên ngoài.
File System
Trang 8U-boot hổ trợ nhiều lọai CPU và các họ CPU thông dụng hiện nay U-boot hổ trọ các board phát triển trên nền các vi xử lý thông dụng hiện nay.
- U-boot thực hiện cấu hình các khối phần cứng trong một board và đặt chúng vào trạng thái hoạt động Nó có thể load và thực thị hệ điều hành một cách tự động (auto-boot) hoặc ngược lại nó cho phép người dùng khởi động hệ điều hành thông qua các lệnh giao tiếp mà u-boot hổ trợ Tập lệnh chuẩn của u-boot cung cấp khả năng cho phép người sử dụng thao tác trên bộ nhớ, mạng và nhiều thao tác khác khi hệ thống khởi động.
- Thông thường u-boot được đặt trong phân vùng đầu tiên của Flash, bắt đầu từ sector hay block nào được định nghĩa bởi vi xử lý U-boot khởi tạo CPU và một vài phần cứng trên board, tạo một vài cấu trúc dữ liệu để cho kernel sử dụng và load nó lên phân vùng đầu tiên của bộ nhớ.
- Khi quyền điều khiển được chuyển đến cho u-boot, nó sẽ khởi tọa các ngắt và các thiết bị ngoại vi Sau đó u-boot chờ nhập các lệnh từ người dùng Nếu u-boot nhận được lệnh boot ảnh của kernel hoặc nếu nó được sử dụng để boot kernel trực tiếp thì u-boot sẽ giải nén kernel image, load kernel lên bộ nhớ và chuyển điều khiển đến kernel Kernel sẽ thực thi mà không có sự tương tác với u-boot.
- U-boot cung cấp các hàm chuẩn để hiệu chỉnh qúa trình khơi động và khởi tạokernel Thường thì nó cung cấp các thao tác dưới dạng các lệnh (command-line).
- Cấu trúc thư mục của U-boot.
-2.2 Các thao tác trên u-boot
- Sau khi U-boot đã được load vào hệ thống Bootstrap thực thi, khởi tạo các thông số cho CPU, load uboot và thực thi uboot Khi uboot thực thi, u-boot command cho phép người sử dụng có thể giao tiếp với hệ thống thông qua các
Trang 9 U-boot sẽ dò trong biến môi trường xem địa chỉ của server là bao nhiêu và nó sẽ lên sever này tìm file có tên uImage và chép vào bộ nhớ SRAM từ địa chỉ 0x20000000.
o Thực thi kernel
3 Xây dựng và phát triển hệ thống
3.1 bootstrap : boostrap do nhà sản xuất hổ trợ, download bootstrap.bin tại trang của atmel.com
Trang 103.2 u-boot: uboot có nhiều phiên bản, tuy nhiên từ phiên bản 1.3.4 trở đi thì mới hổ trợ board AT91SAM9260.
- Sau khi download u-boot về , chép nó vào một thư mục nào đó trong máy tính cài hệ điều hành linux.
- Việc chép vào máy tính linux có thể được thực hiện thông qua nhiều cách ví dụ bạn có thể dowanload trực tiếp trên máy tính Linux có nối mạng internet, hoặc từ máy tính Windows XP sao đó chép sang máy tính Linux thống qua dịch vụ truyền file của SSH server – client, hoặc có thể chép bằng các thiết bị lưu trữ như USB
- Biên dịch uboot cho arm không sử dụng trình biên dịch gcc có sẵn trên máy tính cài linux Trước hết bạn cần cài gói phần mềm biên dịch arm-linux-gcc.- Gói phần mềm biên dịch bạn có thể tải về từ trên mạng.
- Trước khi biên dịch, cần thiết lập biến môi trường về đường dẫn cho trình biên dịch, ví dụ như sau
- PATH=/usr/local/arm/3.4/bin:$PATH
- Trong đó thư mục PATH=/usr/local/arm/3.4/bin chứa các trình biên dịch như arm-linux-gcc….
- Biên dịch uboot cho hệ thống
o Make clean : xóa hết các cấu hình biên dịch trước đo
o Make at91sam9260ek_config : khai báo biên dịch uboot cho hệ thống board at91sam9260ek
- Để khắc phục trường hợp trên trước khi biên dịch chúng ta cần sửa một số cấuhình trong tập mã nguồn uboot1.3.4.
- Biên dịch lại uboot.
3 PHÁT TRIỂN LINUX TRÊN KM9260
Trang 11Connection type: Raw, Telnet, Rlogin, SSH, Serial.
Có thể sử dụng putty làm terminal cho console chính của board KM9260 Ở đây,baudrate của cổng COM được set ở 115200 Nếu máy Linux đang chạy ssh server vàđược nối trong mạng LAN, ta có thể sử dụng console của máy Linux đó thông qua puttybằng cách sử dụng kiểu kết nối SSH như hình trên.
Win SCP.exe ( Win XP):
Chương trình cho phép ta dễ dàng thao tác file của máy Linux trên máy WinXP, giaodiện tương tự WinCommander, ta có thể chép file ra-vào từ máy WinXP với máy Linux.Để sử dụng chương trình này, trên máy Linux cần phải có ssh server.
Trang 12Hình : Đăng nhập vào WinSCPThông tin đăng nhập:
Host name : Địa chỉ IP của máy Linux : 192.168.3.29User name : root
Password : thanhmai06119058
Sau khi điền thông tin, ấn nút "Save" và thực hiện kết nối.
Trang 13Hình : Thao tác file trên WinSCP.
Ta có thể drop, drap file vào-ra từ màn hình destop WinXP để thực hiện sao lưu file vớimáy Linux.
Cross Toolchians (Linux):
Là trình biên dịch cho AT91SAM, chạy trên môi trường Linux Phần sau hướng dẫn cáchcài đặt toolchains trên máy host Linux PC:
Trước tiên ta tạo thư mục làm việc như sau:$ mkdir -p /home/km9260-project/tool
Chép file arm-2007q3.tar.bz2 vào thư mục vừa tạo ở trên và thực hiện giải nén gói tarballcủa toolchains:
$ cd /home/km9260-project/tool$ tar –jcvf arm-2007q3.tar.bz2
Trang 14Để có thể sử dụng toolchains, ta khai báo biến môi trường như lệnh sau:$ export PATH=$PATH:/home/km9260-project/tool/arm-2007q3/bin
Để ý rằng trong thư mục “arm-2007q3/bin” chứa những file cần thiết phục vụ cho việcbiên dịch cho KM9260, có thể xem tên các file này bằng cách dùng lệnh “ls” Các filenày được đặt tên theo quy luật Prefix bao gồm chuỗi ký tự “arm-none-linux-gnueabi-“Và các suffix bao gồm: gcc, ld, as …
Ta có thể kiểm tra việc export biến môi trường PATH thành công hay không bằng cáchtype lệnh shell như sau:
$ arm-none-linux-gnueabi-gcc
$ arm-none-linux-gnueabi-gcc: no input files
Nếu có xuất hiện thông báo “no input files” thì thao tác export trên thành công, nếu có thông báo “command not found” có nghĩa là ta chưa export đúng đường dẫn Chú ý rằng bước export PATH rất quan trọng, mỗi lần khởi động máy Linux hoặc sử dụng consolekhác ta bắt buộc phải export lại để đảm bảo toochains có thể hoạt động được.
MÔ HÌNH MÔI TRƯỜ NG PHÁT TRIỂ N LINUX CHO KM9260:
Môi trường phát triển Linux cho KM9260 có thể áp dụng theo một số mô hình sau:
Mô hình cho nhi ều me mber:
TFTP client
SSH serverTFTP server
UART LAN
LAN
Trang 15Các thành viên có thể coding trên máy tính chạy WinXP hoặc Linux Các máy này có thể kết nối với Workstation thông qua đường Ethernet Việc biên dịch source có thể thực hiện trên Workstation, và các máy Developer có thể truy cập console, truy xuất file với Workstation hoặc KM9260 thông qua giao thức của SSH server.
Workstation (host) :
Là máy tính Linux, có nhiệm vụ biên dịch source code từ các Developer bằng cách sửdụng cross-compiler (toolchains) Do host có chạy SSH server, các Developer có thể sửdụng console của host thông qua SSH client Ngoài ra TFTP server có vai trò lưu trữ cácfile ảnh sau khi đã biên dịch xong, sẵn sang cho việc boot, chạy chương trình ứng dụngtrên target.
Là đích mà chúng ta cần phát triển đến TFTP client trên target có nhiệm vụdownload các file ảnh từ TFTP server (ở host) và boot kernel thông qua bootloader (U-Boot, RedBoot…) Console chính của target được nối với máy host (hoặc là Developer)thông qua đường UART.
CÀI Đ ẶT DEBIAN CHO KM9260:
Đối với user mới làm quen với embedded Linux, thì Debian rootfs là lựa chọn hoàn hảo,do tính ưu việt về số lượng lớn gói phần mềm mà Debian support, cơ chế quản lý các góiphần mềm chặt chẽ và hệ thống, cộng đồng phát triển rộng Debian rootfs có dung lượngkhá lớn, vì thế ta nên dùng thẻ nhớ có dung lượng 2GB trở lên Phần này chỉ cách cài đặtvà boot Debian trên KM9260 sử dụng thẻ nhớ microSD.
Trước tiên ta chép “Debian_km9260_rootfs_121209.tar.bz2” vào máy PC Linux, gắn đầuđọc thẻ microSD vào Giả sử khi cắm vào máy PC Linux có thiết bị mới có tên gọi là/dev/sdb1, trước tiên ta format card microSD theo định dạng ext2, và mount vào thư mục“mnt/rootfs” chẳng hạn.
$ mkfs.ext2 /dev/sdb1$ mkdir –p /mnt/rootfs$ mount /dev/sdb1 /mnt/rootfs
Copy gói tarball Debian rootfs vào thư mục mnt và tiến hành giải nén.$ cp Debian_km9260_rootfs_121209.tar.bz2 /mnt
$ cd /mnt/rootfs
$ tar –jxvf /Debian_km9260_rootfs_121209.tar.bz2
Sau khi kết thúc giải nén ta đã hoàn tất việc chép Debian rootfs vào thẻ nhớ microSD.Phải đảm bảo rằng trong thư mục gốc của microSD phải tồn tại những thư mục cơ bảncủa Linux rootfs ví dụ như: bin, dev, home, lib, etc… Điều này thực hiện bằng cách dùnglệnh “ls” để kiểm tra, trước khi tháo microSD ra khỏi máy Linux PC ta nên unmount thưmục /mnt/rootfs trên: