Ứ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 - Pdf 41

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

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


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 .

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

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 .


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

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 .

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 .


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à uClibc 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


-

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-distYYYYMMDD.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 .

-



-

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 .

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 .


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


-

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 .


-

Sử dụng kiến trúc bus SAMBA ( SAMSUNG’s ARM CPU Embedded Microcontroller 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 .

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.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.

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 :


-


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 .

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ình 6 : Sơ đồ khối của lõi vi xử lý ARM7TDMI.


Hình 7 : Các khối logic của ARM7TDMI.



-

Undefined ( und ) : Được nhập vào khi một lệnh không xác định được thực
thi.


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


Các băng thanh ghi
 Các thanh ghi dùng trong trạng thái lệnh rút gọn ( The Thumb-state register

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ý .



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status