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 HCM
KHOA ĐIỆN-ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ VIỄN THÔNG
ĐỒ ÁN TỐT NGHIỆP
ĐỀ TÀI:
NGHIÊN CỨU HỆ THỐNG
NHÚNG VÀ XÂY DỰNG Ứ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 3 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 nhau mà 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ản xuấ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 dataflash device (NPCS0) hay không, nếu tồn tại, MPU thực hiện chép mã thực thi của AT91BootStrap từ SPI serial dataflash device vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình AT91BootStrap Nếu không tồn tại chương trình boostrap trong SPI serial dataflash device, MPU thực hiện bước B3 sau đây
B3> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong SPI serial dataflash device (NPCS1) hay không, nếu tồn tại, MPU thực hiện chép mã thực thi của AT91BootStrap từ SPI serial dataflash device vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình AT91BootStrap Nếu không tồn tại chương trình boostrap trong SPI serial dataflash device, MPU thực hiện bước B4 sau đây
B4> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong NAND FLASH device hay không, nếu tồn tại, MPU thực hiện chép mã thực thi của AT91BootStrap từ NAND FLASH vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình AT91BootStrap Nếu không tồn tại chương trình boostrap 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ặc khi 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ủa SDRAM 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ành Linux
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ống
2.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
BootStrap
U-boot
Kernel
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à 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 đó boot chờ nhập các lệnh từ người dùng Nếu u-boot nhận được lệnh u-boot ảnh của kernel hoặc nếu nó được sử dụng để u-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ạo kernel 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 9o Thiết lập mặt nạ : setenv netmask <submask net>
o Lưu lại các biến môi trường vào dataflash : save
- Chuẩn bị kernel cho hệ thống
- Tại command line của uboot:
o Xóa vùng nhớ NAND FLASH để chuẩn bị cho kernel:
nand erase offset length
nand erase 0x0 0x200000
lệnh trên cho phép xóa 2 Mbyte bộ nhớ Nand Flash ở địa chỉ offset là 0 (vùng nhớ đầu tiên của NandFlash)
o Chép uImage từ máy tính vào SRAM ở địa chỉ 0x20000000
Tftp 0x20000000 uImage
Để có thể chép thông qua giao thức tftp thì trên máy tính host phải cài đặt và chạy dịch vụ tftp, file uImage được lưu trong thưc mục của tftp server
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
Bootm 0x20000000
Hệ thống sẽ chuyển đến địa chỉ SRAM 0x20000000 để boot Umage
Trong trường hợp này lần sau khi mở điện nội dung trên SRAM
sẽ mất đi Để có thể sư dụng uImage cho các lần khởi động sau chúng ta cần chep uImage lên NandFlask
Nand write 0x20000000 0x0 0x200000
Chép 2 Mbyte từ địa chỉ SRAM 0x20000000 lên nandflash có địa chỉ offset là 0 (vùng đầu tiên của NandFlash)
Các lần khởi động sau sẽ chép uImage từ Nanflash xuống SRAM và thực thi nó trên SRAM
Nand read 0x20000000 0x0 0x200000
Bạn chú ý các thao tác chép uImage từ Nandflash xuống SRAM và thực thi nó được thiết lập trong biến môi trường uboot để thực hiện một cách tự động
o File system
Để board có thể họat động thì phần cuối cùng trong hệ thống phần mềm nhúng làm File System
Đối với board KM9260 hoặc các board tương tự sử dụng chip của Atmel có thể sử dụng Angstrom hay debian
Việc cài đặt file system theo tài liệu kèm theo không được giới thiệu ở đây
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
o Make all
- Nếu quá trình biên dịch thành công trong thư mục u-boot-1.3.4 sẽ tồn tại file u-boot.bin
- Một điều chú ý là ở đây chúng ta sử dụng make at91sam9260ek_config vì board KM9260 co thiết kế gần giống board chuẩn at91sam9260ek, nhưng do các file cấu hình cho board KM9260 chưa update lên nên tạm thời có thể sử dụng at91sam9260 để biên dịch cho hệ thống Chính vè điều đó mà khi tạo ra uboot.bin sẽ có một số module không hoạt động được
- Để 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ấu hì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 putty bằ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, giao diệ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 WinSCP
Thông tin đăng nhập:
Host name : Địa chỉ IP của máy Linux : 192.168.3.29
User 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ới má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ách cà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 tarball của toolchains:
$ cd /home/km9260-project/tool
$ tar –jcvf arm-2007q3.tar.bz2