Mục lục
Mở đầu ............................................................................ 2
Phần A : Lý thuyết chung ............................................. 3
Chương 1 . Hệ điều hành nhúng uClinux ................... 3
1.1.Nhân hệ điều hành Linux ...................................................................................... 3
1.1.1.Lịch sử nhân hệ điều hành Linux ................................................................... 3
1.1.2.Tổ chức của nhân hệ điều hành Linux ........................................................... 4
1.1.3.Tổ chức thư mục ........................................................................................... 6
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 ........................................... 8
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 ............................................................................... 10
1.2.5.Mã nguồn hệ điều hành uClinux ................................................................... 11
Chương 2 . Vi điều khiển S3C44B0X và kit phát
triển ............................................................................... 13
2.1.Vi điều khiển S3C44B0X ................................................................................... 13
2.1.1.Các đặc điểm của vi điều S3C44B0X ........................................................... 13
2.1.2.Sơ đồ chân .................................................................................................. 18
2.1.3.Sơ đồ khối .................................................................................................... 19
2.1.4.Chức năng một số khối chính ....................................................................... 20
2.2.Kit phát triển HT44B0 ........................................................................................ 35
Phần B : Thực nghiệm ................................................ 38
Chương 3 . Biên dịch mã nguồn uClinux và xây
dựng ứng dụng ............................................................. 38
3.1.Biên dịch mã nguồn hệ điều hành uClinux .......................................................... 38
3.1.1.Môi trường và các công cụ cần để biên dịch ................................................. 38
3.1.2.Lưu đồ quá trình biên dịch và các bước tiến hành ........................................ 38
3.2.Nhúng hệ điều hành vào vi điều khiển ............................................................... 44
3.2.1.Thiết lập giao tiếp giữa kit và máy tính ........................................................ 44
3.2.1.Đưa file ảnh hệ điều hành vào vi điều khiển ................................................. 46
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
Lương Thế Oanh 3
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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 .
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 .
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.
Lương Thế Oanh 5
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
- 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
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ử .
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 .
Lương Thế Oanh 7
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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 .
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ớ
- Bảng Fops .
- Chỉ số Major .
- Device Class ( Block hoặc Char ) .
- Name – tên driver .
Lương Thế Oanh 10
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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ỗ
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 .
Lương Thế Oanh 13
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
- 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
- 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 .
Lương Thế Oanh 15
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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 .
- 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 .
Lương Thế Oanh 17
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
2.1.2. Sơ đồ chân
Hình 4 : Sơ đồ chân của vi điều khiển S3C44B0X
Lương Thế Oanh 18
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
2.1.3. Sơ đồ khối
Hình 5: Sơ đồ khối vi điều khiển S3C44B0X
Lương Thế Oanh 19
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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
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
Lương Thế Oanh 24
ĐH Công Nghệ - ĐHQG Hà Nội Khóa luận tốt nghiệp
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
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
Các băng thanh ghi
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 .
Lương Thế Oanh 25