Tài liệu Đề tài Hệ điều hành nhúng uClinux: Mục lục
Mở đầu ........................................................................................................................ 1
Phần A : Lý thuyết chung ............................................................................................ 2
Chương 1 . Hệ điều hành nhúng uClinux ..................................................................... 2
1.1. Nhân hệ điều hành Linux ............................................................................... 2
1.1.1. Lịch sử nhân hệ điều hành Linux ............................................................ 2
1.1.2. Tổ chức của nhân hệ điều hành Linux .................................................... 3
1.1.3. Tổ chức thư mục .................................................................................... 5
1.2. Hệ điều hành nhúng uClinux ......................................................................... 7
1.2.1. Quá trình phát triển hệ điều hành nhúng uClinux .................................
55 trang |
Chia sẻ: hunglv | Lượt xem: 1362 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Hệ điều hành nhúng uClinux, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Mục lục
Mở đầu ........................................................................................................................ 1
Phần A : Lý thuyết chung ............................................................................................ 2
Chương 1 . Hệ điều hành nhúng uClinux ..................................................................... 2
1.1. Nhân hệ điều hành Linux ............................................................................... 2
1.1.1. Lịch sử nhân hệ điều hành Linux ............................................................ 2
1.1.2. Tổ chức của nhân hệ điều hành Linux .................................................... 3
1.1.3. Tổ chức thư mục .................................................................................... 5
1.2. Hệ điều hành nhúng uClinux ......................................................................... 7
1.2.1. Quá trình phát triển hệ điều hành nhúng uClinux .................................... 7
1.2.2. Kiến trúc hệ điều hành uClinux .............................................................. 8
1.2.3. Các thư viện sử dụng để phát triển hệ điều hành uClinux ....................... 9
1.2.4. Driver của các ngoại vi ........................................................................... 9
1.2.5. Mã nguồn hệ điều hành uClinux ........................................................... 10
Chương 2 . Vi điều khiển S3C44B0X và kit phát triển ............................................... 12
2.1. Vi điều khiển S3C44B0X ............................................................................ 12
2.1.1. Các đặc điểm của vi điều S3C44B0X ................................................... 12
2.1.2. Sơ đồ chân............................................................................................ 16
2.1.3. Sơ đồ khối ............................................................................................ 17
2.1.4. Chức năng một số khối chính ............................................................... 18
2.2. Kit phát triển HT44B0 ................................................................................. 33
Phần B : Thực nghiệm ............................................................................................... 36
Chương 3 . Biên dịch mã nguồn uClinux và xây dựng ứng dụng............................... 36
3.1. Biên dịch mã nguồn hệ điều hành uClinux................................................... 36
3.1.1. Môi trường và các công cụ cần để biên dịch ......................................... 36
3.1.2. Lưu đồ quá trình biên dịch và các bước tiến hành ................................. 36
3.2. Nhúng hệ điều hành vào vi điều khiển ......................................................... 42
3.2.1. Thiết lập giao tiếp giữa kit và máy tính ................................................ 42
3.2.1. Đưa file ảnh hệ điều hành vào vi điều khiển ......................................... 44
3.3. Xây dựng ứng dụng ..................................................................................... 49
Kết luận ..................................................................................................................... 53
Các tài liệu tham khảo ............................................................................................... 54
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 1
Mở đầu
Trong những thập niên gần đây hệ thống nhúng được nghiên cứu mạnh mẽ và
đã có rất nhiều ứng dụng trong thực tế . Các sản phẩm ứng dụng hệ thống nhúng rất đa
dạng từ hệ thống dẫn đường trong tên lửa , các robot thông mình đến các sản phẩm
tiêu dùng như máy giặt , máy in , các thiết bị giải trí như điện thoại , máy nghe nhạc ...
Hệ thống nhúng phát triển dựa trên sự phát triển phần cứng và phần mềm . Phần
cứng phải mạnh , đầy đủ tính năng cho hệ thống còn phần mềm phải được phát triển
khai thác được tài nguyên phần cứng đồng thời phải đáp ứng được các đặc tính của hệ
thống nhúng là tính thời gian thực , điều khiển chính xác , ổn định .
Ứng dụng hệ điều hành mã nguồn mở uClinux cho các hệ thống nhúng dùng vi
điều khiển có nhân vi xử lý 32 bit đã giúp cho quá trình phát triển phần mềm cho hệ
thống nhanh hơn chi phí thấp hơn và khai thác được sức mạnh của tài nguyên phần
cứng .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 2
Phần A : Lý thuyết chung
Chương 1 . Hệ điều hành nhúng uClinux
1.1. Nhân hệ điều hành Linux
1.1.1. Lịch sử nhân hệ điều hành Linux
Linux là một nhân hệ điều hành được phát triển bởi Linus Torvalds vào năm
1991 trên cơ sở cải tiến phiên bản UNIX có tên Minix do giáo sư Andrew
S.Tanenbaum xây dựng và phổ biến . Sau đó Linus Torvalds đã công bố mã nguồn của
mình cho mọi người và mong muốn mọi người có thể đóng góp ý kiến , phát hiện lỗi
và phát triển nó ngày càng tốt hơn . Và cũng từ thời điểm đó , theo tư tưởng GNU rất
nhiều chuyên gia trên toàn thế giới đã tham gia vào quá trình phát triển Linux và vì
vậy Linux ngày càng phát triển , mạnh mẽ , ổn định , có độ tin cậy cao và đáp ứng
được nhu cầu của người dùng .
Một số mốc lịch sử quan trọng trong quá trình phát triển nhân hệ điều hành
Linux :
Sau ba năm nhân Linux ra đời , đến ngày 14-3-1994, hệ điều hành Linux phiên
bản 1.0 được phổ biến . Thành công lớn nhất của Linux 1.0 là nó đã hỗ trợ giao thức
mạng TCP/IP chuẩn UNIX , sánh với giao thức socket BSD- tương thích cho lập trình
mạng . Trình điều khiển thiết bị đã được bổ sung để chạy IP trên một mạng Ethernet
hoặc trên tuyến đơn hoặc qua modem. Hệ thống file trong Linux 1.0 đã vượt xa hệ
thống file của Minix thông thường , ngoài ra đã hỗ trợ điều khiển SCSI truy nhập đĩa
tốc độ cao. Điều khiển bộ nhớ ảo đã được mở rộng để hỗ trợ điều khiển trang cho các
file swap và ánh xạ bộ nhớ của file đặc quyền .
Vào tháng 3-1995 , nhân 1.2 được phổ biến. Điều đáng kể của Linux 1.2 so với
Linux 1.0 ở chỗ nó hỗ trợ một phạm vi rộng và phong phú phần cứng , bao gồm cả
kiến trúc tuyến phần cứng PCI mới . Nhân Linux 1.2 là nhân kết thúc dòng nhân Linux
chỉ hỗ trợ PC .
Cách đánh chỉ số các dòng nhân (hệ điều hành) Linux : Hệ thống chỉ số được
chia thành một số mức, chẳng hạn hai mức như 2.4 hoặc ba mức như 2.2.5. Trong cách
đánh chỉ số như vậy , quy ước rằng với các chỉ số từ mức thứ hai trở đi , nếu là số chẵn
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 3
thì dòng nhân đó đã khá ổn định và tương đối hoàn thiện , còn nếu là số lẻ thì dòng
nhân đó vẫn đang được phát triển tiếp .
Tháng 6-1996 , nhân Linux 2.0 được phổ biến . Có hai đặc trưng nổi bật của
Linux 2.0 là hỗ trợ kiến trúc phức hợp , bao gồm cả cổng Alpha 64-bit đầy đủ , và hỗ
trợ kiến trúc đa bộ xử lý . Phân phối nhân Linux 2.0 cũng thi hành được trên bộ xử lý
Motorola 68000 và kiến trúc SPARC của SUN .
Tới năm 2000 , nhân Linux 2.4 được phổ biến . Một trong đặc điểm được quan
tâm của nhân này là nó hỗ trợ mã ký tự Unicode 32 bít , rất thuận lợi cho việc xây
dựng các giải pháp toàn diện và triệt để đối với vấn đề ngôn ngữ tự nhiên trên phạm vi
toàn thế giới .
Nhân Linux là phần mềm tự do được phân phối theo Giấy phép sở hữu công
cộng phần mềm GNU GPL ( General Public License ) .
Vật lấy phước của nhân Linux là chú chim cánh cụt - Tux .
Hình 1: Linus Torvalds và vật lấy phước chú chim cánh cụt
1.1.2. Tổ chức của nhân hệ điều hành Linux
Nhân được ví như trái tim của hệ điều hành . Về bản chất nhân cũng là một
chương trình phần mềm máy tính nhưng ở cấp độ hệ thống có vai trò điều khiển các
thành phần của hệ thống máy tính , quản lý tài nguyên của hệ thống , cung cấp một số
dịch vụ và phần mềm cơ bản cho máy tính , cung cấp môi trường thực thi có các ứng
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 4
dụng khác nhau chạy trên hệ thống . Nhân chính là cầu nối giữa phần cứng vật lý của
máy tính với và chương trình ứng dụng .
Các dịch vụ của nhân được chạy trong chế độ đặc quyền của bộ xử lý . Trái lại ,
các chương trình ứng dụng được chạy trong chế độ người dùng hoàn toàn cách ly với
hệ điều hành . Khi ứng dụng chạy trong chế độ người dùng gọi tới một dịch vụ hệ
thống thông qua một giao diện , bộ xử lý chặn lại lời gọi và thi hành dịch vụ mức nhân
hệ điều hành . Thông thường việc thi thực thi ở mức nhân đơn giản và nhanh hơn bởi
vì nó không bị chuyển giữa chế độ đặc quyền và không đặc quyền .
Nhân của Linux gồm năm tiểu hệ thống :
- Bộ phân thời gian cho tiến trình ( Process Schedule – SCHED ) :
Hoạt động của máy tính , tại một thời điểm chỉ có một lệnh được thực thi . Tuy
nhiên các hệ điều hành đa nhiệm như Windows , Linux … đều cho phép nhiều chương
trình chạy cùng một lúc . Các hệ điều hành đa nhiệm có thể làm được như vậy bằng
cách chuyển quyền thực thi qua lại giữa các chương trình thật nhanh làm cho người
dùng có cảm giác các chương trình chạy cùng lúc với nhau . Vi dụ người dùng có thể
vừa soạn thảo văn bản vừa có thể nghe . Trong hệ điều hành đa nhiệm thì bộ phân thời
gian tiến trình đảm nhiệm nhiệm vụ này .
SCHED được chia thành bốn khối :
Khối luật định thời (scheduling policy): chịu trách nhiệm phân bố xem
tiến trình ( process ) nào được quyền truy xuất CPU. Hệ thống hoạt động có
thông suốt hay không nhờ vào bộ luật này, tránh trường hợp một tiến trình lợi
dụng sơ hở của điều luật mà chiếm thời gian hệ thống quá nhiều làm các tiến
trình khác bị đóng băng (freeze) .
Khối phụ thuộc kiến trúc ( architeture-specific ): khối này gồm các mã
assembly phụ thuộc vào mỗi loại CPU dùng để tạm ngưng hoạt động của tiến
trình .
Khối độc lập kiến trúc (architeture-independent): Khối gọi các hàm từ
khối phụ thuộc kiến trúc và khối luật để chuyển giửa các tiến trình đồng thời nó
còn gọi các hàm ở MM để thiết lập bộ nhớ ảo cho các tiến trình được hồi phục
lại . Khối phụ thuộc kiến trúc sẽ khác nhau ở mỗi loại CPU (ỉ386, apha, v.v)
nhưng khối độc lập kiến trúc thì không đổi .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 5
Khối hàm gọi hệ thống ( system call ) . Gồm các hàm mà người dùng có
thể dùng để tương tác với SCHED. Khi lập trình Linux và Unix sẽ quen với các
hàm gọi hệ thống này.
- Bộ quản lý bộ nhớ ( Memory Manager - MM) :
Bộ nhớ qui ước của các máy tính chỉ có 640KB . Do BIOS chỉ quản lý được tới
FFFF , vùng nhớ cao từ A0000 trở lên dùng để ánh xạ BIOS , video card memory và
các thiết bị ngoại vi khác , vùng nhớ còn lại tử 9FFFF trở xuống tương đương với
640KB. Trong chế độ bảo vệ ( protect mode ) của CPU 32 bit đưa ra khái niệm bộ
nhở ảo ( Virtual Memory ) . Lúc này mỗi tiến trình được cấp tới 4GB bộ nhớ ảo .
Nhưng nhân hệ điều hành sẽ tạo ra một bảng mô tả từng trang của bộ nhớ ảo với bộ
nhớ vật lý . Bộ nhớ vật lý bây giờ bao gồm cả bộ nhớ RAM và vùng nhớ hoán vị trên
đĩa cứng .
- Hệ thống file ảo :
Hệ thống này không chỉ cung cấp truy suất đến hệ thống file trên đĩa cứng mà
còn tất cả các ngoại vi . Trong Linux tất cả các tập tin , thư mục và các thiết bị đều
được coi như là file . Ví dụ như máy in , cổng nối tiếp , các ổ đĩa … đều được truy cập
như là file . Linux cũng cung cấp các thuộc tính truy cập cho file và thư mục , các
thuộc tính có thể được thiết lập như cho phép đọc , cho phép ghi , cho phép thực thi .
Linux thiết lập chế độ bảo vệ đối với các file hệ thống và hạn chế quyền truy cập đối
với các thiết bị .
- Giao diện mạng ( Network Interface - NET) :
Trong nhân Linux dựng sẵn giao thức TCP/UDP , IP và Ethernet .
- Bộ truyền thong nội bộ (Inter-process communication IPC) :
Một tiến trình trong Linux giao tiếp với các tiến trình khác và với nhân hệ điều
hành thông qua một cơ chế được gọi là bộ truyền thông nội bộ - IPC . Nó cho phép các
tiến trình gửi hoặc nhận các thông điệp từ một tiến trình khác , sử dụng chung vùng
nhớ chia sẻ và đồng bộ với các tiến trình khác .
1.1.3. Tổ chức thư mục
Các file trong hệ thống Linux được đặt theo một trật tự trong các thư mục . Có
một thư mục chính trong đó chứa các thư mục con và các file .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 6
Thư mục ./bin : Chứa các file thực thi dạng nhị phân và các chương trình khởi
dộng của hệ thống được .
Thư mục ./boot : Thư mục này chứa file ảnh ( image file ) của nhân dùng cho
quá trình khởi động .
Thư mục ./dev : Thư mục này chứa các file thiết bị .
Thư mục ./etc : Thư mục này chứa các file cấu hình toàn cục của hệ thống .
Thư mục ./home : Thư mục này chứa các thư mục con đại diện cho mỗi người
dùng khi đăng nhập . Đây là nơi làm việc thường xuyên của người dùng . Khi người
quản trị tạo tài khoản cho một người dùng thì sẽ cấp cho người dùng một thư mục
cùng tên với tài khoản người dùng nằm trong thư mục /home . Người dùng cho mọi
quyền thao tác trên thư mục của mình và không ảnh hưởng đến người dùng khác .
Thư mục ./lib : Thư mục này chứa các file thư viện .so hoặc .a . Các thư viện C
và lien kết động cần cho chương trình chạy và cho toàn hệ thống .
Thư mục ./lost+found : Khi chạy chương trình fsck , nếu tìm thấy một chuỗi dữ
liệu nào thất lạc trên đĩa cứng và không lien quan đến các tập tin , Linux sẽ gom chúng
lại và đặt trong thư mục này để nếu cần người dùng có thể đọc và giữ lại dữ liệu bị mất
.
Thư mục ./mnt : Thư mục này chứa các kết gán ( mount ) tạm thời đến các ổ đĩa
hoặc thiết bị khác .
Thư mục ./sbin : Thư mục này chứa các file thực thi của hệ thống dành cho
người quản trị hệ thống .
Thư mục ./tmp : thư mục này dùng để chứa các file tạm mà chương trình tạo ra
lúc chạy . Các file này sẽ được hệ thống dọn dẹp khi các chương trình kết thúc .
Thư mục ./usr : Thư mục này chứa nhiều thư mục con như /usr/bin , /usr/local
… và đây cũng là một trong những thư mục con quan trọng của hệ thống , bên trong
thư mục con này (/usr/local) cũng chứa đầy đủ các thư mục con tương tự ngoài thư
mục gốc như sbin, lib, bin… Nếu nâng cấp hệ thống thì các chương trình người dùng
cài đặt trong thư mục /usr/local vần giữ nguyên và không sợ các chương trình bị mất
mát.
Thư mục ./var : Thư mục này chứa các file biến thiên bất thường như các file
dữ liệu đột nhiên tăng kích thước trong một thời gian ngắn sau đó lại giảm kích thước
xuống còn rất nhỏ. Điển hình là các file dùng làm hàng đợi chứa dữ liệu cần đưa ra
máy in hoặc các hàng đợi chứa thư điện tử .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 7
1.2. Hệ điều hành nhúng uClinux
Hệ điều hành uClinux là một phiên bản hệ điều hành sử dụng nhân Linux được
thiết kế cho các hệ thống nhúng sử dụng bộ vi điều khiển không có đơn vị quản lý bộ
nhớ . Là một phiên bản hệ điều hành sử dụng nhân Linux nên uClinux có kiến trúc ,
cách thức hoạt động giống như hệ điều hành Linux chạy trên các PC , phương pháp
phát triển ứng dụng cũng giống như phát triển trên môi trường hệ điều hành Linux .
Do là một hệ điều hành mã nguồn mở nên các nhà phát triển có thể cấu hình hệ điều
hành theo ý mình để tạo ra một hệ điều hành phù hợp với hệ thống cần phát triển .
1.2.1. Quá trình phát triển hệ điều hành nhúng uClinux
Dự án hệ điều hành uClinux được bắt đầu phát triển từ năm 1997 , mục đích tạo
ra hệ điều hành này là phát triển một phiên bản nhân hệ điều hành Linux 2.0 để nhúng
vào các vi điều khiển . Nó được Jeff Dionne , Kenneth Albanowski và nhóm các nhà
phát triển khác đặt vấn đề là khả năng nhúng Linux vào mạng vi điều khiển không có
đơn vị quản lý bộ nhớ , khả năng truyền thông giữa mạng đó với các hệ thống truyền
thông . Phiên bản phát hành đầu tiên của hệ điều hành này được phát hành cùng với vi
xử lý Motorola 68000 , vi xử lý này dựa trên trên vi xử lý MC68328 DragonBall
Intergrated Microprocessor nó được triển khai trong bộ điều khiển SCADA năm
1997/98 . Phiên bản này đã được cộng đồng nguồn mở phát triển và một phiên bản
khác đã được sử dụng cho Palm Pilot vào tháng 2 năm 1998 .
Trong hệ điều hành uClinux có một số thay đổi so với hệ điều hành Linux , thư
viện uC-libc được thiết kế để thay cho thư viện libc và glibc trong hệ điều hành Linux
. Một cải tiến khác đã được thực hiện bởi SnapGear là thêm một định dạng mới Binary
Flat – bFLT .
Hệ điều hành uClinux là một hệ điều hành đa nhiệm , các chương trình có thể
chạy ở nhiều mức khác nhau của hệ thống . Hệ điều hành cho phép chạy nhiều chương
trình cùng một lúc , cho phép chạy các ứng dụng đa luồng . Với việc nhúng hệ điều
hành uClinux vào các vi điều khiển đã giúp cho các nhà phát triển tạo ra các ứng dụng
dễ dàng vì phương pháp lập trình giống như trên môi trường hệ điều hành Linux . Hệ
điều hành uClinux là một hệ điều hành thời gian thực , nhà phát triển có thể chạy các
ứng dụng đa luồng trên môi trường hệ điều hành . Điều này là rất khó khi phát triển
một ứng dụng đa luồng chạy trực tiếp trên vi điều khiển không có hệ điều hành .
Nhiệm vụ chính khi phát triển hệ điều hành uClinux là cấu hình nhân hệ điều
hành cho phù hợp với hệ thống cần phát triển , biên dịch nhân , phát triển các driver
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 8
cho các ngoại vi và sau đó phát triển các ứng dụng cho hệ thống nhúng chạy trên môi
trường hệ điều hành .
1.2.2. Kiến trúc hệ điều hành uClinux
uClinux là một hệ điều hành dùng phổ biến cho các hệ thống nhúng Linux . Hệ
điều hành này được dùng cho các vi điều khiển không có đơn vị quản lý bộ nhớ . Ngày
nay nhân hệ điều hành này hỗ trợ cho rất nhiều loại nền tảng CPU khác nhau như
ColdFire , Axis ETRAX , ARM , Atari 68k và rất nhiều loại khác nữa . Giống như
Linux , uClinux cũng có hỗ trợ mạng giao thức TCP/IP và các giao thức giao tiếp
mạng khác . Nó cũng hỗ trợ các hệ thống file khác nhau và thêm vào một số dạng file
đặc biệt được thiết kế cho các hệ thống nhúng .
Để có thể chạy trên các vi điều khiển không có đơn vị quản lý bộ nhớ thì trong
nhân của hệ điều hành có một số thay đổi . Toàn bộ mã nguồn và các chức năng điều
khiển của nhân hệ điều hành của bộ quản lý bộ nhớ được loại bỏ ra khỏi mã nguồn của
nhân hệ điều hành . Một số chức năng khác cũng được điều chỉnh để phù hợp với yêu
cầu của các vi điều khiển không có đơn vị quản lý bộ nhớ .
Sự thuận lợi chính của nhân uClinux mang lại so với nhân Linux chạy trên PC
là kích thước của nhân . Khi biên dịch nhân , nhà phát triển phải thiết lập các lựa chọn
biên dịch như hỗ trợ loại vi xử lý , hệ thống file và hỗ trợ các thiết bị của nhân làm sao
để kich thước của nhân giảm xuống còn khoảng 400 KB . Tuy nhiên vào lúc khởi động
, thì nhân của hệ điều hành sẽ yều cầu khoảng không gian bộ nhớ khoảng một
megabyte . Trong thực tế kích thước bộ nhớ cần khoảng 2MB vì còn cần cho các ứng
dụng . Với hệ điều hành uClinux , kích thước ảnh nhân hệ điều hành được điều chỉnh
khoảng từ 500 tới 900 KB .
Tương tự như mã nguồn hệ điều hành Linux , mã nguồn của hệ điều hành
uClinux cũng có thể tải miễn phí . Mã nguồn hệ điều hành này cũng thuộc bản quyền
GNU GPL , và giống như các tất cả các ứng dụng khác gói mã nguồn của nhân cũng
bao gồm đầy đủ mã nguồn và các thư viện kèm theo . Mã nguồn hệ điều hành uClinux
và các công cụ cần thiết có tìm tại website www.uclinux.org . Từ website này các nhà
phát triển có thể tải gói phân phối củ hệ điều hành bao gồm mã nguồn nhân hệ điều
hành uClinux , các thư viện , một số ứng dụng đã được phát triển , những thông báo lỗi
và những lỗi đã được sửa .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 9
1.2.3. Các thư viện sử dụng để phát triển hệ điều hành uClinux
uClinux sử dụng một phần của thư viện C chuẩn , đó là thư viện cơ sở để phục
vụ cho việc phát triển nhân uClinux . Thư viện này dựa trên thư viện C Linux – 8086
nhưng đã đã được thu nhỏ thành một thư viện súc tích phù hợp với vi điều khiển . Thư
viện uClibc đã được tạo ra hỗ trợ cho các vi điều khiển không có đơn vị quản lý bộ
nhớ như Dragonball , ColdFire , ARM … thư viện vẫn hỗ trợ kiến trúc Linux chuẩn .
uClinux cũng cung cấp hoàn toàn thư viện Linux chuẩn libC API .
Để phát triển uClinux , nhà phát triển có thể lựa chọn giữa hai thư viện libc là
uC-libc và uClibc . Thư viện uClibc giống như thư viện glibc phát triển cho Linux ,
các hàm của glibc cũng được áp dụng cho uClibc . Ngoài ra gói mã nguồn của uClinux
còn có một sô thư viện khác như : libatm hỗ trợ truyền dữ liệu không đồng bộ , libjpeg
hỗ trợ cho định dạng ảnh nén JPEG , libm hộ trợ các thư viện toán học , libnet hỗ trợ
các API để thao tác mạng .
1.2.4. Driver của các ngoại vi
Driver là các trình quản lý , điều khiển các ngoại vi , cung cấp các hàm cho
phép người dùng để có thể điều khiển tới các thành phần ngoại vi . Các driver được
chia làm ba lớp :
- Character driver : Lớp này được sử dụng rộng rãi từ các ứng dụng đơn
giản đến các ứng dụng phức . Ví dụ ứng dụng đơn giản như driver điều khiển
LED , ứng dụng phức tạp như driver Firewire , driver USB . Character driver
đọc và ghi dữ liệu trực tiếp tới thiết bị mà không có bộ nhớ đệm .
- Block driver : Lớp này giao tiếp tới hệ thống file và được sử dụng để
kết nối các phân vùng đĩa , các thiết bị vào file hệ thống . Khác với character
driver , block driver thường đọc ghi dữ liệu với thiết bị thông qua bộ đệm .
- Network driver : Loại này có nhiều cấu trúc khác nhau , hỗ trợ truyền
thông , sử dụng các Port và các Socket để định tuyến các gói dữ liệu .
Thông thường chương trình ứng dụng không được truy cập , đọc hoặc ghi trực
tiếp tới các thiết bị ngoại vi . Khi cần giao tiếp với các ngoại vi , chương trình ứng
dụng sẽ sử dụng các driver để giao . Các driver có thể là một module hoặc là được liên
kết tĩnh vào nhân . Driver được đăng ký với nhân hệ điều hành trong khi module khởi
tạo tiến trình . Driver sẽ đăng ký các thành phần :
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 10
- Bảng Fops .
- Chỉ số Major .
- Device Class ( Block hoặc Char ) .
- Name – tên driver .
1.2.5. Mã nguồn hệ điều hành uClinux
Mã nguồn của uClinux có thể tải về từ địa chỉ www.uclinux.org , ở địa chỉ này
cũng cấp các phiển bản khác nhau của hệ điều hành uClinux . Toàn bộ mã nguồn
uClinux được chứa trong một file nén . Khi được giả nén , gói mã nguồn được tạo ra
thành cấu trúc hình cây gồm các thư mục và tất cả các thư mục này đều được chứa
trong thư mục chính là uClinux-dist . Đó là mã nguồn của hệ điều hành uClinux và cần
biên dịch tạo ra một file ảnh để đưa vào hệ thống cần phát triển . File nén chứa mã
nguồn uClinux được đặt tên theo một định dạng chuẩn như sau uClinux-dist-
YYYYMMDD.tar.gz trong đó YYYY là năm , MM là tháng , DD là ngày .
Trong khóa luận này em sử dụng mã nguồn hệ điều hành uClinux với phiên bản
nhân Linux là linux-2.4 . Sau khi giải nén file mã nguồn , các thư mục có trong thư
mục chính uClinux-dist gồm các thư mục :
- bin : các tiện ích để tạo ra file flash.bin .
- Documention : tài liệu chi tiết của uClinux .
- tools : các công cụ để biên dịch .
- user : ứng dụng của người dùng và mã nguồn các ứng dụng đó .
- freeswan : các chương trình bảo mật , mã hóa .
- lib : Chứa các thư viện cho ứng dụng .
- linux-2.4.x : mã nguồn nhân uClinux .
- uClibc : thư viện C .
- config : Cấu hình hệ thống file uClinux . vv…
- romfs : Cấu trúc hệ thống file của ROM , bao gồm ứng dụng , các file
thiết bị . Thư mục này được tạo ra khi biên dịch .
- vendor : Chứa tên các thư mục của các loại vi xử lý mà hệ điều hành hỗ
trợ .
- images : Sau khi biên dịch , thư mục này chủa nhân dạng nhị phân của
hệ điều hành , file ROM , và file ảnh .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 11
Hình 2 : các thưc mục con và các file của thư mục uClinux-dist .
Trong thư mục ROM chứa các thư mục con , cấu trúc thư mục con này chính là
cấu trúc thư mục của hệ điều hành uClinux khi chạy trên hệ thống nhúng . Và cấu trúc
cũng giống như cấu trúc thư mục cơ bản của hệ điều hành Linux chuẩn . Các thư mục
đó là : bin , dev , etc , home , lib , mnt , proc , tmp , usr , var ...
Hình 3 : các thư mục trong thư mục romfs .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 12
Chương 2 . Vi điều khiển S3C44B0X và kit phát triển
Hệ thống nhúng được xây dựng trên cơ sở liên kết giữa phần mềm và phần
cứng . Sự phát triển phần mềm phải dựa trên phần cứng , phần mềm sự điều khiển toàn
bộ hoạt động của phần cứng nên việc tìm hiểu rõ phần cứng cũng rất quan trọng đặc
biệt nắm rõ phần cứng sẽ giúp cho quá trình cấu hình hệ điều hành uClinux , viết
driver cho ngoại vi và xây dựng các ứng dụng chính xác và nhanh hơn .
2.1. Vi điều khiển S3C44B0X
Giống như các dòng vi điều khiển khác như 8051 , AVR , PIC , PSoC , v.v ,
S3C44B0X được xây dựng từ một CPU và được bổ sung thêm các ngoại vi như bổ
sung bộ nhớ , cấc cổng vào ra , các bộ định thời … Nên việc tìm hiểu vi điều khiển
S3C44B0X cũng giống như tìm hiểu các dòng vi điều khiển khác . Việc tìm hiểu sẽ đi
vào chi tiết các khối cấu thành nên vi điều khiển .
S3C44B0X là một vi điều khiển của hãng Samsung , đây là một vi điều khiển
rất mạnh , có nhiều đặc tính ưu việt . Vi điều khiển này được dùng trong các hệ thống
nhỏ nhưng đòi hỏi tính toán phức tạp và cần tốc độ cao , các ứng dụng thường sử dụng
như các thiết bị cầm tay , thiết bị cần xử lý tín hiệu số và tất nhiên vi điều khiển này
cũng được dùng trong các ứng dụng bình thường như các loại vi điều khiển khác .
S3C44B0X là vi điều khiển thuộc dòng vi điều khiển sử dụng nhân vi xử lý
ARM . Cũng giống như một số hãng khác như Philipe , Atmel … , hãng Samsung sử
dụng nhân vi xử lý ARM7TDMI được thiết kế bởi hãng Advanced RISC Machines –
ARM sau đó thiết kế một số ngoại vi để tạo nên một chip vi điều khiển . S3C44B0X
được tích hợp một số khối chức năng đặc biệt giúp cho việc thiết kế hệ thống trở nên
đơn giản hơn , giảm chi phí cho hệ thống .
2.1.1. Các đặc điểm của vi điều S3C44B0X
2.1.1.1. Kiến trúc :
- Được tích hợp trong các thiết bị cầm tay , di động và các ứng dụng nói chung .
- Sử dụng nhân vi xử lý ARM7TDMI được thiết kế theo kiến trúc RISC 16/32-bit
.
- Tích hợp chế độ gỡ rối trên chip thông qua chuẩn JTAG .
- Tích hợp bộ nhân bằng phần cứng 32x8 bit .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 13
- Sử dụng kiến trúc bus SAMBA ( SAMSUNG’s ARM CPU Embedded Micro-
controller Bus Architecture ) làm giảm công suất tiêu thụ của vi điều khiển .
2.1.1.2. Quản lý hệ thống :
- Hộ trợ Little endian – Byte thấp được lưu ở địa chỉ thấp , byte cao được lưu ở
địa chỉ cao và Big endian – Byte thấp được lưu ở địa chỉ cao , byte cao được
lưu ở địa chỉ thấp .
- Không gian địa chỉ là 32Mbytes trên mỗi băng . Tổng cộng là 256Mbytes .
- Hỗ trợ khả năng lập trình 8/16/32- bit độ rộng bus dữ liệu cho mỗi băng .
- Cố định đĩa chỉ bắt đầu và khả trình kích thước băng cho tất cả 7 băng .
- Địa chỉ bắt đầu và kích thước của mỗi băng có thể lập trình được .
- Có 8 băng nhớ :
6 băng nhớ cho ROM , SRAM , và các loại khác .
2 băng nhớ cho ROM /SRAM/DRAM( Fast page , EDO ,
Synchronous DRAM ).
- Hỗ trợ đợi tín hiệu bên ngoài cho tới khi kết thúc chu kỳ bus .
- Hỗ trợ chế độ làm tươi DRAM/SDRAM .
- Hỗ trợ chế độ địa chỉ đối xứng / không đối xứng của DRAM .
2.1.1.3. Bộ nhớ cache và SRAM nội :
- 0/4/8 Kbyte SRAM nội được sử dụng khi mà bộ nhớ cache không được dùng .
- Nội dụng chuyển giữa bộ nhớ chính và bộ nhớ cache được duy trì thông qua bộ
bảo vệ .
2.1.1.4. Bộ quản lý Clock và nguồn :
- Vi điều khiển tiêu thụ công suất thấp .
- Có bộ PLL để tao tín hiệu xung nhịp điều khiển hệ thống lên tới tốc độ tối đa
66MHz .
- Tín hiệu clock có thể được chọn cho mỗi khối chức năng và được thiết lập bằng
phần mềm .
- Các chế độ : Normal – chế độ hoạt động bình thường , slow – chế độ hoạt động
tần số thấp không có PLL , idle- stop clock cho CPU , stop – stop toàn bộ tín
hiệu clock .
- Khi có tín hiệu ngắt từ ngắt ngoài EINT[7:0] hoặc ngắt cảnh báo của bộ thời
gian thực thì vi điều khiển trở về trạng thái bình thường .
2.1.1.5. Ngắt của vi điều khiển :
- Vi điều khiển có 30 nguồn ngắt ( watch-dog timer , 6 timer , 6 UART , 8 ngắt
ngoài , 4 DMA , 2 RTC ,1 ADC , 1 IIC ,1SIO ) .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 14
- Hộ trợ ngắt ngoài theo mức và theo sườn tín hiệu .
- Chế độ ngắt theo sườn và theo mức có thể chọn bằng lập trình .
- Hộ trợ FIQ ( Fast Interrupt request ) khi có yêu cầu ngắt ngay tức khắc .
2.1.1.6. Timer có điều chế độ rộng xung :
- 5 kênh Timer điều chế độ rộng xung 16 bit . 1 kênh timer nội 16 bit có DMA
hoặc ngắt .
- Hỗ trợ nguồn clock bên ngoài .
2.1.1.7. Đồng hồ thời gian thực RTC ( Real Time Clock ) :
- Đồng hồ thời gian thực hỗ trợ : mini giây , giây , phút , giờ , ngày , tuần , tháng
, năm .
- Hoạt động vời tần số 32.768 KHz .
- Có ngắt cảnh báo để đánh thức CPU .
- Ngắt timer tick .
2.1.1.8. Các IO Port :
- 8 port ngắt bên ngoài .
- 71 port I/O .
2.1.1.9. UART :
- 2 kênh UART có DMA và ngắt.
- Hỗ trợ chuẩn dữ liệu truyền nhận 5 , 6 , 7 , 8 bit .
- Có bắt tay bằng phần cứng .
- Tốc độ baud có thể thiết lập bằng phần mềm .
- Hỗ trợ giao tiếp hồng ngoại IrDA 1.0 ( 115.2 kbps) .
- Mỗi kênh UART có 2 bộ nhớ đệm bên trong 32 byte FIFO cho Rx và Tx .
2.1.1.10. Bộ điều khiển DMA – Direct Memory Access :
- 2 kênh điều khiển DMA cho mục đích chung không chịu sự can thiệp bởi CPU.
- 2 kênh điều khiển DMA cho ngoại vi .
- Hộ trợ DMA giữa các cổng vào ra tới bộ nhớ và từ bộ nhớ tới các cổng vào ra .
DMA có thể được yều bởi phần mềm , 4 khối chức năng bên trong ( UART ,
SIO , Timer , IIS) và từ các chân bên ngoài .
- Mức ưu tiên thứ tự giữa các DMA có thể thiết lập bằng phần mềm .
- Tăng tốc độ truyền trên FPDRAM , EDODRAM và SDRAM .
2.1.1.11. Bộ biến đổi A/D :
- 8 kênh ADC .
- Tốc độ lấy mẫu tối đa 100KSPS/10-bit .
2.1.1.12. Khối điều khiển LCD :
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 15
- Hỗ trợ LCD đen trắng , màu và xám .
- Hỗ trợ quét liên tục và quét xem kẽ .
- Hộ trợ chức năng màn hình ảo .
- Sử dụng bộ nhớ hệ thống làm bộ nhớ hiển thị .
- Sử dụng DMA để truyền dữ .
- Kích thước màn hình có thể chọn bằng chương trình .
- Hỗ trợ màn hình Gray 16 mức .
- Hỗ trợ 256 màu .
2.1.1.13. Watchdog timer :
- Có Watchdog timer 16 bit .
- Có yêu cầu ngắt hoặc khởi động lại hệ thống sau một khoảng thời gian .
2.1.1.14. Giao tiếp bus IIC :
- 1 kênh Multi- Master IIC-Bus có điều khiển ngắt .
- Truyền nối tiếp , truyền dữ liệu 8 bit theo một chiều , hai chiều tốc độ lên tới
100 Kbit/s trong chế độ chuẩn ( standard mode ) và 400Kbit/s trong chế độ
nhanh ( fast mode) .
2.1.1.15. Giao tiếp bus IIS :
- Một kênh IIS-bus cho giao tiếp audio có điều khiển DMA .
- Truyền nối tiếp , 8/16 bit cho mỗi kênh truyền dữ liệu .
- Hộ trỡ định dạng dữ liệu MSB .
2.1.1.16. Truyền nối tiếp đồng bộ SIO ( Synchronous Serial I/O ) :
- Một kênh SIO có điều khiển DMA và ngắt .
- Tốc độ baud có thể lập trình được .
- Hỗ trợ điều khiển truyền nhận dữ liệu 8 bit trong SIO .
2.1.1.17. Tần số hoạt động của hệ thống :
Tần số lên tới 66 MHz .
2.1.1.18. Dải điện áp cấp cho vi điều khiển :
- Cung cấp cho nhân vi xử lý là 2.5V .
- Cung cấp cho các cổng vào ra là 3V – 3.6V .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 16
2.1.2. Sơ đồ chân
Hình 4 : Sơ đồ chân của vi điều khiển S3C44B0X
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 17
2.1.3. Sơ đồ khối
Hình 5: Sơ đồ khối vi điều khiển S3C44B0X
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 18
2.1.4. Chức năng một số khối chính
3.1.4.1. Lõi vi xử lý ARM7TDMI
Đóng vai trò là bộ não của S3C44B0X , lõi vi xử lý ARM7TDMI phải đảm bảo
cho chương trình hoạt động , phải có khả năng truy cập vào bộ nhớ , thực hiện các
phép tính , điều khiển ngoại vi và quản lý ngắt .
Lõi vi xử lý ARM7TDMI là một thành viên trong họ vi xử lý ARM .
ARM7TDMI là dòng vi xử lý 32 bit , rất mạnh , tiêu tốn công suất thấp , hỗ trợ tập lập
32 bit và 16 bit . Kiến trúc của ARM7TDMI được dựa trên kiến trúc RISC , với kiến
trúc này việc giải mã mã máy đơn giản hơn rất nhiều so với kiến trúc CISC do đó làm
tăng tốc độ thực thi lệnh , đáp ứng được tính thời gian thực của các ngắt . ARM7TDMI
được áp dụng kỹ thuật xử lý đường ống trong việc xử lý lệnh và được chia làm ba giai
đoạn : nạp lệnh – fetch , giải mã lệnh – decode và thực thi lệnh – execution . Trong ký
thuật xử lý đường ống , khi một lệnh đang được thực thi thì lệnh thứ hai đang được
giải mã lệnh và lệnh thứ ba bắt đầu được nạp từ bộ nhớ . Với kỹ thuật này thì tốc độ xử
lý tăng lên rất nhiều , trong một chu kỳ máy CPU làm được nhiều việc . Hỗ trợ tới
4Gbytes không gian địa chỉ tuyến tính , sử dụng kiến trúc Von Neumann để nạp và lưu
trữ lệnh và dữ liệu , dùng chung một bus 32 bit cho cả dữ liệu và lệnh . ARM7TDMI
hỗ trợ nhiều loại dữ liệu , do là dòng vi xử lý 32 bit nên một từ ( word ) sẽ tương
đương với 32 bit , các loại dữ liệu như word – 32 bit , halfword – 16 bit , byte – 8 bit .
Có bộ nhân phần cứng 32x8 bit trong một chu kỳ . Hỗ trợ gỡ rối chương trình trên chip
thông qua chuẩn JTAG .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 19
Hình 6 : Sơ đồ khối của lõi vi xử lý ARM7TDMI.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 20
Hình 7 : Các khối logic của ARM7TDMI.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 21
Hình 8: Sơ đồ các tín hiệu vào ra của ARM7TDMI .
a. Các chế độ hoạt động :
- User : Thực hiện các chương trình bình thường .
- FIQ : Hỗ trợ việc truyền dữ liệu và các kênh xử lý .
- IRQ : Được sử dụng cho việc xử lý các ngắt mục đích chung .
- Supervisor (svc) : Đây là chế độ bảo vệ dùng cho hệ điều hành .
- Abort mode (abt) : Được nhập vào sau khi dữ liệu hoặc lệnh được bỏ qua
tiền nạp .
- System ( sys ) : Chế độ đặc quyền người dùng dùng cho hệ điều hành .
- Undefined ( und ) : Được nhập vào khi một lệnh không xác định được thực
thi.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 22
Các chế độ này có thể được thiết lập bằng phần mềm hoặc thông qua các ngắt
bên ngoài hoặc thông qua quá trình xử lý ngoại lệ . Phần lớn các chương trình ứng
dụng được thực thi trong chế độ User .Mỗi chế độ điều khiển đều có các băng thanh
ghi hỗ trợ để tăng tốc độ bắt các ngoại lệ . Chế độ FIQ có năm băng thanh ghi hỗ trợ từ
r8_fiq đến r12_fiq làm tăng tốc độ xử lý các ngắt .
b. Các thanh ghi :
ARM7TDMI có tất cả 37 thanh ghi , trong đó có 31 thanh ghi dùng cho mục
đích chung 32 bit , và 6 thanh ghi trạng thái .
Các thanh ghi được sử dụng trong trạng thái ARM ( The ARM-state register
set ):
Trong trạng thái ARM , 16 thanh ghi chung và một hoặc hai thanh ghi trạng
thái có thể được sử dụng ở mọi thời điểm . Trong chế độ đặc quyền , băng thanh ghi
ứng với chế độ cụ thể sẽ được thiết lập .
Bảng các thanh dùng chung được sử dụng tương ứng với mỗi chế độ hoạt động :
Bảng các thanh ghi trạng thái chương trình
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 23
Các thanh ghi dùng trong trạng thái lệnh rút gọn ( The Thumb-state register
set) :
Bảng các thanh ghi dùng được sử dụng tương ứng với mỗi chế độ hoạt động :
Bảng các thanh ghi trạng thái chương trình
Mối liên hệ các thanh ghi giữa ARM –state và Thumb-state :
- Các thanh ghi từ r0 đến r7 của Thumb-state giống như các thanh ghi r0
đến r7 của ARM-state .
- Thanh ghi CPSR và các thanh ghi SPSR của Thumb-state giống với các
thanh ghi SPSR và các thanh ghi SPSR của ARM-state .
- Thanh ghi SP của Thumb-state được ánh xạ tới thanh ghi r13 của ARM-
state .
- Thanh ghi LR của Thumb-state được ánh xạ tới thanh ghi r14 của ARM-
state .
Các băng thanh ghi
Các băng thanh ghi
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 24
- Thanh ghi PC của Thumb-state được ánh xạ tới thanh ghi PC(r15) của
ARM-state.
Hình 9 : Sơ đồ ánh xạ các thanh ghi của Thumb-sate và ARM-state .
Các thanh ghi trạng thái chương trình
Lõi vi xử lý ARM7TDMI bao gồm một thanh ghi CPSR và năm thanh ghi
SPSR lưu giữ trạng thái các ngoại lệ . Mục đích của các thanh ghi trạng thái là :
- Nắm giữ thông tin mới được thực hiện bởi bộ tính toán ALU .
- Điều khiển cho phép hoặc vô hiệu hóa các ngắt .
- Thiết lập trạng thái hoạt động của vi xử lý .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 25
Hình 10 : định dạng các bit của thanh ghi trạng thái .
- Các cờ điều kiện ( Condition code flags ) :
Các bit N , Z , C và V là mã các cờ điều kiện , các bit này có thể thiết lập bằng
các số hoặc bằng các toán từ logic . Chúng cũng có thể được thiết lập bằng các lệnh
MSR hoặc LDM . Vi xử lý ARM7TDMI kiểm tra các cờ này để quyết định xem lệnh
có thực thi hay không .
- Các bit điều khiển :
Tám bit thấp của một thanh ghi trạng thái chương trình là các bit điều khiển .
Chúng có thể là : các bit vô hiệu hóa ngắt , bit T, các bit thiết lập chế độ . Các bit điều
khiển này thay đổi khi xuất hiện một ngoại lệ . Khi vi xử lý hoạt động ở chế độ đặc
quyền thì phần mềm có thể thao tác với các bit này .
Các bit vô hiệu hóa ngăt : Hai bit I và F là các bit vô hiệu hóa ngắt . Khi bit I
được đặt là 1 thì các ngắt IRQ bị vô hiệu hóa . Khi bit F được đặt là 1 thì các
ngắt FIQ bị vô hiệu hóa .
Bit T : Bit này phản ánh trạng thái hoạt động : khi bit T được đặt là 1 thì bộ vi
xử lý thực thi trong Thumb-state . Khi bit t đặt là 0 thì bộ vi xử lý thực thi
trong ARM-state .
Các bit thiết lập chế độ : các bit M[4:0] qui định trạng chế độ hoạt động của vi
xử lý .
Bảng giá trị các bit thiết lập chế độ của thanh ghi trạng thái chương trình
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 26
- Các bit dữ trữ :
Các bit này chưa được sử dụng , khi mà các bit cờ hoặc các bit điều khiển thay đổi
giá trị thì các bit dữ trữ này không thay đổi .
3.1.4.2. Các cổng vào ra
S3C44B0X có tất cả 71 chân vào ra đa chức năng , và các chân này được chia
thành các cổng :
- Hai cổng vào ra 9 bit ( Port E và port F) .
- Hai cổng vào ra 8 bit ( Port D và port G) .
- Một cổng vào ra 16 bit ( Port C ) .
- Một cổng ra 10 bit ( Port A) .
- Một cổng ra 11 bit ( Port B) .
Mỗi cổng có thể cấu hình dễ dàng bằng phần mềm để phù hợp với các hệ thống
và phù hợp với yêu cầu thiết kế .Các chức năng của mỗi chân được sử dụng phải được
định nghĩa trước khi chương trình chính bắt đầu . Nếu mà trên một chân nhiều chức
năng không được sử dụng , thì chân đó có thể được cấu hình giống như các cổng vào
ra bình thường . Bình thường các chân này đã được cấu hình mặc định để tránh xẩy ra
các vấn đề xung đột .
Các cổng của S3C44B0X có các thanh ghi bao gồm thanh ghi cấu hình , thanh
ghi dữ liệu , thanh ghi thiết lập trở treo , thanh ghi điều khiển ngắt bên ngoài.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 27
- Thanh ghi cấu hình ( Port Configuration Register – PCONA-G ) : Phần lớn các
chân trên một cổng đều có nhiều chức năng , do đó chức năng cho mỗi chân phải được
lựa chọn khi sử dụng . Thanh ghi PCONn sẽ quyết định chức năng được sử dụng cho
từng chân .
- Thanh ghi dữ liệu ( Port Data Register - PDATA-C) : Nếu các cổng được cấu
hình là các cổng ra , dữ liệu có thể có thể được ghi vào thanh ghi PDATn tương ứng
từng bit . Nếu mà các cổng được cấu hình là các cổng vào thì dữ liệu có thể được đọc
từ thanh ghi PDATn .
- Thanh ghi thiết lập trở kéo ( Port Pull-up Register PUPC-G ) : Thanh ghi này
thiết lập việc cho phép hoặc vô hiệu hóa các cổng có trở kéo hay không . Ứng với từng
bit của thanh ghi này nếu mà được đặt là 0 , thì ứng với bit đó trên cổng có trở kéo và
nếu được đặt là 1 thì ứng với bit đó trên cổng không có trở kéo .
Bảng các địa chỉ các thanh ghi của các cổng :
Thanh
ghi
Địa chỉ Chức năng R/W Giá trị mặc đinh
PCONA 0x01D20000 Cấu hình chân cổng A R/W 0x3ff
PDATA 0x01D20004 Thanh ghi dữ liệu cổng A R/W Không định trước
PCONB 0x01D20008 Cấu hình chân cổng B R/W 0x7ff
PDATB 0x01D2000C Thanh ghi dữ liệu cổng B R/W Không định trước
PCONC 0x01D20010 Cấu hình chân cổng C R/W 0xAAAAAAAA
PDATC 0x01D20014 Thanh ghi dữ liệu cổng C R/W Không định trước
PUPC 0x01D20018 Cấu hình trở kéo cổng C R/W 0x0
PCOND 0x01D2001C Cấu hình chân cổng D R/W 0x0000
PDATD 0x01D20020 Thanh ghi dữ liệu cổng D R/W Không định trước
PUPD 0x01D20024 Cấu hình trở kéo cổng D R/W 0x0
PCONE 0x01D20028 Cấu hình chân cổng E R/W 0x0000
PDATE 0x01D2002C Thanh ghi dữ liệu cổng E R/W Không định trước
PUPE 0x01D20030 Cấu hình trở kéo cổng E R/W 0x0
PCONF 0x01D20034 Cấu hình chân cổng F R/W 0x0000
PDATF 0x01D20038 Thanh ghi dữ liệu cổng F R/W Không định trước
PUPF 0x01D2003C Cấu hình trở kéo cổng F R/W 0x0
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 28
PCONG 0x01D20040 Cấu hình chân cổng G R/W 0x0000
PDATG 0x01D20044 Thanh ghi dữ liệu cổng G R/W Không định trước
PUPG 0x01D20048 Cấu hình trở kéo cổng G R/W 0x0
- Thanh ghi điều khiển ngắt ngoài ( External Interrupt Control Register ) : Thanh
ghi EXTINT cấu hình tín hiệu ngắt như ngắt xảy ra ở mức thấp , ngắt xảy ra ở mức
cao , ngắt xảy ra khi có xuất hiện sườn lên của xung , ngắt xảy ra khi xuất hiện sườn
xuống của xung và xẩy ra khi xuất hiện của hai dạng sườn xung .
Thanh ghi EXTINT cấu hình trạng thái tín hiệu ngắt cho tám nguồn ngắt bên
ngoài .
Hình 11 : Địa chỉ thanh ghi EXTINT và các giá trị mặc định .
Hình 12 : Các giá trị các bit của thanh ghi EXTINT ứng với các ngắt ngoài
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 29
3.1.4.3. Xung nhịp hệ thống
Bộ tạo xung nhịp bên trong S3C44B0X có thể tạo tín hiệu xung nhịp cung cấp
cho CPU và các ngoại vi . Bộ tạo xung nhịp có thể được điều khiển để cung cấp hoặc
ngắt tín hiệu xung nhịp tới mỗi khối ngoại vi bằng khóa S/W . Nguồn xung nhịp chính
có thể lấy từ thạch anh bên ngoài hoặc từ tín hiệu xung nhịp bên ngoài . Bộ tạo xung
nhịp có một bộ dao động được nối tới thạch anh bên ngoài , và có một bộ PLL ( Phase
– Locke - Loop ) để tạo ra xung nhịp có tần số cao từ tần số thấp của bộ dao động theo
yêu cầu của S3C44B0X .
Hình 13 : Sơ đồ khối bộ tạo xung nhịp
Hình 14 : Sơ đồ khối bộ PLL ( Phase Locked Loop).
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 30
Hình 15 : Mạch tạo dao động bằng thạch anh và bằng nguồn dao động bên ngoài
3.1.4.4. Bộ điều khiển truy cập bộ nhớ trực tiếp – DMA .
Vi điều khiển S3C44B0X có bốn kênh điều khiển DMA . Hai kênh DMA được
gọi là ZDMA được gắn vào SSB ( Samsung System Bus ) vào hai kênh DMA được
gọi là BDMA là cầu nối giữa hài SSB và SPB ( Samsung Peripheral Bus ) . Hai điều
kênh điều khiển ZDMA truyền dữ liệu giữa bộ nhớ và bộ nhớ . Hai kênh điều khiển
BDMA truyền dữ liệu qua lại giữ ngoại vi vào ra và bộ nhớ . Các bus SPB như SIO ,
IIS ,UART . Như có DMA nên việc truyền dữ liệu không cần sự can thiệp của CPU .
Hình 16 : Sơ đồ khối bộ điều khiển ZDMA.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 31
Hình 17: Sơ đồ khối bộ điều khiển BDMA.
3.1.4.5. Các bộ định thời
S3C44B0X có sáu bộ định thời 16 bit , mỗi bộ định thời có thể hoạt động dựa
trên chế độ ngắt hoặc DMA . Các bộ định thời 0 , 1, 2, 3 và 4 có chức năng tạo độ rộng
xung . Bộ định thời 5 là một bộ định thời bên trong và không có chận ra . Nguồn xung
nhịp chính của hệ thống được đưa qua bộ prescaler 8 bit và qua các bộ chia tần sau đó
mới được đưa đến các bộ định thời . Thông qua bộ chia tần nguồn xung nhịp cấp cho
các bộ định thời có thể điều chỉnh tần số rễ dàng . Ngoài chức năng điều chế độ rộng
xung ra , các bộ định thời của S3C44B0X còn có hai bộ đệm , khi thay đổi giá trị của
bộ định thời thì giá trị đó được tự động nạp vào vào quá trình hoạt động lần tiếp theo
nó không làm ảnh hưởng hay làm dừng hoạt động hiện tại . Các bộ định thời có khả
năng tự động nạp lại giá trị đếm .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 32
Hình 18 :Sơ đồ khối các bộ định thời .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 33
2.2. Kit phát triển HT44B0
Hình 19: kit phát triển HT44B0
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 34
Hình 20: Sơ đồ khối Kit phát triển
Sơ đồ nguyên lý của kit HT44B0 có trong tài liệu kèm theo .
Một số đặc điểm của HT44B0 :
- Dùng vi điều khiển S3C44B0X ( Samsung) có nhân vi xử lý ARM7TDMI .
- Có 2MB bộ nhớ Flash .
- Cổng Ethernet 10M , dùng chíp RTL8019AS .
- Có màn hình LCD graphics , kích thức 320x240 đen trắng .
- Có cổng USB 1.1 , dùng chíp PDIUSBD12 .
- Có 2 cổng RS232 .
- Có cổng IDE .
- Có loa .
- Có JTAG để gỡ rối chương trình trên chíp .
- Hỗ trợ hệ điều hành nhúng UCOSII và uClinux .
Kit HT44B0 đã được nạp sẵn BIOS ngoài ra nhà sản xuất cũng cung cấp mã
nguồn BIOS cho phép người phát triển có thể sửa đổi . BIOS cung cấp cho các lệnh
cho phép thực hiện các tùy biến :
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 35
- help ------ Hiển thị trợ giúp .
- ? ------ Tương đương với lệnh help
- date ------ Hiển thị và thiết lập ngày tháng năm cho hệ thống
- time ------ Hiển thị và thiết đặt giờ phút giây cho hệ thống .
- setweek ------ Thiết đặt tuần của hệ thống .
- clock ------ Hiển thị tần số hoạt động của hệ thống .
- setmclk ------ Thiết lập tần số của hệ thống .
- setbaud ------ Thiết lập tốc độ baud .
- load ------ Nạp file ra bộ nhớ .
- comload ------ nạp file từ cổng nối tiếp .
- prog ------ Ghi chương trình vào bộ nhớ Flash.
- boot ------ Thực hiện khởi động từ Flash .
- ap ------ Tự động nạp file ảnh chương trình và ghi vào bộ nhớ flash .
copy ------ Sao chép bộ nhớ Flash từ địa nguồn vào địa chỉ đích .
- ipcfg ------ Hiển thị và đặt địa chỉ IP .
- run ------ Chạy chương trình từ một địa chỉ trong RAM .
- move ------ Chuyển dữ liệu trong bộ nhớ Flash ra RAM .
Kết nối kit với máy tính : Các kết nối giữa HT44B0 bào gồm kết nối JTAG ,
kết nối cổng RS232 , kết nối Ethernet .
- Kết nối JTAG : Ghép nối giữa chân JTAG của kit với cổng LPT của máy tính
thông qua cáp JTAG . Thông qua kết nối này , người lập trình có thể viết chương
trình sau đó có thể chạy trình và thực hiện gỡ rối ngay trên chíp . Nhờ vậy mà việc
phát triển chương trình nhanh hơn và trực quan hơn .
- Kết nối giữa cổng RS232 của máy tính với cổng COM1 của kit : nhờ kết nối
này người sử dụng dùng chương trình Hyper Terminal của hệ điều hành Windows
như một màn hình hiển thị và nhập dữ liệu , còn trên trên kit quá trình truyền nhận
được điều khiển bởi BIOS .
- Kết nối ethernet : BIOS trên HT44B0 hỗ trợ một mini FTP , nên thông qua
ethernet ta có thể đẩy file từ máy tính vào bộ nhớ flash sau đó nhờ sự điều khiển
của BIOS sẽ lưu file vào một địa chỉ xác định trên bộ nhớ flash .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 36
Phần B : Thực nghiệm
Chương 3 . Biên dịch mã nguồn uClinux và xây dựng ứng
dụng
3.1. Biên dịch mã nguồn hệ điều hành uClinux
Quá trình biên dịch nhân uClinux cũng giống như quá trình biên dịch nhân hệ
Linux bình thường . Trong mã nguồn uClinux , các nhà phát triển đưa vào rất nhiều
thư viện , chương trình ứng dụng , driver cho các thiết bị … nếu mà biên dịch hết toàn
bộ mã nguồn thì kích thước file ảnh của hệ điều hành rất lớn và có những thư viện ,
chương trình , hoặc các driver mà hệ thống không cần đến . Để phù hợp cho từng hệ
thống thì uClinux hỗ trợ các lựa chọn cấu hình những mã nguồn cần biên dịch và các
bộ xử lý khác nhau . Khi tiến hành biên dịch người sử dụng thiết lập các lựa chọn mà
khi biên dịch xong hệ điều hành uClinux hỗ trợ .
3.1.1. Môi trường và các công cụ cần để biên dịch
Để tiến hành biên dịch uClinux để tạo ra file ảnh ROM , ta cần có môi trường
và các công cụ để tiến hành biên dịch . Trong khóa luận này em đã sử dụng môi trường
để biên dịch là môi trường Linux của hệ điều hành RedHat . Các công cụ để biên dịch
được đóng gói trong gói arm-elf-tools-20030314.sh . Trước tiên toàn bộ các công cụ
biên dịch này được cài đặt vào hệ điều hành RedHat . Để cài đặt ta vào terminal và gõ
lệnh ./ arm-elf-tools-20030314.sh .Khi quá trình cài đặt hoàn tất bộ công cụ này bao
gồm :
- arm-elf-gcc : Trình dịch C/C++ .
- arm-elf-elf2flt : chuyển định dạng file elf sang định dạng file flat.
- genromfs : Công cụ để tạo ảnh rom .
- binutils : các công cụ như arm-elf-ld , arm-elf-as , vv…
Đây là các công cụ biên dịch uClinux cho các vi điều khiển sử dụng nhân vi xử lý
ARM .
3.1.2. Lưu đồ quá trình biên dịch và các bước tiến hành
a. Lưu đồ quá trình biên dịch
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 37
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 .
- Xác định các chương trình ứng dụng cần dùng .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 38
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 Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 39
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 Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 40
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
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 41
đú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
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 42
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.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 43
Sau khí đã thực hiện kết nối , ta cấp nguồn cho kit . Nếu trên HyperTerminal
nhận được như sau thì quá trình ghép nối thành công :
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
Hình 29 : Chạy lệnh ap và chờ thực hiện lệnh ping từ máy tính .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 44
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 Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 45
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 .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 46
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 :
. Hình 34: Lệnh di chuyển dữ liệu từ flash vào RAM và lệnh chạy chương trình .
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 47
Lưu đồ quá trình khởi động :
Hinh 35: Lưu đồ quá trình khởi động hệ điều hành uClinux
Khi hoàn thành quá trình khởi động :
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 48
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 đã
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 49
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
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)
$(EXEC) : $ (OBJS)
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 50
$(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 Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 51
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 :
arm-elf-gcc –Wl, -eft2flt hello.c –o hello
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 52
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 …
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 53
Kết luận
Sau quá trình học tập và nghiên cứu dưới sự giúp đỡ , chỉ bảo tận tình của thầy
TS. Nguyễn Thăng Long , các thầy cô trong khoa , em đã hoàn thành được khóa luận
tốt nghiệp với đề tài “Nghiên cứu ứng dụng hệ điều hành nhúng uClinux trên vi điều
khiển S3C44B0X ” . Khóa luận này đã đạt được những kết quả sau :
1. Nghiên cứu tìm hiểu về nhân hệ điều hành Linux và uClinux .
2. Tiếp cận với dòng vi điều khiển 32 bit sử dụng nhân vi xử lý ARM7TDMI .
3. Nắm được phương pháp cấu hình nhân và biên dịch hệ điều hành uClinux .
4. Nhúng hệ điều hành uClinux xuống vi điều khiển S3C44B0X và xây dựng ứng
dụng chạy trên nền hệ điều hành uClinux .
Hướng phát triển tiếp theo của khóa luận là đi sâu vào xây dựng các ứng dụng
và phát triển các driver trong môi trường hệ điều hành uClinux của các hệ thống nhúng
.
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
Lương Thế Oanh 54
Các tài liệu tham khảo
[1] Hà Quang Thụy , Nguyễn Trí Thành , Nguyễn Hải Châu . Giáo trình “ Hệ Điều
Hành Unix - Linux” .
[2] Daniel P.Bovet & Marco Cesati .Understanding the Linux Kernel . O’Reilly .
First Edition October 2000 .
[3] David A Rusling , “ The Linux Kernel “ .
[4]
[5] .
[6]
Các file đính kèm theo tài liệu này:
- he_dieu_hanh_nhung_uclinux_5279.pdf