Tài liệu tham khảo chuyên ngành viễn thông Ứng dụng hệ điều hành mã nguồn mở uClinux
Trang 1Mở đầ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
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
Trang 2Mở đầ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 đadạ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ẩmtiê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ầncứ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ểnkhai 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ầncứng
Trang 3Phầ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ăm1991 trên cơ sở cải tiến phiên bản UNIX có tên Minix do giáo sư AndrewS.Tanenbaum xây dựng và phổ biến Sau đó Linus Torvalds đã công bố mã nguồn củamì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ỗivà 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ấtnhiề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ànhLinux :
Sau ba năm nhân Linux ra đời , đến ngày 14-3-1994, hệ điều hành Linux phiênbả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ứcmạng TCP/IP chuẩn UNIX , sánh với giao thức socket BSD- tương thích cho lập trìnhmạng Trình điều khiển thiết bị đã được bổ sung để chạy IP trên một mạng Ethernethoặ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 đĩatốc độ cao Điều khiển bộ nhớ ảo đã được mở rộng để hỗ trợ điều khiển trang cho cácfile 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ớiLinux 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 Linuxchỉ 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ố đượcchia 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
Trang 4thì dòng nhân đó đã khá ổn định và tương đối hoàn thiện , còn nếu là số lẻ thì dòngnhâ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ủaLinux 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 quantâ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âydự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 vitoà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ôngcộ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ộtchươ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ácthà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
Trang 5dụ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ủamá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ớihệ đ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ânhệ đ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ởivì 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 Tuynhiên các hệ điều hành đa nhiệm như Windows, Linux … đều cho phép nhiều chươngtrì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ằngcá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ườidù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ờigian 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ố xemtiế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ợidụ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ếntrì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ếntrì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ụclạ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
Trang 6 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áchà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ớiFFFF , 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ới640KB 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ậpnhư là file Linux cũng cung cấp các thuộc tính truy cập cho file và thư mục , cácthuộ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 đốivớ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ềuhà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áctiế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ùngnhớ 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
Trang 7Thư 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ườiquả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únglạ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 trongthư 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ùngcà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ấtmá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ướcxuố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 ramáy in hoặc các hàng đợi chứa thư điện tử
Trang 81.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ạora 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úngvà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ềnthô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 vixử lý Motorola 68000 , vi xử lý này dựa trên trên vi xử lý MC68328 DragonBallIntergrated Microprocessor nó được triển khai trong bộ điều khiển SCADA năm1997/98 Phiên bản này đã được cộng đồng nguồn mở phát triển và một phiên bảnkhá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ànhLinux 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ớiBinary 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ươngtrì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ềuhà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ụngdễ 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ểnmộ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ềuhà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
Trang 9cho 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ôitrườ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àynay 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ếpmạ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ì trongnhâ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ềukhiể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ủanhâ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êucầ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 PClà 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ọnbiê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ộtmegabyte Trong thực tế kích thước bộ nhớ cần khoảng 2MB vì còn cần cho các ứngdụ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ỉnhkhoả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ànhuClinux 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ềnGNU 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ũngbao gồm đầy đủ mã nguồn và các thư viện kèm theo Mã nguồn hệ điều hành uClinuxvà 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ềuhà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ỗivà những lỗi đã được sửa
Trang 101.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ụcvụ cho việc phát triển nhân uClinux Thư viện này dựa trên thư viện C Linux – 8086như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 uClinuxcòn có một sô thư viện khác như : libatm hỗ trợ truyền dữ liệu không đồng bộ , libjpeghỗ 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ênkế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 :
Trang 11- 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àycũ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ồnuClinux được chứa trong một file nén Khi được giả nén , gói mã nguồn được tạo rathà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ứatrong thư mục chính là uClinux-dist Đó là mã nguồn của hệ điều hành uClinux và cầnbiê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ảnnhâ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
Trang 12Hì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úccũ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
Trang 13Chươ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ầncứ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ànbộ 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 đặcbiệ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ếtdriver 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ểnS3C44B0X 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ẽ đivà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ểnrấ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ốngnhỏ 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ụngnhư 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àycũ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
Trang 14- Sử dụng kiến trúc bus SAMBA ( SAMSUNG’s ARM CPU Embedded controller Bus Architecture ) làm giảm công suất tiêu thụ của vi điều khiển
Micro-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 đượclư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 đa66MHz
- 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ằngphần mềm
- Các chế độ : Normal – chế độ hoạt động bình thường , slow – chế độ hoạt độngtần số thấp không có PLL , idle- stop clock cho CPU , stop – stop toàn bộ tínhiệ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ờigian 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ắtngoài , 4 DMA , 2 RTC ,1 ADC , 1 IIC ,1SIO )
Trang 15- 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ó DMAhoặ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 :
Trang 16- 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ới100 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
Trang 172.1.2 Sơ đồ chân
Hình 4 : Sơ đồ chân của vi điều khiển S3C44B0X
Trang 182.1.3 Sơ đồ khối
Hình 5: Sơ đồ khối vi điều khiển S3C44B0X
Trang 192.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ảocho 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ácphé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ập32 bit và 16 bit Kiến trúc của ARM7TDMI được dựa trên kiến trúc RISC , với kiếntrú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àmtă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 đượcgiả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ới4Gbytes không gian địa chỉ tuyến tính , sử dụng kiến trúc Von Neumann để nạp và lưutrữ lệnh và dữ liệu , dùng chung một bus 32 bit cho cả dữ liệu và lệnh ARM7TDMIhỗ 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 chipthông qua chuẩn JTAG
Trang 20Hình 6 : Sơ đồ khối của lõi vi xử lý ARM7TDMI.
Trang 21Hình 7 : Các khối logic của ARM7TDMI.
Trang 22Hình 8: Sơ đồ các tín hiệu vào ra của ARM7TDMI
Trang 23Cá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ắtbê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 ứngdụng được thực thi trong chế độ User Mỗi chế độ điều khiển đều có các băng thanhghi 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ả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
Trang 24Cá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 state
- Thanh ghi LR của Thumb-state được ánh xạ tới thanh ghi r14 của ARM-state
Trang 25ARM Thanh ghi PC của ThumbARM 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ý
Trang 26Hì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ộ vixử 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 vixử 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
Trang 27- 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ốngvà 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ứcnă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àora 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 racá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 , thanhghi dữ liệu , thanh ghi thiết lập trở treo , thanh ghi điều khiển ngắt bên ngoài