Phần B: Thực nghiệm dựng ứng dụng
3.1.2.Lưu đồ quá trình biên dịch và các bước tiến hành
Hình 21: Lưu đồ quá trình biên dịch mã nguồn uClinux
b. Các bước tiến hành Bước 1 : chuẩn bị :
- Xác định các ngoại vi phần cứng có trên kit để tiến hành biên dịch driver .
Bước 2 : Thực hiện lệnh cấu hình để tạo ra các mục lựa chọn để cấu hính .
Để bắt đầu cấu hình nhân uClinux , tại cửa sổ Terminal ta dời con tới thư mục
uClinux-dist đây là thư mục chính chứa toàn bộ mã nguổn của uClinux . Để tiến hành cấu hình ta thực hiện lệnh cấu hình . Lệnh cấu hình có thể là một trong ba lệnh sau :
make config , make menuconfig , make xconfig . Ba lệnh này đều có một mục đích là cấu hình nhân những thứ cần thiết để biên dịch nhân Linux sau đó là lưu vào một file cấu hình dạng text file , chúng chỉ khác nhau về giao diện , cách thức trình bầy các lựa chọn cần cấu hình .
Cấu hình bằng lệnh make config : nếu thực hiện cấu hình bằng lệnh này thì các mục lục lựa chọn được thể hiện dưới dạng màn hình text .
Hình 22: Màn hình cấu hình bằng lệnh make config.
Cấu hình bằng lệnh make menuconfig : khi thực hiện lệnh này các mục lựa chọn để cấu hình được hiển thị ra dưới dạng các menu rất thuận tiện cho việc lựa chọn .
Hình 23: màn hình cấu hình bằng lệnh make menuconfig .
Cấu hình bằng lệnh make xconfig : màn hình cấu hình hiển thị dưới dạng hộp thoại , có giao diện trực quan .
Hình 24 : Giao diện cấu hình bằng lệnh make xconfig.
Bước 3 : Lựa chọn các mục cần cấu hình trên menu chính Menu chính có cấu trúc các mục chung như sau :
Hình 25 : Các mục chính trêm menu cấu hình .
- Mục Choose a Vendor/Product selection xuất hiện danh sách liệt kê toàn bộ nhà sản xuất và tên sản phẩm . Tên sản nhà sản xuất và sản phẩm được đặt trong thư mục
vendors trong thư mục chính uClinux-dist . Nhiệm vụ cần phải làm là lựa chọn nhà sản xuất và sản phẩm mà cần nhúng hệ điều hành uClinux vào . Việc chọn đúng nhà
sản xuất và tên sản phẩm rất quan trọng , nếu chọn sai tên sản phẩm khi biên dịch hệ điều hành uClinux và triển khai vào hệ thống thì sẽ không chạy được vì cấu hình phần cứng của mỗi loại vi điều khiển sẽ khác nhau . Trong khóa luận này em dùng vi điều khiển S3C44B0X của hãng Samsung .
-
Hình 26: danh sách các nhà sản xuất và sản phẩm
- Mục Libc Version cho phép lựa chọn một trong hai thư viện uC-libc và uClibc . - Mục Default all settings : nếu chọn mục này thì cấu hình của hệ điều hành được
chọn theo mặc định ( theo lần cấu hình trước đó ) .
- Mục Customize kernel settings : khi chọn mục này thì sẽ xuất hiện một màn hình có các mục chọn cần cấu hình cho nhân như lựa chọn các driver , các thư viện hỗ trợ .. - Mục Customize Vendor/User setting : Khi chọn mục này thì cũng có một màn hình
có các mục lựa chọn các chương trình ứng dụng , các công cụ , các trò chơi …
Bước 4 : Lưu các lựa chọn cấu hình vào một file và tiến hành các lệnh tạo file ảnh của hệ điều hành .
Sau khi lưu lựa chọn cấu hình cần thực hiện các lệnh sau để tạo file ảnh : - make dep . - make lib_only. - make user_only - make romfs - make image - make linux - make image
Kết thúc quá trình biên dịch hệ điều hành , toàn bộ hệ điều hành được tạo thành một file ảnh có là image.rom , đây là file cần để nhúng vào kit phát triển . File image.rom được lưu trong thư mục images nằm trong thư mục chính uClinux-dist . Cấu trúc thư mục của hệ điều hành uClinux sau khi biên dịch giống như cấu trúc các thư mục con trong thư mục romfs nằm trong thư mục chính uClinux-dist .
3.2. Nhúng hệ điều hành vào vi điều khiển 3.2.1. Thiết lập giao tiếp giữa kit và máy tính a. Ghép nối RS232 :
Cổng COM1 của kit giao tiếp với cổng RS232 của máy tính . Trong môi trường hệ điều hành Windows , chạy chương trình HyperTerminal để thực hiện giao tiếp . Qua chương trình HyperTerminal thiết lập các thuộc tính cổng RS232 :
- Tốc độ baud : 57600 . - Bit stop :1bit .
- Tính chẵn lẻ : không dùng chẵn lẻ . - Bắt tay : không bắt tay .
Hình 27 : Thiết lập cổng COM.
Sau khí đã thực hiện kết nối , ta cấp nguồn cho kit . Nếu trên HyperTerminal
Hình 28 :Tín hiệu nhận được từ kit HT44B0 truyền về máy tính .
b. Ghép nối ethernet :
Mini Ftp trên kit được đặt địa chỉ IP là 192.168.0.100 nên trên máy tính đặt địa chỉ IP cho card mạng là 192.168.0.152 .
Để kiểm tra kết nối ethernet đã thành công hay chưa ta thực hiện lệnh Ping từ máy tính tới minu Ftp của kit . Tại màn hình HyperTerminal sau khi đã thực hiện thành công kết nối cổng RS232 , ta thực hiện lệnh ap
Tại máy tính , ta thực hiện lệnh ping tới địa chỉ 192.168.0.100 nếu quá trình ping thành công thì kết nối ethernet đã thành công .
Hình 30: Kết quả ping thành công từ máy tính tới kit HT44B0.
3.2.1. Đưa file ảnh hệ điều hành vào vi điều khiển
Sau khi biên dịch mã nguồn hệ điều hành uClinux , ta thu được file ảnh hệ điều hành uClinux image.rom nằm trong thư mục uClinux-dist/images . Trên hệ điều hành Windows ta sử dụng chương trình đưa file lên một ftp server để đưa file ảnh hệ điều hành vào kit . File image.rom được đặt cùng chương trình đẩy file lên ftp server .
Tại chương trình HyperTerminal ta thực hiện lệnh ap đây là lệnh cho phép đọc file và ghi vào flash .
Thực hiện đẩy file lên kit : tại hệ điều hành windows : Start->Run -> CMD -> di chuyển tới thư mục chứa file imgage.rom -> thực hiện lệnh tftp -i 192.168.0.100 put f:\upload\image.rom . Sau khi đã thực hiện quá trình đó , trên kit file image.rom sẽ được lưu vào RAM , quay trở lại chương trình HyperTerminal :
Hình 31: Quá trình gửi và nhận file từ máy tính và kit .
Tiếp tục chọn “ n “ và thực hiện lệnh “ prog 10000 c008000 100000” sau đó chọn “y”
để thực hiện quá trình ghi file ảnh hệ điều hành từ RAM vào bộ nhớ flash :
Hình 32: Chạy lênh prog để ghi file vào một địa chỉ của bộ nhớ flash .
Hình 33: Quá trình ghi file vào flash thành công .
Lệnh prog sẽ thực hiện ghi ảnh hệ điều hành vào flash ở địa chỉ 0x10000 thay vì ghi vào địa chỉ 0x00 vì địa chỉ này lưu BIOS và Bootloader . Đối số thứ ba 0x100000 là số byte được ghi , nếu file ảnh của hệ điều hành lớn hơn thì số này được tăng lên .
3.1.3. Quá trình khởi động uClinux trên kit phát triển
Để tiến hành chạy hệ điều hành uClinux trên kit , cũng tại màn hình
HyperTerminal ta thực hiện lệnh move để di chuyển hệ điều hành từ bộ nhớ flash tới bộ nhớ RAM , sau đó thực hiện lệnh run để chạy hệ điều hành tại một địa chỉ trên RAM :
Lưu đồ quá trình khởi động :
Hinh 35: Lưu đồ quá trình khởi động hệ điều hành uClinux
Hình 36: Màn hình sau khi khởi động xong hệ điều hành uClinux .
Hệ điều hành được giải nén và bắt đầu quá trình khởi động ( quá trình khởi động của được trình bày trong 2.1.4 ) . Khi hoàn tất quá trình khởi động , chương trình
HyperTerminal sẽ trở thành một chương trình giống như chương trình Terminal trên hệ điều hành Linux . Thông qua HyperTerminal ta có thể thực thi các lệnh của Linux :
Hình 36 : Chạy thử một số lệnh cơ bản .
uClinux cũng có các lệnh cơ bản giống như hệ điều hành Linux cho PC vi dụ như các lệnh : ls , cd , echo , cat … và uClinux cũng cho phép sử dụng các lệnh theo cấu trúc đường ống , chạy các lệnh shell . Hệ điều hành uClinux đã được nhúng thành công vào kit HT44B0. Vi điều khiển S3C44B0X có hệ điều hành và các ngoại vi đã trở thành
một máy tính thu nhỏ có thể giao tiếp với thế giởi bên ngoài qua các cổng , cho phép chạy các chương trình .
3.3. Xây dựng ứng dụng
Các ứng dụng được xây dựng để chạy trên môi trường hệ điều hành uClinux cũng giống như các ứng dụng chạy trên môi trường hệ điều hành Linux trên PC . Các chương trình ứng dụng giao tiếp với các thiết bị ngoại vi thông các driver của hệ điều hành . Chương trình có thể được viết và kiển tra trên môi trường Linux trên PC , sau khi đã có chương trình chạy đúng thì mới chuyển xuống chạy trên nền uClinux . Do chương trình được chạy trên môi trường uClinux trên kit nên các file chương trình phải chuyển đổi định dạng từ ELF sang FLT ( sử dụng công cụ arm-elf-elft2flt ). Do uClinux được xây dựng bằng ngôn ngữ C , C++ và sử dụng các thư viện C nên các chương trình đa số đều được viết bằng ngôn ngữ C .
Các bước tạo chương trình :
- Tạo file mã nguồn và viết mã nguồn . - Tạo Makefile .
- Biên dịch .
Vi dụ tạo chương trình đơn giản in ra màn hình dòng chữ “Hello world !” bằng ngôn ngữ C :
Tạo thư mục hello trong thư mục uClinux-dist/user/
Trong thư mục hello tạo file hello.c có nộ dung :
#include <stdio.h> int main(){
printf(“Hello world !\n”); return 0;
}
Tạo file Makefile nằm trong cùng thư mục hello có nội dụng:
EXEC = hello OBJS = hello.o CFLAGS += -I. all : $(EXEC)
$(CC) $(LDFLAGS) –o $@ $(OBJS) $(LDLIBS) romfs :
$(ROMFSINST) /bin/$(EXEC) clean :
-rm -f $(EXEC) *.elf *.gdb *.o
Tiếp theo chỉnh sửa thông tin file Makefile trong thư mục uClinux-dist/user . Thêm dòng lệnh sau vào file Makefile :
dir_$(CONFIG_USER_HELLO) +=hello
Chỉnh sửa thông tin file config.in trong thư mục uClinux-dist/config . Thêm dòng lệnh sau :
mainmenu_option next_comment comment ‘Hello Applications’ bool ‘hello’ CONFIG_USER_HELLO endmenu
Tiến hành biên dịch chương trình và đưa chương trình vào hệ điều hành : Trong chương trình terminal của Redhat thực hiện lệnh make menuconfig để cấu hình lại các chương trình người dùng .
Hình 37 : Các lựa chọn cấu hình biên dịch chương trình hello
Một cách khác có thể biên dịch file mã nguồn hello.c ra file chạy bằng cách dùng lệnh trực tiếp từ terminal của RedHat :
Hình 38: kết quả chạy chương trình hello
Các thư viện được cung cấp trong Linux đều được viết bằng ngôn ngữ C , C++ nên rất tiện cho quá trình phát triển ứng dụng . Đồng thời hệ điều hành uClinux là hệ điều hành đa nhiệm , cho phép quản lý nhiều tiến trình chạy đồng thời cùng một lúc do đó có thể phát triển các ứng dụng đa luồng rất tiện lợi .
Khai thác các đặc tính ưu việt của vi điều khiển S3C44B0X 32 bit hoạt với xung nhịp lên tới 66MHz và sử dụng hệ điều hành đa nhiệm thời gian thực uClinux có rất nhiều thư viện sẵn có , có thể xây dựng các ứng dụng như xử lý ảnh , tiếng nói , giải mã MP3 , VoIP …
Kết luận