Tài liệu Khóa luận Nghiên cứu linux trên hệ thống nhúng và ứng dụng: TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ
KHOA CÔNG NGHỆ THÔNG TIN
CHUYÊN NGHÀNH MẠNG-MÁY TÍNH
………..Y Z………..
KHÓA LUẬN TỐT NGHIỆP
ĐỀ TÀI:
NGHIÊN CỨU LINUX TRÊN HỆ
THỐNG NHÚNG VÀ ỨNG DỤNG
GVHD:THS HUỲNH HỮU THUẬN
SVTH: TRẦN QUANG THUẬN 104102130
PHAN BÁ MINH 103102110
TP Hồ Chí Minh-Tháng 3/2008
Lời cảm ơn
Đầu tiên chúng em xin gửi những lời cảm ơn sâu sắc đến Ban giám hiệu trường
Đại học Kỹ Thuật Công Nghệ,Khoa Công Nghệ Thông Tin đã tận tình giảng dạy,
truyền đạt cho chúng em những kiến thức quý báu. Bên cạnh đó, quý thầy cô đã tạo
cho chúng em những điều kiện tốt nhất trong học tập và rèn luyện nhân cách suốt
những năm học vừa qua.
Chúng em xin gửi những lời biết ơn đặc biệt và chân thành nhất đến thầy Th.s
Huỳnh Hữu Thuận vì sự hướng dẫn tận tình cùng sự quan tâm chu đáo để chúng em có
thể hoàn thành đề tài này một cách tốt đẹp.
Chúng con cũng xin gửi đến bố mẹ của chúng con những tình cảm và lòng tri
ân tận đáy lòng. Bố mẹ đã ở bên chúng con ...
138 trang |
Chia sẻ: hunglv | Lượt xem: 1308 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Nghiên cứu linux trên hệ thống nhúng và ứng dụng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ
KHOA CÔNG NGHỆ THÔNG TIN
CHUYÊN NGHÀNH MẠNG-MÁY TÍNH
………..Y Z………..
KHÓA LUẬN TỐT NGHIỆP
ĐỀ TÀI:
NGHIÊN CỨU LINUX TRÊN HỆ
THỐNG NHÚNG VÀ ỨNG DỤNG
GVHD:THS HUỲNH HỮU THUẬN
SVTH: TRẦN QUANG THUẬN 104102130
PHAN BÁ MINH 103102110
TP Hồ Chí Minh-Tháng 3/2008
Lời cảm ơn
Đầu tiên chúng em xin gửi những lời cảm ơn sâu sắc đến Ban giám hiệu trường
Đại học Kỹ Thuật Công Nghệ,Khoa Công Nghệ Thông Tin đã tận tình giảng dạy,
truyền đạt cho chúng em những kiến thức quý báu. Bên cạnh đó, quý thầy cô đã tạo
cho chúng em những điều kiện tốt nhất trong học tập và rèn luyện nhân cách suốt
những năm học vừa qua.
Chúng em xin gửi những lời biết ơn đặc biệt và chân thành nhất đến thầy Th.s
Huỳnh Hữu Thuận vì sự hướng dẫn tận tình cùng sự quan tâm chu đáo để chúng em có
thể hoàn thành đề tài này một cách tốt đẹp.
Chúng con cũng xin gửi đến bố mẹ của chúng con những tình cảm và lòng tri
ân tận đáy lòng. Bố mẹ đã ở bên chúng con để động viên và giúp đỡ chúng con về mọi
mặt trong những giai đoạn khó khăn khi thực hiện đề tài.
Và cuối cùng xin được gửi lời cảm ơn đến tất cả các bạn bè trong và ngoài khoa
vì những sự giúp đỡ và tình cảm của các bạn trong những năm tháng nơi giảng đường
đại học thân yêu.
Sinh viên thực hiện
Trần Quang Thuận,Phan Bá Minh
Lời nói đầu.
Ngày nay,với sự phát triển của các linh kiện điện tử và công nghiệp sản xuất vi
mạch,hệ thống Linux nhúng đã xuất hiện hầu như ở khắp mọi khía cạnh trong cuộc
sống, từ các thiết bị điện tử dân dụng thông thường đến những thiết bị mạng cao cấp.
Nếu so sánh các thiết bị này với các hệ thống nhúng truyền thống thì mức độ phức tạp
và khả năng đáp ứng cao hơn rất nhiều.Việc tích hợp hệ điều hành lên hệ thống nhúng
làm đơn giản hóa quá trình nghiên cứu và phát triển các sản phẩm, rút ngắn thời gian
và chi phí xây dựng hệ thống vì các hệ thống này được thừa hưởng những tính chất ưu
việt của một hệ điều hành nói chung cũng như Linux nói riêng, như tính ổn định, nhỏ
gọn, thực thi nhanh và có khả năng can thiệp sâu vào phần cứng.
Hơn thế nữa, cùng với cộng đồng sử dụng Linux rộng lớn trên khắp thế giới và
các phần mềm mã nguồn mở đa dạng làm cho việc phát triển hệ thống Linux nhúng trở
thành một chiến lược được các công ty lựa chọn hàng đầu. Nhờ phần mểm mã nguồn
mở khiến cho việc tùy biến một ứng dụng phù hợp yêu cầu trở nên dễ dàng hơn. Nhận
thức được tầm quan trọng này, đề tài thực hiện việc tìm hiểu Linux cho các hệ thống
nhúng và các ứng dụng trên hệ thống nhúng. Phần cứng đề cập đến trong đề tài là kit
XUP Virtex-II Pro Development Syste Xilinx (XUPV2P). Cụ thể sẽ tiến hành việc cài
đặt hệ điều hành MontaVista Linux – một gói Linux chuyên dành cho các hệ thống
nhúng – lên kiến trúc vi xử lý PowerPC405 được tích hợp trên kit XUPV2P. Đồng thời
xây dựng các ứng dụng chạy trên hệ điều hành này. Ứng dụng trọng tâm là giao tiếp
truyền dữ liệu qua TCP/IP, với server là ứng dụng chạy trên hệ thống nhúng đã cài đặt
và client là ứng dụng chạy trên hệ điều hành Windows. Ứng dụng cung cấp khả năng
upload, download dữ liệu và có phân quyền với giao diện người dùng thân thiện.
Mục lục
Chương 1 Linux trên hệ thống nhúng................................................................7
1.1 Khái niệm cơ bản...................................................................................7
1.2 Hệ điều hành Linux nhúng (Embedded Linux).....................................8
1.3 Real-time Linux.....................................................................................9
1.4 Phân loại hệ thống Linux nhúng............................................................9
1.4.1 Kích thước .......................................................................................10
1.4.2 Khả năng đáp ứng theo thời gian ....................................................11
1.4.3 Khả năng kết nối .............................................................................11
1.4.4 Khả năng tương tác với người dùng................................................12
1.5 Kiến trúc tổng quát của một hệ thống Linux nhúng............................12
1.5.1 Khối Data Acquisition.....................................................................13
1.5.2 Khối Control....................................................................................14
1.5.3 Khối System management...............................................................15
1.5.4 Khối User interface .........................................................................16
1.6 Tổng quan về kernel của Linux/Unix..................................................16
1.6.1 Mô hình process/kernel: ..................................................................16
1.6.2 Thi hành một process ......................................................................18
1.6.3 Tái thực thi các process ...................................................................18
1.6.4 Không gian địa chỉ các tiến trình: ...................................................20
1.6.5 Sự đồng bộ hóa và những vùng then chốt:......................................21
1.6.6 Việc giao tiếp tín hiệu và liên tiến trình..........................................22
1.6.7 Quản lí tiến trình: ............................................................................23
1.6.8 Quản lý bộ nhớ ................................................................................25
1.6.9 Device Drivers.................................................................................28
Chương 2 Thiết kế một hệ thống Linux nhúng ...............................................30
2.1 Phần cứng hỗ trợ..................................................................................30
2.1.1 Kiến trúc CPU .................................................................................30 U
2.1.2 Bus và các chuẩn giao tiếp ..............................................................31
2.1.3 Các thiết bị lưu trữ...........................................................................31
2.1.4 Kết nối mạng ...................................................................................32
2.2 Các công cụ phát triển .........................................................................33
2.3 Chọn lựa và biên dịch Linux kernel ....................................................34
2.3.1 MontaVista Linux ...........................................................................37
2.3.2 uClinux ............................................................................................38
2.3.3 Cấu hình kernel ...............................................................................38
2.4 Xây dựng hệ thống thư mục gốc (root filesystem)..............................40
2.4.1 Hệ thống tập tin (File Systems).......................................................40
2.4.2 Các thư mục trên Linux...................................................................40
Chương 3 Kit XUPV2P và gói phần mềm phát triển của Xilinx ....................44
3.1 Kiến trúc phần cứng của Kit XUPV2P................................................44
3.1.1 Tổng quan........................................................................................44
3.1.2 Khối FPGA Virtex II Pro ................................................................46
3.1.3 System ACE ....................................................................................47
3.1.4 Ethernet adaptor ..............................................................................58
3.1.5 Cấu trúc MicroBlaze .......................................................................69
3.1.6 PowerPC..........................................................................................78
3.2 Các gói phần mềm phát triển của Xilinx .............................................85
3.2.1 Xilinx EDK......................................................................................86
3.2.2 BSB Winzard (Base System Builder) .............................................86
Chương 4 Thiết kế hệ thống nhúng dùng Linux..............................................88
4.1 Những công cụ thực hiện.....................................................................88
4.1.1 Hardware .........................................................................................88
4.1.2 Software...........................................................................................88
4.2 Kiểm tra kit XUPV2P..........................................................................89
4.3 Thiết kế phần cứng cho hệ thống với Xilinx BSB ..............................90
4.3.1 Cấu hình sử dụng bộ xử lý PowerPC ..............................................90
4.3.2 Cấu hình các thiết bị ngoại vi..........................................................93
4.3.3 Cấu hình phần mềm.........................................................................96
4.4 Thiết lập môi trường biên dịch chéo....................................................98
4.5 Biên dịch nhân MontaVista Linux trên kiến trúc PowerPC405........100
4.5.1 Tải kernel source và chuẩn bị driver .............................................100
4.5.2 Cấu hình nhân................................................................................102
4.5.3 Tạo ACE file cấu hình cho FPGA và nạp ảnh kernel ...................105
4.5.4 Quá trình khởi động Linux trên kit XUPV2P ...............................107
4.6 Xây dựng cấu trúc thư mục gốc cho hệ điều hành ............................108
Chương 5 Lập trình ứng dụng Server chạy trên hệ thống nhúng và Client trên
Windows................................................................................................112
5.1 Mô tả hệ thống file server của uClinux .............................................112
5.2 Cấu trúc lập trình: ..............................................................................113
5.3 Lưu đồ thiết kế:..................................................................................114
5.4 Chương trình File Client MP3 trên Visual C++ MFC: .....................115
5.4.1 Giới thiệu :.....................................................................................115
5.4.2 Chương trình File Client MP3: .....................................................116
5.4.3 Giao diện File Client MP3: .............Error! Bookmark not defined.
Chương 6 Giới hạn của đề tài và hướng phát triển trong tương lai...............118
6.1 Tổng kết những phần đã thực hiện ....................................................118
6.2 Giới hạn .............................................................................................118
6.3 Hướng phát triển trong tương lai .......................................................118
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Chương 1 Linux trên hệ thống nhúng
1.1 Khái niệm cơ bản
Linux là một từ thay thế cho nhân Linux, một hệ thống Linux hay một bản phân
phối Linux (Linux distribution). Khái niệm về Linux cũng có thể hiểu đơn giản là một
hệ điều hành. Chính xác thì Linux dùng để chỉ hạt nhân được Linus Tovalds phát triển
và duy trì. Mã nền tảng này chỉ bao gồm hạt nhân và không có một ứng dụng kèm theo
khác. Hạt nhân chỉ cung cấp cho phần lõi của hệ thống khả năng quản lý phần cứng dễ
dàng. Nó không phải là phần mềm đầu tiên được hệ thống thực thi, vì thực chất là
bootloader sẽ được thực thi trước. Tuy nhiên, một khi hạt nhân được thực thi, nó sẽ
không bao giờ thoát hay trao quyền điều khiển cả hệ thống cho đến khi hệ thống tắt.
Nó có tác dụng điều khiển tất cả phần cứng và cung cấp những khả năng quản lý ở cấp
độ logic cao, ví dụ như các tiến trình, sockets, tập tin và các ứng dụng khác chạy trên
hệ thống.
Linux cũng có thể dùng để thiết kế chuyên biệt cho một hệ thống phần cứng
cùng với nhiều ứng dụng khác. Một nhóm phát triển thường đề cập đến vấn đề họ sử
dụng Linux trong các sản phẩm mới của họ, họ muốn nói đến không chỉ là hạt nhân
Linux mà còn kèm theo các ứng dụng trên sản phẩm mới này. Điều này có ý nghĩa chỉ
một hệ thống Linux ngoài hạt nhân còn kèm theo một số lượng lớn các phần mềm
cùng chạy với hạt nhân. Thông thường là các phần mềm GNU, các thư viện C và các
tập tin nhị phân của ứng dụng . Cũng có thể bao gồm cả giao diện đồ họa và khả năng
đáp ứng real-time.
Hệ thống Linux có thể xây dựng theo tùy thích, hoặc có thể dựa vào các gói
phân phối của các nhà cung cấp. Nhóm phát triển nào đó có thể xây dựng một hệ
thống theo ý thích của họ, và ngược lại, bạn có thể dùng các phiên bản có giao diện đổ
họa và các tiện ích tiện lợi khác như gói Red Hat, Debian hay Fedora Core. Những hệ
thống Linux có nhiều mục đích sử dụng khác nhau, chạy những ứng dụng khác nhau
SVTH: Trần Quang Thuận – Phan Bá Minh. - 7 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
ngoại trừ phần hạt nhân có tác dụng không hề thay đổi trên các hệ thống. Các phân
phối như Red Hat, Mandrake, SuSE, Debian, Slackware, Caldera, MontaVista,
Embedix, BlueCat, PeeWeeLinux, và các phân phối Linux khác có thể khác nhau về
kích thước, giá cả, mục đích sử dụng nhưng lại có một điểm chung nhất: cung cấp cho
người dùng tập hợp file và những cách thức cài đặt để người dùng xây dựng hạt nhân
cùng các ứng dụng khác trên nhiều loại phần cứng tùy theo mục đích xác định. Cách
thức cài đặt có thể hoàn toàn tự động hoặc từng bước chi tiết trong tài liệu được cung
cấp tùy theo người dùng thông thường hay các nhà phát triển hệ thống.
1.2 Hệ điều hành Linux nhúng (Embedded Linux)
Thông thường bạn sẽ sử dụng một phiên bản Linux chính thức được cung cấp
bởi những hãng cung cấp phần mềm cho hệ thống của bạn. Nhưng đôi khi, bạn lại
muốn dùng một gói Linux được thiết kế với hạt nhân phù hợp với thiết bị đặc biệt hoặc
chỉ hỗ trợ chuyên biệt cho một ứng dụng nào đó. Các gói Linux cung cấp rất nhiều
nhân khác nhau, ví dụ như các nhân Linux thông thường không được tối ưu và kèm
các bản vá để hỗ trợ khả năng chạy các công cụ debug, chẵng hạn như công cụ debug
cho nhân. Điểm khác biệt chủ yếu là các nhân dùng cho hệ thống nhúng khác với dùng
cho các máy tính (workstation) hay máy phục vụ (server) ở cách cấu hình hạt nhân
khi biên dịch.
Thuật ngữ “hệ thống Linux nhúng” chỉ những hệ thống nhúng dựa trên nhân
Linux và bao hàm cả ý nghĩa sử dụng những thư viện đặc biệt và các công cụ người
dùng cùng với hạt nhân. Một gói cung cấp hệ điều hành Linux nhúng cũng có thể bao
gồm cả nhóm các gói công cụ phát triển (development framework), hoặc nhóm các
phần mềm được thay đổi để có thể sử dụng trên hệ thống nhúng hoặc cả hai.
Nhóm các gói công cụ phát triển bao gồm các phần mềm phục vụ cho việc dễ
dàng phát triển trên hệ thống nhúng. Như các trình duyệt mã nguồn (source browser),
các bộ biên dịch chéo, sửa lỗi, phần mềm quản lý dự án, tạo boot image…Gói công cụ
phát triển này sẽ được cài đặt trên máy host. Ngược lại, đối với nhóm các phần mềm
ứng dụng trên hệ thống nhúng sẽ được thực thi trên target là các hệ thống nhúng, như
các thư viện đặc biệt, các tập tin thực thi và các tập tin cấu hình, với giải pháp tổng
SVTH: Trần Quang Thuận – Phan Bá Minh. - 8 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
quát thì nó cũng sẽ bao gồm cả công cụ tạo ra cấu trúc thư mục gốc cho hệ thống (root
filesystem).
Như vậy đến đây chúng ta có 2 khái niệm host và target. Host sẽ dùng để chỉ
máy tính phát triển cho hệ thống nhúng, và target để chỉ các hệ thống nhúng.
Hình 1-1: Khái niệm host và target
1.3 Real-time Linux
Ban đầu, real-time Linux dùng để chỉ dự án RTLinux đưa ra vào năm 1996 của
Michael Barabanov dưới dự giám sát của Victor Yodaiken. Dự án nhằm cung cấp khả
năng đáp ứng thời gian chính xác trong môi trường Linux.
Tuy nhiên, ngày nay có rất nhiều dự án cung cấp khả năng đáp ứng real-time
trong môi trường hệ điều hành Linux. RTAI, Kurt hay Linux/RK đều cung cấp khả
năng real-time. Một số dự án cải tiến khả năng real-time bằng cách thêm một hạt nhân
thứ 2 vào trong hạt nhân Linux, một số khác cải thiện bằng các bản vá tối ưu hơn. Các
khái niệm về real-time có vẻ khó hiểu nhưng chúng ta cũng có thể hiểu đơn giản hơn,
đó là những hệ thống đảm bảo có thể hoạt động và đáp ứng gần như tức thời và có độ
tin cậy cao. Như các hệ thống audio stream hay các máy trong công nghiệp, đặc biệt
chú trọng những đáp ứng về thời gian. Chúng ta sẽ hiểu thêm khi đi vào phân loại các
hệ thống Linux nhúng.
1.4 Phân loại hệ thống Linux nhúng
Những hệ thống nhúng nào có thể sử dụng Linux? Vì sao lại chọn Linux?
Những vấn đề quan trọng nào phát sinh khi sử dụng Linux trên hệ thống nhúng? Hay
có bao nhiêu người thực sự dùng Linux trên hệ thống nhúng của họ? Và dùng như thế
nào? Có lẽ còn rất nhiều câu hỏi khác phát sinh khi làm quen với Linux trên hệ thống
nhúng. Đây có lẽ là những câu hỏi khó trả lời ở thời điểm này, phần này sẽ cố gắng
giúp bạn có cái nhìn tổng quát và phần nào tìm được câu trả lời.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 9 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Chúng ta có thể thấy đơn giản nhất là các thiết bị mạng thông dụng, như các
router hay máy in mạng cho phép người dùng cấu hình thông qua web-base. Chúng
đều được tích hợp một nhân Linux để có thể thực hiện những công việc đó. Nếu xem
xét thì trong rất nhiều lĩnh vực đều có sự hiện diện của Linux nhúng. Ở đây chúng ta
sẽ điểm qua bằng cách phân loại các hệ thống linux nhúng theo các tiêu chí: kích
thước, khả năng đáp ứng thời gian, kết nối và khả năng tương tác với bên ngoài.
1.4.1 Kích thước
Kích thước của các hệ thống Linux nhúng được xác định ở nhiều phương diện
khác nhau. Đầu tiên là kích thước thực bên ngoài đến những đơn vị kích thước của
máy tính như tốc độ CPU, dung lượng RAM và lưu trữ. Điều đáng chú ý ở đây là
Linux không thể chạy trên các hệ thống 16-bit1, nếu so sánh với các thiết bị nhúng
truyền thống thì hệ thống Linux nhúng có thể được coi là những hệ thống lớn.
Đối với những hệ thống nhỏ sử dụng những CPU tốc độ thấp, với chỉ khoảng
2MB ROM và 4MB RAM. Điều này không có nghĩa là Linux không thể chạy với
dung lượng RAM thấp hơn, nhưng sẽ khó thực hiện. Hiện tại vẫn có những phân phối
Linux chỉ cần lưu trữ trên duy nhất một đĩa mềm.
Những hệ thống trung bình được tích hợp các CPU có tốc độ tương đối và dùng
khoảng 32MB ROM và 64MB RAM. Hầu hết những sản phẩm tiêu dùng đều nằm ở
kích thước này. Như các máy PDA, máy chơi MP3 hay các hệ thống giải trí, thiết bị
mạng. Một số thiết bị còn có khả năng mở rộng lưu trữ trên các thẻ nhớ, CompactFlash
card, thậm chí cả đĩa cứng thông thường.
Các hệ thống lớn sử dụng bộ xử lý mạnh hoặc đa bộ xử lý, kết hợp với dung
lượng RAM và dung lượng lưu trữ lớn. Thông thường các hệ thống này được sử dụng
trong những môi trường cần xử lý khối lượng lớn các phép tính để thực hiện các tác vụ
chuyên biệt. Hệ thống chuyển mạch trong thông tin thoại, hay việc giả lập bay. Các hệ
1 Nói Linux không thể chạy trên hệ thống 16-bit không hoàn toàn chính xác, đã từng có dự án
Embeddable Linux Kernel Subset (ELKS), chạy Linux trên các hệ thống xử lý cũ như Intel 8086 hay 268.
Nhưng với sự phát triển hiện nay thì Linux trên các hệ thống cũ là giải pháp không hề khả thi.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 10 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
thống này đặt chức năng lên hàng đầu và các yếu tố kích thước, giá thành và độ phức
tạp chỉ là thứ yếu.
1.4.2 Khả năng đáp ứng theo thời gian
Có hai mức độ đáp ứng theo thời gian cho hệ thống nhúng: nghiêm ngặt và
thông thường. Đối với hệ thống đòi hỏi đáp ứng nghiêm ngặt về thời gian, nó phải
phản ứng lại trong một thời gian xác định đưa ra, nếu không thì sẽ có những hậu quả
nghiêm trọng xảy ra. Giả sử trong một nhà máy, các công nhân giữ những vật liệu cần
được cắt bằng các máy cắt tự động. Vì lý do an toàn, các cảm biến quang được đặt
xung quanh các lưỡi dao của máy cắt để nhận dạng màu sắc găng tay của những công
nhân. Khi hệ thống báo tay của người công nhân đang trong vùng nguy hiểm, lập tức
các lưỡi dao phải ngừng hoạt động để bảo đảm an toàn. Hệ thống này không thể làm
tác vụ nào khác để giải phóng tài nguyên bộ xử lý. Đây là một hệ thống đòi hỏi đáp
ứng cực kỳ nghiêm ngặt về thời gian và độ tin cậy. Các hệ thống audio cũng phải có
đáp ứng thời gian nghiêm ngặt, những đoạn âm thanh trễ chỉ trong nhất thời có thể làm
người dùng rất khó chịu. Tuy nhiên hệ thống này cũng cần đáp ứng thời gian chính
xác nhưng mức độ không quan trọng như ở ví dụ trên.
Các hệ thống đáp ứng thời gian thông thường có rất nhiều ứng dụng nhất là
trong những ứng dụng mà vấn đề thời gian không quan trọng. Ví dụ như hệ thống trả
lời tự động cần đến 10 giây để chuyển đổi, hay các máy PDA cũng cần một thời gian
chờ để khởi động.
1.4.3 Khả năng kết nối
Khả năng kết nối để chỉ các hệ thống có thể kết nối đến các thiết bị mạng khác.
Ngày nay chúng ta muốn mọi thứ có thể truy cập thông qua hệ thống mạng. Vì vậy, để
có khả năng đáp ứng điều này, những yêu cầu cơ bản cho một hệ thống dần được xây
dựng thêm. Một trong những nhân tố khiến mọi người chọn Linux làm hệ điều hành
cho hệ thống nhúng của họ, chính là ở khả năng kết nối của Linux. Giảm giá thành và
những thành phần đã chuẩn hóa của Linux càng khiến mọi người sử dụng nó. Đơn
giản như việc bạn có thể gắn một thiết bị kết nối không dây vào máy Compaq iPAD
bằng cách cắm một PCMCIA (Personal Computer Memory Card International
Association) vào khe cắm của máy, nó có thể sử dụng ngay lập tức.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 11 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.4.4 Khả năng tương tác với người dùng
Mức độ tương tác với người dùng tùy theo từng hệ thống, Một số hệ thống như
các máy PDA tập trung vào các tính năng giao tiếp với người sử dụng bằng các màn
hình cảm ứng. Trong khi các hệ thống điều khiển công nghiệp khác chỉ cần các LED
hiển thị và các nút nhấn để giao tiếp với người dùng, còn có những hệ thống không hề
có giao tiếp nào cả, như một số thành phần của hệ thống tự lái trên các máy bay, chỉ
đơn thuần điều khiển an toàn cho cánh mà không cần giao tiếp với phi công.
Hệ thống Lĩnh vực Kích thước
Đáp ứng thời
gian
Kết nối
Mức độ giao tiếp
với người dùng
Xe tự
hành
Không
gian
Lớn Nghiêm ngặt Có Cao
Thiết bị
trợ lý số
Tiêu
dùng
Nhỏ Thông thường Không Rất cao
Bộ định
tuyến
(router)
Mạng Nhỏ Thông thường Có Thấp
Bảng 1-1: Các đặc điểm của hệ thống
1.5 Kiến trúc tổng quát của một hệ thống Linux nhúng
Để có thể giải thích đơn giản, chúng ta sẽ xem xét một hệ thống điều khiển các
tiến trình công nghiệp. Nó được thiết kế từ các máy tính kết nối mạng và tất cả đều sử
dụng Linux. Hình 1-2 thể hiện các khối đơn giản
Hình 1-2: Một kiến trúc ví dụ điển hình
Bên trong hệ thống, được xây dựng từ 4 thành phần khác nhau, mỗi thành phần
phục vụ cho một mục đích khác nhau: Data acquition (DAQ), Control, System
Management (SYSM) và User interface (UI). Kết nối bên trong giữa các thành phần sử
SVTH: Trần Quang Thuận – Phan Bá Minh. - 12 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
dụng các giao tiếp và các giao thức rất phổ biến TCP/IP trên Ethenet. Khối DAQ và
Control được cài đặt trên một đường truyền riêng, các UI cũng như vậy. Để có thể giao
tiếp với bên ngoài, khối SYSM có một kết nối với hệ thống mạng bên ngoài. Để điều
khiển một tiến trình, hệ thống luôn cần biết trạng thái của các tiến trình trong các thành
phần khác nhau. Lấy dữ liệu để làm gì, khi có dữ liệu, hệ thống có thể biết được làm
thế nào để quản lý tiến trình. Mọi lệnh điều khiển đều xuất phát từ khối Control. Chi
tiết về những tiến trình đang được điều khiển cần phải tương tác hoặc hiển thị với
người dùng, cũng phải có sự giao tiếp để vận hành những tiến trình này theo ý muốn,
điều này được thực hiện từ các khối UI. Để kết hợp tất cả những khối rời rạc này, tập
trung chỗ chứa các dữ liệu và quản lý các interface, khối SYSM được đặt ở trung tâm
đồng thời cho phép kết nối ra mạng bên ngoài. Chúng ta sẽ đi sâu vào từng khối để tìm
hiểu chi tiết hơn.
1.5.1 Khối Data Acquisition
Thành phần đầu tiên của quá trình đo lường là các bộ chuyển đổi. Các bộ
chuyển đổi là những thiết bị biển đổi các hiện tượng vật lý thành một tín hiệu điện.
Các bộ chuyển đổi này thường đặt trực tiếp ở những nơi cần theo dõi. Các tín hiệu
điện sinh ra từ các bộ chuyển đổi thường được khuyếch đại, lọc và cách ly trước khi đi
vào thiết bị DAQ cuối cùng.Thiết bị này thường là các DAQ card gắn vào máy tính để
lấy mẫu các tín hiệu tương tự, chuyển thành các giá trị số và lưu trữ trên các bộ đệm.
Dữ liệu số này có thể dùng để xác định các điều kiện hoặc thay đổi các thông số đáp
ứng cho tín hiệu, phản hồi lại khi nhận được tín hiệu.
Khối DAQ lưu trữ các dữ liệu nhận được trên các bộ đệm, tiến hành phân tích
trên các dữ liệu này hoặc có thể chuyển đến khối SYSM. Trong mọi trường hợp,
những dữ liệu quan trọng sẽ được chuyển tiếp đến khối SYSM để lưu trữ và hiển thị
trên các UI. Nếu các dữ liệu được phân tích trong khối DAQ, khối này sẽ thông báo
cho khối SYSM nếu như phát hiện những tình huống bất thường hay nguy hiểm,
ngược lại khối DAQ sẽ nhận lệnh từ khối SYSM. Những lệnh này có thể là việc thay
đổi tần số lấy mẫu, các thông số phân tích hoặc công việc của DAQ sẽ làm gì khi phân
tích dữ liệu xong. Đối với khối SYSM khi được DAQ thông báo, DAQ sẽ chuyển tiếp
thông báo trạng thái hoặc lỗi đến khối SYSM.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 13 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Khối DAQ thường khởi động từ flash trên khối và sử dụng RAM. Vì vậy nó dễ
dàng thay đổi nếu như hệ thống bị lỗi. Cấu hình phần mềm bao gồm một hạt nhân
được tạo riêng chỉ chạy trên một hệ thống (có thể là máy PC hay một hệ thống dùng
PowerPC) Khối DAQ không có giao tiếp với bên ngoài mà chỉ liên lạc với khối SYSM
DAQ cũng không phải hệ thống đa người dùng và không có giao tiếp với người dùng.
Khối DAQ chỉ cần thực thi một công cụ đo lường nào đó. Cũng giống như gói
BusyBox. Địa chị IP của khối DAQ được thiết kế cố định, vì vậy khối SYSM sẽ dễ
dàng kiểm tra DAQ còn hoạt động hay không.
1.5.2 Khối Control
Điều khiển các tiến trình truyền thống như PLC hay những hệ thống tương tự
rất mắc tiền và phải sử dụng những hệ điều hành riêng, đồng thời cũng phải có cách
vận hành riêng. Mặc dầu các phần cứng chuẩn công nghiệp cũng bắt đầu giảm giá
thành theo xu thế công nghệ. Với mục tiêu giảm giá thành những phần cứng ngày nay
trên thị trường tiêu dùng, dễ dàng nhận thấy các máy PC có ưu thế được dùng để quản
lý các quy trình.
Khối Control là một máy tính chuẩn công nghiệp kết nối với các phần cứng cần
được điều khiển. Máy tính này là một hệ thống nhúng kích cỡ trung bình với khả năng
đáp ứng nghiêm ngặt về thời gian và không có tương tác người dùng giống như khối
DAQ. Nó cũng được nối vào phần còn lại của cả hệ thống lớn qua đường truyền
Ethernet. Nhiệm vụ chính của khối Control là phát ra tín hiệu điều khiển phần cứng
kết nối với nó, đồng thời theo dõi hoạt động của phần cứng này để điều khiển hợp lý.
Các tín hiệu điều khiển xuất phát từ gốc là khối SYSM, là trung tâm đưa ra quyết định,
và SYMS sẽ quyết định dựa vào dữ liệu lấy từ khối DAQ. Khối Control sẽ đưa ra lệnh
cuối cùng gửi đến cho phần cứng dựa trên quyết định của SYSM và tình trạng của
phần cứng. Khi tác vụ điều khiển phần cứng đã hoàn thành, khối Control sẽ gửi một
thông báo trạng thái ngược về khối SYSM.
Khối Control cũng có thể boot từ flash và sử dụng RAM giống như DAQ, chỉ
khác là nó phải sử dụng một nhân Linux có khả năng đáp ứng nghiêm ngặt về thời
gian vì phải điều khiển những phần cứng phức tạp. Nó cũng có IP tĩnh và có thể bao
gồm gói BusyBox như DAQ.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 14 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.5.3 Khối System management
Khối SYSM quản lý sự ảnh hưởng qua lại giữa các thành phần khác trong hệ
thống. Khối này gồm 3 giao tiếp với khối DAQ, Control và một kết nối ra mạng lưới
bên ngoài. SYSM là một hệ thống nhúng lớn có đòi hỏi đáp ứng thời gian nghiêm ngặt
và không có tương tác với người dùng.
Trên liên kết A (hình 1-2) SYSM nhận dữ liệu từ DAQ lưu trữ một phần dữ liệu
này và chuyển tiếp các dữ liệu thích hợp đến khối UI để tương tác với người dùng. Dữ
liệu được lưu trữ có thể sử dụng trong tương lai, và từ các dữ liệu này tích lũy những
kinh nghiệm cho hệ thống điều khiển. Khối SYSM có thể nhận dữ liệu đã phân tích ở
DAQ hoặc bản thân nó cũng có thể thực hiện công việc phân tích. SYSM sẽ đưa ra
những lệnh điều khiển khối Control dựa trên dữ liệu đã phân tích và từ đó khối Control
sẽ điều khiển phần cứng một cách chi tiết hơn. SYSM thực thi những chương trình nền
thực hiện các tác vụ liên lạc giữa DAQ và khối Control. SYSM cũng có IP tĩnh để các
khối DAQ và Control có dễ dàng liên lạc với nó.
Đối với liên kết ra mạng bên ngoài, khối SYSM cung cấp giao tiếp qua HTTP
và SSH. HTTP cung cấp khả năng theo dõi và cấu hình cho cả hệ thống thông qua các
trình duyệt web đơn giản. SSH cung cấp khả năng kết nối vào hệ thống nhúng thống từ
xa và có tính bảo mật cao để sửa lỗi và nâng cấp hệ thống. Một trong những cấu hình
quan trọng của SYSM là cách nó báo hiệu lỗi và không có khả năng xử lý lỗi này. Ví
dụ như thông báo bằng âm thanh, hay gửi các tín hiệu đến người vận hành hệ thống
hoặc đơn giản là hiển thị thông báo đến các UI. SYSM có thể dùng IP tĩnh hoặc nhận
IP từ một DHCP server.
Ở liên kết B (hình 1-2) SYSM có thể cung cấp địa chỉ động cho các UI, một khi
UI đã kết nối và xác nhân với SYSM, nó sẽ chuyển tiếp các thông báo, trạng thái hệ
thống. Người dùng có thể dựa vào đó để vận hành hệ thống.
SYSM là một hệ thống nhúng lớn vì vậy nó có thể phải boot từ hard disk và có
đầy đủ chức năng như một máy tính truyền thống. Tuy nhiên các chức năng của nó
đều rất quan trọng, cần thiết và phải đáp ứng các tác vụ song song. Hơn nữa là trung
tâm điều khiển nên phải hỗ trợ môi trường đa người dùng cùng các ứng dụng người
dùng. SYSM giống như một server hơn là các máy tính thông thường.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 15 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.5.4 Khối User interface
UI đơn giản chỉ để tương tác với người dùng để có thể đưa ra quyết định quản
lý các tiến trình. UI thường là các hệ thống nhúng nhỏ với đáp ứng thời gian thông
thường. Hiển nhiên các khối UI này cũng có khả năng kết nối mạng. Các khối UI
thông thường sẽ boot từ bộ nhớ flash hay thông qua mạng. UI được cấu hình sẽ nhận
IP từ các DHCP server. Các UI tiện dụng thường phát triển trên dòng ARM hay MIPS
và chạy những kernel thông thường. UI cũng không cần đến những công cụ người
dùng, các tiện ích đồ họa phức tạp hay các thư viện.
1.6 Tổng quan về kernel của Linux/Unix
Kernel cung cấp môi trường cho các ứng dụng hoạt động. Kernel phải thực thi
một nhóm các dịch vụ và giao tiếp tương ứng. Mỗi ứng dụng sử dụng giao tiếp riêng
và tài nguyên phần cứng dành cho ứng dụng thường không ảnh hưởng trực tiếp lẫn
nhau.
1.6.1 Mô hình process/kernel:
Một CPU có thể hoạt động trong user mode hoặc kernel mode. Một số CPU có
thể có nhiều hơn 2 chế độ hoạt động. Ví dụ, bộ vi xử lý Intel 80x86 có 4 trạng thái
hoạt động khác nhau. Nhưng tất cả các kernel chuẩn của Unix chỉ sử dụng Kernel
mode và User mode.
Khi thực thi một chương trình trong User Mode thì chương trình này không thể
trực tiếp truy xuất những cấu trúc dữ liệu của kernel hoặc những chương trình của
kernel. Khi một ứng dụng chạy trong Kernel Mode thì những giới hạn này không còn
nữa. Mỗi loại CPU cung cấp những lệnh đặc biệt để chuyển từ User Mode sang Kernel
Mode và ngược lại. một chương trình chạy phần lớn thời gian ở User Mode và chỉ
chuyển sang Kernel Mode khi có yêu cầu một dịch vụ được cung cấp bởi kernel. Khi
kernel đã đáp ứng yêu cầu đó của chương trình thì kernel lại đưa chương trình đó trở
về trạng thái User Mode.
Processes là những quy trình động, có quãng thời gian tồn tại hữu hạn trong hệ
thống. Các tác vụ như tạo, loại trừ và đồng bộ những tiến trình đang tồn tại được ủy
thác cho một nhóm thường trình trong kernel.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 16 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Bản thân kernel không phải là một process nhưng là một process manager. Mô
hình process/kernel cho rằng những process yêu cầu một dịch vụ kernel nào đó thì sử
dụng cấu trúc lập trình đặc biệt được gọi là lời gọi hệ thống (System call). Mỗi lời gọi
hệ thống thiết lập nhóm các thông số cho biết process yêu cầu và sau đó thực thi theo
lệnh CPU để chuyển từ User Mode sang Kernel Mode.
Bên cạnh những tiến trình của người dùng, hệ thống Unix bao gồm một vài tiến
trình đặc quyền được gọi là kernel thread với những đặc điểm:
• Tiến trình chạy trong Kernel Mode trong không gian địa chỉ kernel.
• Tiến trình không tương tác với người dùng, không cần thiết bị đầu cuối.
• Tiến trình thường được tạo ra khi hệ thống khởi động và vẫn còn hoạt
động cho đến khi tắt máy.
Nên chú ý, trên một hệ thống đơn, chỉ có một tiến trình có thể ở trong User
Mode hoặc Kernel Mode. Nếu chạy trong Kernel Mode, bộ vi xử lí sẽ thực thi một số
thủ tục của kernel. Hình 1-3 miêu tả một ví dụ về việc chuyển trạng thái giữa User
Mode và Kernel Mode. Tiến trình 1 trong User Mode đưa ra một lời gọi hệ thống, sau
đó tiến trình này chuyển qua trạng thái Kernel Mode và lời gọi này được phục vụ. Tiến
trình này sau đó trở về trạng thái thực thi ở User Mode cho đến khi xảy ra ngắt do
timer và lịch trình thực thi được kích hoạt trong trạng thái Kernel Mode. Tiến trình
khác được thay thế và tiến trình 2 bắt đầu thực thi trong User Model cho đến khi thiết
bị phần cứng phát ra ngắt. Kết quả của ngắt này là tiến trình 2 chuyển sang Kernel
Mode và phục vụ cho ngắt này.
Hình 1-3: sự chuyển trạng thái giữa User Mode và Kernel Mode
SVTH: Trần Quang Thuận – Phan Bá Minh. - 17 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.6.2 Thi hành một process
Để kernel có thể quản lý các tiến trình, mỗi tiến trình phải được mô tả bởi bằng
process descriptor (bao gồm thông tin về trạng thái hiện tại của tiến trình). Khi kernel
ngừng thực thi một tiến trình thì kernel phải lưu lại nội dung hiện tại của những thanh
ghi bộ xử lí khác nhau vào process descriptor bao gồm:
• Thanh ghi program counter và stack pointer.
• Thanh ghi mục đích chung.
• Thanh ghi float pointer.
• Thanh ghi trạng thái bộ xử lí (Processor Status Word)
• Thanh ghi quản lí bộ nhớ dùng để theo dõi việc sử dụng RAM của tiến
trình.
Khi kernel quyết định tái thực thi một tiến trình, kernel dùng process descriptor
tương ứng để nạp vào các thanh ghi CPU. Giá trị lưu lại của program counter trỏ đến
sau lệnh được thực hiện cuối cùng thì tiến trình trở lại thực thi từ nơi mà tiến trình bị
ngưng.
Khi một tiến trình tạm thời không thực thi trên CPU, nó đang đợi một số sự
kiện. kernel của Unix gọi từ nhiều trạng thái chờ khác. Việc này kiểm soát bởi hàng
đợi của process descriptor. Mỗi hàng đợi tương ứng một tập tiến trình đang chờ một số
sự kiện cụ thể nào đó.
1.6.3 Tái thực thi các process
Kernel của Unix có tính tái thực thi: nghĩa là trong cùng thời điểm, nhiều tiến
trình có thể thực thi trong Kernel Mode. Dĩ nhiên trên những hệ thống đơn vị xử lí chỉ
có một tiến trình chạy nhưng nhiều tiến trình có thể bị khóa trong Kernel Mode, đợi tài
nguyên CPU hoặc hoàn thành việc nhập xuất. Ví dụ như sau khi đưa ra yêu cầu đọc
đĩa, kernel sẽ để bộ điều khiển đĩa xử lí nó và trở về thực thi những tiến trình khác.
Một ngắt thông báo cho kernel biết khi thiết bị đã đáp ứng việc đọc này vì vậy có thể
trở lại thực thi tiến trình ban đầu.
Một phương pháp cung cấp khả năng tái thực thi là viết những hàm chỉ có thể
thay đổi các biến cục bổ và không làm thay đổi cấu trúc dữ liệu toàn cục. Các hàm như
vậy được gọi là những hàm tái thực thi (Reentrant functions). Nhưng kernel thì không
SVTH: Trần Quang Thuận – Phan Bá Minh. - 18 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
bị giới hạn như những hàm tái thực thi.. Thay vì vậy, kernel có thể gồm những hàm
không tái thực thi và sử dụng cơ chế khóa để chắc chắn rằng chỉ một tiến trình có thể
thi hành hàm không tái thực thi tại một thời điểm. Mỗi tiến trình trong Kernel Mode
chỉ hoạt động trên bộ nhớ của nó và không thể gây trở ngại với những tiến trình khác.
Nếu ngắt phần cứng xảy ra thì kernel có thể hoãn tiến trình đang chạy hiện tại
cho dù tiến trình đó đang ở trong Kernel Mode. Khả năng này có tính chất quan trọng
vì nó cải thiện tốc độ của bộ điều khiển thiết bị đã phát sinh ngắt. Khi một thiết bị sinh
ngắt, thiết bị đó đợi cho đến khi CPU trả lời. Nếu kernel trả lời một cách nhanh chóng
thì bộ điều khiển thiết bị có thể thực hiện những nhiệm vụ khác trong khi CPU xử lí
ngắt.
Kernel reentrancy ảnh hưởng lên việc tổ chức của kernel. Một kernel control
path chỉ rõ trình tự của tập lệnh được thực thi bởi kernel để xử lý một lời gọi hệ thống,
một ngoại lệ, hay một ngắt.
Trong trường hợp đơn giản nhất, CPU thực thi một kernel control path theo
tuần tự từ lệnh đầu tiên đến lệnh cuối cùng. CPU thêm vào những kernel control path
khi một trong những sự kiện dưới đây xảy ra:
• Một tiến trình đang thực thi trong User Mode gọi một lời gọi hệ thống và
kernel control path tương ứng xác định không thể thỏa mãn yêu cầu này
ngay, sau đó nó sẽ gọi một lịch trình để chọn một tiến trình mới đưa vào
thực thi. Kết quả là việc chuyển trạng thái tiến trình xảy ra. Kernel
control path đầu tiên chưa hoàn thành và CPU tái thực thi những kernel
control path khác. Trong trường hợp này, hai control path được thực thi
với tư cách là 2 tiến trình khác nhau.
• CPU phát hiện một ngoại lệ, ví dụ có truy cập đến một page không có
trong RAM trong khi đang chạy một kernel control path. Control path
đầu tiên bị hoãn lại và CPU bắt đầu thực thi các thủ tục thích hợp. Thủ
tục này có thể định vị một page mới cho tiến trình và đọc nội dụng của
nó từ đĩa. Khi thủ tục kết thúc, control path đầu tiên được gọi lại. Trong
trường hợp này, hai control path được thực thi với tư cách là cùng một
tiến trình.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 19 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
• Ngắt phần cứng xảy ra trong khi CPU đang chạy một kernel control path
với việc ngắt được cho phép. Kernel control path đầu tiên chưa hoàn
thành và CPU bắt đầu xử lí kernel control path khác để điều khiển ngắt.
kernel control path đầu tiên gọi lại khi bộ điều khiển ngắt kết thúc.
Trong trường hợp này hai kernel control path là sự thực thi của cùng một
tiến trình và tất cả thời gian thực thi đều được tính là của nó. Tuy nhiên,
bộ điều khiển ngắt không cần thiết hoạt động với tư cách một tiến trình.
Hình 1-4 minh họa vài ví dụ của việc chèn vào và không chèn vào kernel
control path. Xem xét ba trạng thái khác nhau của CPU:
• Thực thi một tiến trình trong trạng thái User Mode (User)
• Thực thi một ngoại lệ hoặc bộ điều khiển lời gọi hệ thống (Excp).
• Thực thi bộ điều khiển ngắt (Intr)
Hình 1-4: Việc chèn kernel control path
1.6.4 Không gian địa chỉ các tiến trình:
Mỗi tiến trình chạy trong không gian địa chỉ riêng của nó. Một tiến trình chạy
trong trạng thái User Mode sử dụng vùng stack, dữ liệu và code riêng. Khi chạy trong
Kernel Mode, tiến trình lại định vị địa chỉ vùng kernel data, vùng code và sử dụng
vùng stack khác. Vì kernel có tính tái thực thi, những kernel control path khác nhau –
mỗi cái liên quan đến một tiến trình khác nhau có thể được thực thi lần lượt. Trong
trường hợp này, mỗi kernel control path qui cho vùng stack kernel riêng.
Mỗi tiến trình khi thực thi truy cập vào không gian địa chỉ riêng, đôi khi một
phần của không gian địa chỉ được chia sẻ giữa các tiến trình. Trong một số trường hợp
sự chia sẻ này được yêu cầu bởi các tiến trình, một số khác thì được thực hiện tự động
bởi kernel để giảm bớt việc sử dụng bộ nhớ.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 20 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Nếu nhiều user cần dùng cùng một chương trình cùng lúc thì chỉ nạp chương
trình vào bộ nhớ một lần và những lệnh đó có thể được chia sẻ bởi tất cả các user nào
cần nó. Dữ liệu dĩ nhiên không được chia sẻ bởi vì mỗi user có những dữ liệu riêng
biệt. Kiểu chia sẻ không gian địa chỉ được thực hiện một cách tự động bởi kernel để
tiết kiệm bộ nhớ.
Những tiến trình cũng chia sẻ một phần không gian bộ nhớ là loại giao tiếp giữa
các tiến trình với nhau sử dụng kĩ thuật bộ nhớ chia sẻ được giới thiệu trong System V
và được hỗ trợ bởi Linux.
Cuối cùng, Linux hỗ trợ lời gọi hệ thống mmap(), là lời gọi cho phép một phần
của tập tin hay bộ nhớ trên một thiết bị được ánh xạ là một phần của không gian địa
chỉ tiến trình. Việc ánh xạ bộ nhớ cung cấp sự lựa chọn đọc và ghi thông thường cho
việc truyền dữ liệu. nếu nhiều tiến trình khác nhau cũng chia sẻ một tập tin thì không
gian địa chỉ của mỗi tiến trình mà chia sẻ tập tin sẽ bao gồm việc ánh xạ bộ nhớ.
1.6.5 Sự đồng bộ hóa và những vùng then chốt:
Thi hành một reentrant kernel cần thiết sự đồng bộ hóa: nếu một kernel control
path bị hoãn trong khi tác động lên cấu trúc dữ liệu của kernel thì không một kernel
control path nào sẽ được cho phép tác động lên cấu trúc dữ liệu này trừ khi nó được
xác lập lại một trạng thái nhất định nào đó. Nếu không thì việc ảnh hưởng của hai
control path có thể làm hỏng thông tin được lưu trữ.
Ví dụ, giả sử có một biến toàn cục V chứa số mục tin có sẵn của tài nguyên hệ
thống. Kernel control path A đầu tiên đọc biến và quyết định rằng chỉ có một mục tin
có sẵn. tại thời điểm đó, một kernel control path B khác được kích hoạt và cũng đọc
biến này, biến này vẫn chứa giá trị 1. Do đó B giảm một giá trị V và bắt đầu sử dụng
mục tin tài nguyên này. Sau đó A trở lại sự thực thi; bởi vì nó đã đọc giá trị của V rồi,
A cho rằng A có thể giảm V và lấy mục tin tài nguyên mà B đã sử dụng rồi. Kết quả
cuối cùng V chứa -1, và hai kernel control path đang sử dùng cùng mục tin tài nguyên
với sai sót tiềm tàng.
Trong ví dụ trước, việc hỏng dữ liệu sẽ không xảy ra nếu hai control path đọc
và giảm V với quá trình hoạt động đơn lẻ, không gián đoạn. Tuy nhiên kernel bao gồm
rất nhiều cấu trúc dữ liệu mà không thể truy xuất chỉ bằng một hành động đơn lẻ. Ví
SVTH: Trần Quang Thuận – Phan Bá Minh. - 21 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
dụ, không thể gỡ bỏ một phần tử từ một danh sách liên kết bằng một hành động đơn lẻ,
bởi vì kernel cần truy xuất ít nhất hai con trỏ cùng một lúc. Bất cứ đoạn code cần phải
được hoàn thành trước tiến trình khác bắt đầu được gọi là vùng then chốt (Critical
region).
Những vấn đề xảy ra không những giữa các kernel control path mà còn giữa
các tiến trình chia sẻ dữ liệu chung. Những kĩ thuật đồng bộ hóa khác nhau vẫn được
chấp nhận.
1.6.6 Việc giao tiếp tín hiệu và liên tiến trình
Tín hiệu Linux/Unix cung cấp cơ chế để thông báo những tiến trình của những
sự kiện trong hệ thống. Mỗi sự kiện có số tín hiệu của riêng nó ví dụ như SIGTERM.
Có 2 loại sự kiện hệ thống:
Thông báo bất đồng bộ: ví dụ, một người dùng có thể gửi tín hiệu ngắt
SIGTERM đến một tiến trình bằng cách nhấn mã phím ngắt (thường là CTRL-C) ở
thiết bị đầu cuối.
Những ngoại lệ hay lỗi đồng bộ: ví dụ, kernel gửi tín hiệu SIGSEGV đến một
tiến trình khi nó truy xuất vị trí bộ nhớ ở địa chỉ không hợp lệ.
Chuẩn POSIX định nghĩa khoảng 20 tín hiệu khác nhau, hai trong số đó là
người dùng định nghĩa và có thể được sử dụng như là cơ chế ban đầu cho việc giao
tiếp và đồng bộ giữa các tiến trình trong User Mode. Nhìn chung, một tiến trình phải
phản ứng lại tín hiệu thu nhận bằng hai cách:
• Lờ đi tín hiệu.
• Không đồng bộ thực thi một thủ tục riêng biệt (bộ điều khiển tín hiệu).
Nếu tiến trình không định rõ một trong những tùy chọn này, kernel sẽ thực hiện
hành động mặc định dựa trên số tín hiệu. Năm hành động mặc định có thể có là:
• Kết thúc tiến trình
• Ghi nội dung thực thi và nội dung của không gian địa chỉ vào tập tin
(core dump) và kết thúc tiến trình.
• Lờ đi tín hiệu.
• Hoãn tiến trình.
• Gọi lại sự thực thi của tiến trình nếu nó bị ngưng.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 22 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Xử lí tín hiệu kernel khá phức tạp vì POSIX cho phép những tiến trình ngăn tín
hiệu tạm thời. Hơn nữa, một vài tín hiệu như SIGKILL không thể xử lí trực tiếp bởi
tiến trình và không thể phớt lờ.
Chia sẻ bộ nhớ cung cấp cách nhanh nhất cho những tiến trình trao đổi và chia
sẻ dữ liệu. một tiến trình bắt đầu bằng cách đưa ra một lời gọi hệ thống shmget() để tạo
bộ nhớ chia sẻ mới có kích thước theo yêu cầu. Sau khi có được định danh tài nguyên
IPC, tiến trình này triệu gọi lời gọi hệ thống shmat()sẽ trả về địa chỉ bắt đầu của vùng
mới trong không gian địa chỉ tiến trình. Khi tiến trình muốn gỡ bỏ bộ nhớ chia sẻ từ
không gian địa chỉ của nó, nó gọi shmdt(). Sự thi hành chia sẻ bộ nhớ dựa trên việc
kernel thực thi không gian địa chỉ tiến trình như thế nào.
1.6.7 Quản lí tiến trình:
Linux/Unix phân biệt rõ ràng giữa tiến trình và chương trình nó đang thực thi.
Để kết thúc, lần lượt sử dụng lời gọi hệ thống fork() và exit() để tạo một tiến trình mới
và kết thúc nó, trong khi gọi exec() để nạp một chương trình mới. Sau đó thực thi lời
gọi hệ thống, tiến trình trở về thực thi với một không gian địa chỉ hoàn toàn mới chứa
chương trình đã nạp.
Tiến trình gọi fork() là tiến trình cha (parent) trong khi tiến trình mới là tiến
trình con (child). Parent và child có thể tương tác với nhau vì cấu trúc dữ liệu mô tả
mỗi tiến trình bao gồm một con trỏ chỉ đến parent và những con trỏ chỉ đến child ngay.
Lời gọi hệ thống exit() kết thúc tiến trình. Kernel xử lí lời gọi hệ thống bằng
cách giải phóng các tài nguyên mà tiến trình làm chủ và gửi tiến trình parent một tín
hiệu SIGCHLD tín hiệu này mặc định bị lờ đi.
1.6.7.1 Zombie process
Làm cách nào một tiến trình parent biết thông tin kết thúc của children? Lời gọi
hệ thống wait() cho phép một tiến trình đợi cho đến khi một trong những children của
nó kết thúc, nó trả về định danh tiến trình (PID) của child đã kết thúc.
Khi thực thi lời gọi hệ thống này, kernel kiểm tra một child đã kết thúc hay
chưa. Trạng thái tiến trình đặc biệt zombie được giới thiệu để đại diện cho những tiến
trình đã kết thúc: một tiến trình còn trong trạng thái đó cho đến khi tiến trình parent
của nó thực thi một lời gọi hệ thống wait() lên nó. Bộ xử lý lời gọi hệ thống trích một
SVTH: Trần Quang Thuận – Phan Bá Minh. - 23 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
số dữ liệu về việc sử dụng tài nguyên từ những trường miêu tả tiến trình, sinh ra một
mô tả tiến trình khi dữ liệu được thu thập. Nếu không có tiến trình child nào đã kết
thúc khi lời gọi hệ thống wait() được thi hành thì kernel thường đặt tiến trình trong
trạng thái chờ cho đến khi một child nào đó kết thúc.
Nhiều kernel cũng thực thi lời gọi hệ thống waitpid() cho phép một tiến trình
đợi một tiến trình child cụ thể. Kernel giữ thông tin trên tiến trình của child cho đến
khi parent cấp phát lời gọi wait(), nhưng giả sử tiến trình của parent kết thúc mà không
gọi wait()? Thông tin quan trọng lấy ở bộ nhớ có thể được sử dụng để phục vụ cho
những tiến trình đang hoạt động. Ví dụ, nhiều shell cho phép user thực hiện lệnh ở
background rồi sau đó log out. Tiến trình đang chạy trên shell kết thúc, nhưng children
của nó vẫn tiếp tục hoạt động.
Giải pháp dựa vào tiến trình hệ thống đặc biệt được gọi là init được tạo ra trong
suốt việc khởi tạo hệ thống. Khi một tiến trình kết thúc, kernel thay đổi con trỏ mô tả
tiến trình thích hợp của tất cả children đang tồn tại của tiến trình đã kết thúc để làm
chúng trở thành children của init. Tiến trình này theo dõi sự thực thi của tất cả children
của nó và thông thường cấp phát lời gọi hệ thống wait(),điều đó có nghĩa là tống khứ
tất cả các zombie.
1.6.7.2 Nhóm tiến trình và phiên đăng nhập:
Những hệ điều hành Unix mới giới thiệu khái niệm của process group để trình
bày khái niệm “job”. Ví dụ, để thực thi câu lệnh
$ ls | sort | more
Shell phải hỗ trợ tiến trình nhóm như là bash, tạo một nhóm mới cho ba tiến
trình tương ứng với ls, sort và more. Shell đóng vai trò trên ba tiến trình như thể chúng
là những thực thể đơn lẻ. Mỗi bộ mô tả tiến trình bào gồm một trường process group
ID. Mỗi nhóm của các tiến trình có một group leader là tiến trình có PID trùng với
process group ID. Một tiến trình được tạo mới thì được chèn vào nhóm tiến trình của
parent của nó.
Kernel Unix cũng giới thiệu phiên đăng nhập. Một phiên đăng nhập chứa tất cả
tiết trình con của tiến trình bắt đầu một phiên làm việc trên terminal. Tất cả tiến trình
trong một nhóm tiến trình phải cùng phiên đăng nhập. Một phiên đăng nhập có nhiều
nhóm tiến trình đang hoạt động cùng lúc, một trong những nhóm tiến trình này luôn
SVTH: Trần Quang Thuận – Phan Bá Minh. - 24 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
luôn trong foreground, nghĩa là nó truy xuất terminal. Những nhóm tiến trình đang
hoạt động khác ở background. Khi một tiến trình background cố gắng truy xuất
terminal, nó nhận một tín hiệu SIGTTIN hay SIGTTOUT. Trong nhiều câu lệnh shell,
sử dụng lệnh nội trú bg và fg để đặt nhóm tiến trình hoặc là ở background hay ở
foreground.
1.6.8 Quản lý bộ nhớ
1.6.8.1 Bộ nhớ ảo
Tất cả các hệ thống Linux gần đây cung cấp khái niệm hữu ích được gọi là bộ
nhớ ảo. Bộ nhớ ảo đóng vai trò như là tầng logic giữa yêu cầu bộ nhớ ứng dụng và đơn
vị quản lí bộ nhớ (MMU) phần cứng. Bộ nhớ ảo có rất nhiều mục đích và ưu điểm:
• Những tiến trình khác nhau có thể được thực thi đồng thời.
• Có thể chạy những ứng dụng mà nhu cầu bộ nhớ lớn hơn bộ nhớ vật lí.
• Tiến trình có thể chạy một chương trình mà có code chỉ được nạp một
phần vào bộ nhớ.
• Cho phép mỗi tiến trình truy xuất tập hợp con của bộ nhớ vật lí có sẵn.
• Những tiến trình chia sẻ ảnh bộ nhớ đơn của một thư viện hay chương
trình.
• Có thể đặt lại vị trí cho những chương trình ở bất cứ vị trí nào trong bộ
nhớ vật lý.
• Người lập trình viết code độc lập với máy vì họ không cần hiểu biến
nhiều về tổ chức bộ nhớ vật lý
Thành phần chính của hệ thống bộ nhớ ảo là khái niệm không gian bộ nhớ ảo.
Các tham chiếu bộ nhớ mà một tiến trình có thể sử dụng khác với địa chỉ bộ nhớ vật lý.
Khi một tiến trình sử dụng địa chỉ ảo, kernel và MMU hợp tác định vị địa chỉ vật lí của
bộ nhớ được yêu cầu.
Các CPU ngày nay bao gồm cả mạch phần cứng tự động dịch địa chỉ ảo thành
địa chỉ vật lý. Chia RAM thành nhiều page 4KB hay 8 KB và các page table chi tiết để
xác định rõ sự tương ứng giữa địa chỉ ảo và địa chỉ vật lý. Những mạch này làm cho
việc định vị bộ nhớ đơn giản hơn bởi vì mỗi yêu cầu cần một khối địa chỉ ảo liên tiếp
SVTH: Trần Quang Thuận – Phan Bá Minh. - 25 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
nhau có thể được đáp ứng bằng cách cấp phát một nhóm page có địa chỉ vật lí không
liên tục.
1.6.8.2 Sử dụng bộ nhớ truy xuất ngẫu nhiên
Tất cả hệ điều hành Unix phân biệt rõ thành hai phần của RAM. Vài MB dùng
để lưu trữ ảnh kernel (kernel code và cấu trúc dữ liệu tĩnh của kernel). Phần còn lại của
RAM được điều khiển bởi hệ thống bộ nhớ ảo và được sử dụng theo 3 cách khả thi
sau:
• Đáp ứng yêu cầu của kernel về bộ đệm, bộ mô tả và những cấu trúc dữ
liệu kernel động khác.
• Đáp ứng yêu cầu của tiến trình cho vùng bộ nhớ chung và cho việc ánh
xạ bộ nhớ của tập tin.
• Có khả năng thực thi tốt hơn từ ổ đĩa và những thiết bị đệm khác bằng
cache.
Mặt khác, vì bộ nhớ RAM có giới hạn, phải thực hiện cân đối giữa những dạng
yêu cầu bộ nhớ, đặc biệt khi bộ nhớ trống còn ít sẽ bị bỏ. Ngoài ra khi đến ngưỡng tới
hạn của bộ nhớ có sẵn, có thể triệu gọi thuật toán page-frame-reclaiming để giải
phóng thêm bộ nhớ.
1.6.8.3 Bộ định vị bộ nhớ kernel:
Kernel Memory Allocator (KMA) là một hệ thống phụ cố gắng đáp ứng những
yêu cầu cung cấp vùng bộ nhớ từ tất cả các phần của hệ thống. Một số những yêu cầu
này đến từ những hệ thống phụ khác cần bộ nhớ cho kernel sử dụng, một số yêu cầu
đến thông qua lời gọi hệ thống từ chương trình của người dùng để tăng không gian địa
chỉ tiến trình. Một KMA hiệu quả có những đặc điểm sau:
• Phải nhanh, đây là thuộc tính chủ yếu, vì nó được triệu gọi bởi tất cả
kernel hệ thống phụ (bao gồm bộ xử lí ngắt).
• Tối thiểu lượng bộ nhớ lãng phí.
• Cố gắng giảm bớt vấn đề phân mảnh bộ nhớ.
• Cùng với những hệ thống phụ quản lí bộ nhớ khác để mượn và giải thoát
các page
Nhiều loại KMA khác nhau được đề xuất dựa trên nhiều thuật toán khác nhau:
• Bộ định vị bản đồ tài nguyên hệ thống
SVTH: Trần Quang Thuận – Phan Bá Minh. - 26 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
• Danh sách Power-of-two.
• Bộ định vị McKusick-Karels
• Hệ thống Buddy
• Bộ định vị Mach’s Zone.
• Bộ định vị Dynix.
• Bộ định vị Solaris’s Slab
1.6.8.4 Điều khiển không gian địa chỉ ảo của tiến trình :
Không gian địa chỉ của tiến trình chứa tất cả địa chỉ bộ nhớ ảo mà tiến trình đó
được phép tham chiếu. Kernel thường lưu không gian địa chỉ ảo của tiến trình lên một
danh sách các mô tả vùng nhớ. Ví dụ, khi một tiến trình bắt đầu thực thi một số
chương trình thông qua lời gọi hệ thống giống như exec(), kernel gán cho tiến trình
một không gian địa chỉ ảo mà gồm cả vùng bộ nhớ cho:
• Code thực thi của chương trình
• Dữ liệu khởi tạo của chương trình
• Dữ liệu chưa khởi tạo của chương trình
• Program stack khởi tạo của chương trình (đó là User Mode stack) code
thực thi và dữ liệu của thư viện chia sẻ.
• Heap (bộ nhớ được yêu cầu linh động bởi chương trình)
Tất cả hệ điều hành Linux/Unix gần đây sử dụng cách định vị trí bộ nhớ
demand paging. Với demand paging, một tiến trình có thể bắt đầu thực thi chương
trình với không có page nào của nó trong bộ nhớ vật lý. Khi nó truy xuất một page
không tồn tại, MMU phát ra một ngoại lệ, bộ xử lí ngoại lệ tìm vùng bộ nhớ có liên
quan, định vị trí một page trống và khởi tạo nó với dữ liệu thích hợp. Tương tự, khi
tiến trình yêu cầu linh động bộ nhớ bằng cách sử dụng lời gọi hệ thống malloc() hay
brk(), kernel chỉ việc cập nhật kích thước của vùng nhớ heap của tiến trình. Gán một
page cho tiến trình chỉ khi nó phát ra một ngoại lệ khi cố gắng tham chiếu đến địa chỉ
bộ nhớ ảo.
Không gian địa chỉ ảo cũng cho phép những cách hiệu quả khác như Copy-On-
Write. Ví dụ, khi tạo một tiến trình mới, kernel chỉ việc gán page của parent cho
không gian địa chỉ của child nhưng nó đánh dấu là read only. Xảy ra một ngoại lệ ngay
SVTH: Trần Quang Thuận – Phan Bá Minh. - 27 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
khi parent hay child cố gắng sửa đổi nội dung của page. Bộ xử lí ngoại lệ gán một
page mới để tiến trình tương tác và khởi tạo nó với nội dung của trang gốc.
1.6.8.5 Swapping và caching
Để mở rộng kích thước của việc sử dụng không gian địa chỉ ảo bởi tiến trình, hệ
điều hành Unix tạo ra vùng swap trên ổ đĩa. Bộ nhớ ảo hệ thống theo dõi nội dung của
một page là đơn vị cơ bản cho swapping. Bất cứ khi nào những tiến trình tham khảo
đến page ngoài swap , MMU phát sinh một ngoại lệ. Bộ xử lí ngoại lệ sau đó cấp phát
một page mới và khởi tạo page với nội dung gốc được lưu trên ổ đĩa.
Mặt khác, bộ nhớ vật lí cũng được sử dụng như là cache cho ổ đĩa cứng và
những khối thiết bị khác. Vì đĩa cứng truy xuất chậm: truy cập ổ đĩa mất nhiều
milliseconds, đó là thời gian rất lớn so với thời gian truy cập RAM. Do đó, những ổ
đĩa này thường làm chậm khả năng thực thi của hệ thống. Một trong những thứ đã
được thực thi trong hệ thống Unix sớm nhất là làm chậm việc ghi lên đĩa bằng cách
nạp vào RAM một tập bộ đệm ổ đĩa tương ứng với nội dung đọc từ ổ đĩa. Lời gọi hệ
thống sync() thúc đẩy sự đồng bộ ổ đĩa bằng cách ghi tất cả những bộ đệm (ví dụ tất cả
bộ đệm có nội dung khác với khối tương ứng trong ổ đĩa) lên đĩa. Để tránh mất dữ liệu,
tất cả hệ điều hành theo dõi định kì việc ghi dữ liệu từ bộ đệm vào ổ đĩa.
1.6.9 Device Drivers
Kernel tương tác với thiết bị nhập xuất là các device driver. Device driver nằm
trong kernel và chứa cấu trúc dữ liệu, các chức năng để điều khiển một hay nhiều thiết
bị như ổ đĩa cứng, bàn phím, chuột, màn hình, card mạng và những thiết bị kết nối đến
SCSI bus. Mỗi driver tương tác với phần còn lại của kernel (thậm chí với driver khác)
thông qua một giao tiếp riêng biệt. Hướng tiếp cận này có những lợi ích sau:
• Mã đặc tả thiết bị có thể được đóng gói trong module cụ thể.
• Nhà cung cấp có thể thêm thiết bị mới mà không cần biết source code
của kernel: chỉ cần biết đặc tả của interface.
Kernel xem tất cả thiết bị giống nhau và truy xuất chúng thông qua cùng
interface
Có thể ghi một device driver như là một module mà có thể được linh động nạp
vào kernel mà không cần yêu cầu hệ thống khởi động lại, cũng có thể không nạp
SVTH: Trần Quang Thuận – Phan Bá Minh. - 28 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
những module mà không còn được yêu cầu sử dụng nữa, vì vậy tối thiểu hóa kích
thước ảnh kernel được lưu trữ trên RAM.
Hình dưới mô tả những device driver interface với phần còn lại của kernel và
các những tiến trình. Một số chương trình người dùng muốn thao tác trên thiết bị phần
cứng. Chương trình user đưa ra yêu cầu đến kernel, sử dụng lời gọi hệ thống tập tin có
liên quan và những tập tin về thiết bị thông thường được tìm thấy trong thư mục /dev.
Tập tin thiết bị là phần cho user giao tiếp với phần cứng. Mỗi tập tin thiết bị tham khảo
đến một device driver cụ thể nào đó mà được triệu gọi bởi kernel để thực hiện những
hoạt động được yêu cầu trên phần cứng.
Hình 1-5: Device driver interface
SVTH: Trần Quang Thuận – Phan Bá Minh. - 29 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Chương 2 Thiết kế một hệ thống Linux nhúng
2.1 Phần cứng hỗ trợ
2.1.1 Kiến trúc CPU
Linux có thể chạy trên rất nhiều kiến trúc CPU khác nhau, tuy nhiên không phải
kiến trúc nào cũng được sử dụng trong hệ thống nhúng, phần này chỉ giới thiệu qua
những kiến trúc điển hình và các board kèm theo CPU.
Dòng x86 bắt đầu từ 368 được Intel giới thiệu vào năm 1985 và bao gồm những
sản phẩm nối tiếp, 486 và họ Pentium, cùng với các bộ xử lý tương thích của hãng
khác như AMD hay National Semiconductor. Mặc dù x86 phổ biến nhất và là nền tảng
được cộng đồng Linux sử dụng, nó chỉ đại diện cho một bộ phận nhỏ của các thiết bị
nhúng trên thị trường. Hầu hết các nhà thiết kế đều sử dụng bộ xử lý ARM, MIPS hay
PowerPC vì mức độ phức tạp và giá thành chung.
ARM, viết tắt của Advanced RISC Machine, là một họ vi xử lý tiếp tục được
công ty ARM Holding duy trì và phát triển. Trái ngược với các công ty khác như IBM,
Motorola hay Intel. ARM không sản xuất CPU mà thiết kế các nhân CPU dựa trên
nhân ARM cho các khách hàng của họ, thay đổi tùy theo nhu cầu cho phù hợp với ứng
dụng của khách hàng. Vì vậy có một đặc điểm dộc đáo là tất cả các bộ xử lý ARM đều
sử dụng chung tập lệnh, điều này giúp cho tính tương thích của các phần mềm được
nâng cao.
Kiến trúc PowerPC là kết quả của sự hợp tác giữa IBM, Motorola và Apple.
Thừa hưởng ý tưởng từ 3 hãng lớn này, đặc biệt là IBM với kiến trúc Performance
Optimization With Enhanced RISC (POWER). Chip PowerPC được biết đến trong
sản phẩm Apple’s Mac và còn rất nhiều các máy tính đến những hệ thống nhúng dùng
PowerPC làm bộ xử lý. Hệ thống TiVO phổ biến dựa trên CPU PowerPC. Cũng như
x86, ARM là họ xử lý được hỗ trợ đầy đủ trên hệ điều hành Linux.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 30 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Ngoài những CPU kể trên, MIPS, Hitachi SuperH hay Motorola 68000 cũng
được sử dụng trong các hệ thống Linux nhúng.
2.1.2 Bus và các chuẩn giao tiếp
Bus và các chuẩn giao tiếp là nền tảng để CPU có thể kết nối đến các thiết bị
ngoại vi. Mỗi chuẩn bus hay các chuẩn giao tiếp có tính phức tạp riêng của nó và khả
năng hỗ trợ của Linux cho các chuẩn bus hay giao tiếp rất lớn. Đối với các hệ thống
nhúng ngày nay, hầu hết các chuẩn giao tiếp công nghiệp và thương mại đều có sử
dụng trên hệ thống nhúng, nhưng đặc biệt là các chuẩn như USB, IEEE194 hay I2C vì
tính ưu việt và nhỏ gọn của nó. Ngoài ra những chuẩn như ISA, PCI, PCMCIA,
CompactPCI, Parallel port hay SCSI cũng có thể được sử dụng trong các hệ thống
nhúng.
2.1.3 Các thiết bị lưu trữ
Tất cả các hệ thống nhúng cần thiết một thiết bị lưu trữ bền bỉ để khởi động từ
những giai đoạn đầu tiên của quá trình boot. Hầu hết các hệ thống, bao gồm cả những
hệ thống Linux nhúng đều liên tục sử dụng sử dụng các thiết bị lưu trữ được khởi tạo
ban đầu trong suốt quá trình hoạt động, để thực thi code hay truy xuất dữ liệu. Nếu so
sánh với những hệ thống nhúng cở điển thì Linux yêu cầu cao hơn đối với những thiết
bị lưu trữ cho hệ thống nhúng, cả về kích thước và tổ chức.
Trong các thuật ngử của Linux, memory technology devices (MTD) để chỉ tất cả
các thiết bị nhớ như ROM, RAM, bộ nhớ flash và M-Systems' DiskOnChip (DOC).
Mỗi thiết bị có khả năng, nét đặc thù riêng và giới hạn của chúng. Vì vậy để lập trình
và sử dụng các MTD trong hệ thống nhúng, người phát triển hệ thống thường dùng
những công cụ và phương pháp riêng cho thiết bị đó.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 31 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 2-1: Các bộ nhớ MTD
Mặc dầu chỉ có một phần nhỏ các thiết bị nhúng truyền thống sử dụng không
gian lưu trữ lớn như trên một đĩa cứng IDE, nhưng hầu hết lại có nhiều hệ thống nhúng
lại sử dụng các thiết bị flash tương thích ATA (AT attatchment, thường được hiểu là
IDE (Integrated Drive Electronics). ATA là tên chính thức của chuẫn giao tiếp phát
triển bởi 3 công ty Impromis, Western Digital và Compaq.) như CompactFlash. Các
thiết bị lưu trữ CompactFlash chỉ có thể truy xuất qua chuẩn ATA.
Trong các hệ thống Linux nhúng có sử dụng lưu trữ trên đĩa, thông thường đĩa
sẽ lưu trữ các OS bootloader, root filesystem và có thể là một phân vùng swap. Điều
đáng ngạc nhiên ở đây là không phải hệ thống nhúng cũng tương thích với các ổ đĩa
ATA, nó phải được cấu hình trong lúc biên dịch nhân thì mới có thể truy xuất vào lúc
khởi động hệ thống.
Hệ thống Linux nhúng ít khi sử dụng chuẩn SCSI làm chuẩn giao tiếp với thiết
bị lưu trữ. SCSI thường dùng trong các server nhiều hơn vì tốc độ và độ tin cậy của nó.
2.1.4 Kết nối mạng
Ngày càng có nhiều hệ thống nhúng được tích hợp kết nối mạng. Linux cũng hỗ
trợ rất nhiều các phần cứng mạng. Điển hình nhất là các chuẩn mạng Ethenet, IrDA
(Infrared Data Association (IrDA) ra đời năm 1993 bởi hơn 50 công ty với mục tiêu
tạo ra và đẩy mạnh sử dụng thiết bị kết nối hồng ngoại giá thành thấp.) và Bluetooth
được sử dụng nhiều trên các thiết bị nhúng do khả năng đem lại của nó.Ethernet hiện
SVTH: Trần Quang Thuận – Phan Bá Minh. - 32 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
nay là thiết bị thâm nhập nhiều nhất, tài liệu nhiều nhất và giá thành thấp nhất trong
những chuẩn giao tiếp mạng khác.
Hình 2-2: Các nhánh của IrDA trong Linux
Hình 2-3: Các nhánh của Linux BlueZ Bluetooth
2.2 Các công cụ phát triển
Để chúng ta có thể biên dịch để hệ điều hành có thể chạy trên nền CPU không
phải x86?. Để làm được điều đó ta cần một bộ biên dịch chéo (cross-compiler) .Nhiệm
vụ của bộ biên dịch này là sẽ chuyển những mã lệnh nhị phân viết trên nền CPU này
SVTH: Trần Quang Thuận – Phan Bá Minh. - 33 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
thành những mã lệnh nhị phân trên nền CPU khác . Ví dụ như khi ta biên dịch
MontaVista trên máy host là x86 của Intel nhưng mục đích của chúng ta muốn chạy
MontaVista trên nền PowerPC thì ta sẽ cần một cross compiler để chuyển đổi những
mã lệnh chạy trên nền x86 sang mã lệnh chậy trên PowerPC. Các Cross-compiler này
thường được phát triển bởi những chuyên gia rất giỏi về kiến trúc CPU bởi vì chỉ có
thể chuyển đổi một mã lệnh nhị phân từ nền CPU này sang nền CPU khác ta phải biết
kiến trúc CPU, cách định địa chỉ, các quy định về opcode, operand của cả hai CPU đó.
Kèm theo đó là những công cụ cần thiết để phát triển các ứng dụng chạy trên target
bao gồm các tiện ích ở dạng nhị phân, bộ biên dịch C (gcc) và thư viện C (glibc). Việc
cầu hình và xây dựng một toolchain phức tạp và là một tiến trình độp lập đòi hỏi có
kiến thức phụ thuộc giữa các gói phần mêm và những quy luật tương ứng của chúng.
Hiểu biết này là rất cần thiết, vì các phiên bãn GNU toolchain được phát triển và đưa
ra độc lập với nhau.
Host Target Kernel Binutils Gcc Glibc Patch
i386 PPC 2.10.1 2.95.3 2.2.1 Không
PPC i386 2.13.2.1 2.95.3 2.2.3 Không
i386 ARM 2.4.1-rmk1 2.10.1 2.95.3 2.1.3 Có
PPC i386 2.13.2.1 3.2.1 2.3.1 Không
PPC ARM 2.10.1 2.95.3 2.2.3 Có
i386 MIPS 2.8.1 egcs-1.1.2 2.0.6 Có
i386 SuperH 2.11.2 3.0.1 2.2.4 Có
Bảng 2-1: Kết hợp phiên bản các gói công cụ và thư viện
2.3 Chọn lựa và biên dịch Linux kernel
Đây là những phân phối (distributions - distro) thương mại được duy trì hỗ trợ
từ những nhà cung cấp. Các distro này cung cấp khả năng, giải pháp đối với hàng loạt
các kiến trúc hệ thống cho các thị trường khác nhau. Từ các hệ thống thông tin liên lạc
cao cấp đến các thiết bị cầm tay, các thiết bị điều khiển thông thường…
• AMIRIX: Embedded Linux
SVTH: Trần Quang Thuận – Phan Bá Minh. - 34 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Có nguồn gốc từ mã nguồn mở Debian GNU/Linux, được thay đổi để hỗ trợ
thêm nhiều thiết bị chuyên dụng cùng các công cụ cấu hình hệ thống. Hỗ trợ small-
footprint, diskless, Flash-based, đòi hỏi hệ thống headless
• Coollogic: Coollinux
Coollinux AE (Appliance Edition) kết hợp sức mạnh của hệ điều hành Linux
nhúng và công nghệ Java thành một hệ điều hành cho các thiết bị Internet thế hệ mới.
• Coventive: Xlinux
Một nhân Linux đầy đủ tính năng và có thể cấu hình chỉ nhỏ khoảng 143KB
cho các ứng dụng thông tin và các thiết bị nhúng. Hỗ trợ các dòng xử lý: 586, 686,
MediaGX, STPC, StrongARM, SH3/SH4, PA-RISC, ARM-7…
• Esfia: RedBlue Linux
Một distro Linux nhúng cho các giải thông tin vô tuyến, có nguồn gốc từ nhân
Linux phiên bản 2.4. Nhân Linux thông thường chỉ chiếm khoảng 400KB và hỗ trợ
các bộ xử lý có MMU lẫn không có.
• KaeilOS (formerly Klinux)
Distro Linux cho các ứng dụng công nghiệp. Bao gồm cả các thiết bị phát triển
và sửa lỗi cho các hệ thống nhúng real-time. Các tài liệu chi tiết hoàn toàn được viết
bởi công ty Koan Software, Bergamo, Italy.
• KYZO: PizzaBox Linux
Sự kết hợp của Linux và Samba, là một distro dùng làm server phục vụ quản lý
file, máy in và đĩa CD. Thiết kế rất nhỏ gọn, chỉ cần 6MB Flash chạy trên xử lý 486
(hoặc mạnh hơn).
• Lineo: Embedix
Giải pháp Linux nhúng được thiết kế cho hệ thống đặc biệt về tốc độ, bộ nhớ và
các thiết bị lưu trữ. Hỗ trợ nhiều dòng xử lý (có và không có MMU) như X86,
PowerPC, ARM, MIPS… Bao gồm cả hỗ trợ cho small-footprint, real-time.
• LynuxWorks: BlueCat
Distro này đáp ứng yêu cầu của những người pháp triển hệ thống nhúng. Cho
phép cấu hình phù hợp với yêu cầu của hệ thống nhúng. Hỗ trợ từ các thiết bị nhỏ đến
những hệ thống lớn đa bộ xử lý và co tính khả dụng cao, hỗ trợ các dòng xử lý X86,
PowerPC, ARM, MIPS…
SVTH: Trần Quang Thuận – Phan Bá Minh. - 35 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
• Mizi: Linu@
Linu@ là một hệ điều hành Linux nhúng với giao diện người dùng trên
Qt/Embedded. Tính hiệu quả và kích thước nhỏ gọn nên rất phù hợp với các thiết bị
Internet, điện thoại thông minh, hay thiết bị trợ lý số. Hỗ trợ nhiều dòng xử lý như
ARM, StrongARM, MIPS, x86, và MPC. Hệ điều hành chỉ cần 2MB DRAM và 4MB
Flash memory.
• Neoware: NeoLinux
Distro Linux nhúng này phát triển từ Red Hat Linux và được tối ưu cho các
thiết bị tin tức. Hỗ trợ khả năng khởi động từ Flash hoặc từ xa thông qua server mạng,
có khả năng quản lý từ xa.
• PalmPalm: Tynux
Giải pháp hệ điều hành Linux nhúng cho các thiết bị internet bao gồm cả máy
chơi mp3, video, truyền hình internet, PDA hay điện thoại internet, các thiết bị video
hội thảo, video phone…
• REDSonic: RedIce-Linux
Hỗ trợ các máy tính trên một board, có thể chạy trên DiskOnChip và các bộ nhớ
CompactFlash, đồng thời cũng có khả năng đáp ứng real-time.
• RidgeRun: DSPLinux
Distro Linux nhúng này tập trung vào khía cạnh đa phương tiện kèm theo các
toolkit,thiết bị không dây và các thiết bị băng thông rộng dựa trên bộ xử lý kép, kết
hợp lõi ARM và lõi bộ xử lý số tín hiệu trên một phiến chip. Nhân DSPLinux chạy
trên lõi ARM, trong khi các tác vụ thời gian thực sẽ thực thi trên lõi DSP.
• SysGo: ELinOS Embedded Linux
ElinOS dựa trên nhân Linux 2.5 vì vậy cung cấp những tính năng mới nhất như
Journaling Flash File System (JFFS), Memory Technology Devices (MTD), và đặc
biệt là USB. Hỗ trợ các tác vụ real-time (RTAI kernel extension)
• TimeSys: Linux GPL
Distro Linux GPL hỗ trợ các board nhúng. Cùng với các thư viện, tool chains,
tiện ích, các kịch bản và tài liệu đi kèm, tất cả đều có giấy phép GPL. Hơn nữa là các
lựa chọn để cải thiện hệ thống đáp ứng real-time, chất lượng dịch vụ và hiệu suất mạng.
• Tuxia: TASTE
SVTH: Trần Quang Thuận – Phan Bá Minh. - 36 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
TASTE nhắm vào các thiết bị Internet như các webpads, set-top boxes, các máy
khách nhỏ và điện thoại truyền hình. Nó cũng kèm theo rất nhiều các software, driver
phần cứng, nhân của Linux nhúng, các engine đồ họa, giả lập Java…
• Vitals System: vLinux
Một gói Linux cho các ứng dụng trên nền xử lý ARM. vLinux cũng có thể hỗ
trợ các dòng xử lý không có MMU, phù hợp với các thiết kết hạ thấp giá thành cho các
sản phẩm thương mại. vLinux hiện tại có thể chạy trên họ xử lý ARM, kiến trúc RISC
của Samsung, tuy nhiên khả năng chạy trên các bộ xử lý khác đang được cải thiện.
2.3.1 MontaVista Linux
Với hơn 2000 đối tác phát triển MontaVista Linux trên khắp thế giới trên khắp
các lĩnh vực công nghiệp. Không thể phủ nhận MontaVista là nhà cung cấp nền tảng
hệ điều hành Linux thương mại hàng đầu thế giới cho các thiết bị số thông minh và cơ
sở hạ tầng thông tin liên lạc. Với 4 trong 5 nhà cung cấp các thiết bị mạng hàng đầu sử
dụng MontaVista Linux, cũng như những nhà sản xuất điện thoại di động, điện tử tiêu
dùng và viễn thông trên khắp thế giới – MontaVista là một trong những hệ điều hành
được sử dụng rộng rãi nhất trong hơn 40 triệu thiết bị nhúng trên giới.MontaVista
Linux được thiết kế có khả năng mở rộng, độ tin cậy cao và hiệu suất cao, khả năng
real-time, đáp ứng cho các thiết bị thông minh ngày nay. Hỗ trợ số lượng các kiến trúc
xử lý nhiều nhất trong các thiết bị nhúng cao cấp, bao gồm dòng x86, PowerPC, ARM,
SH và MIPS. MontaVista Linux hỗ trợ hơn 60 COTS, các bo mạch phát triển và các
công cụ phát triển nhanh.
Một số thiết bị điển hình sử dụng MontaVista Linux có thể kể đến như các điện
thoại Motorola A760 và 768i. Mặc dầu sự thật Motorola là một trong những thành
viên sáng lập ra hệ điều hành Simbian. Chiếc A760 được tung ra vào ngày 16 tháng
hai năm 2003 ở thị trường Trung Quốc. Đây cũng là lần đầu tiên Linux được sử dụng
trên máy điện thoại, từ đó Motorola tập trung vào nền Linux của họ, và đã công bố nền
tảng trong tương lai của họ vẫn sẽ là Linux và Java. Hiện nay cũng có những điện
thoại của Motorola sử dụng Linux, nổi tiếng có thể kể đến Motorola RAZR2 và các
dòng Motorola ROKR E2, E6.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 37 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Texas Istruments cũng đã công bố họ sẽ sử dụng MontaVista Linux phiên bản
Professional là hệ điều hành được hỗ trợ trên nền tảng System-on-chip DaVinci.
2.3.2 uClinux
Phiên bản uClinux đầu tiên bắt nguồn từ nhân Linux phiên bản 2.0. uClinux
nằm trong dự án phát triển đưa hệ điều hành Linux lên trên các hệ thống CPU không
có MMU. Memory Management Unit, thành phần cứng trong một máy tính. Đáp ứng
yêu cầu quản lý truy xuất bộ nhớ của CPU. Chức năng của nó bao gồm: chuyển từ địa
chỉ tham chiếu sang địa chỉ phần cứng, ngăn không cho các tiến trình tranh chấp bộ
nhớ, quản lý cache và bus. Tuy nhiên, dự án phát triển và mở rộng, bao trùm các kiến
trúc xử lý. Ngày nay uClinux được biết đến như một hệ điều hành bao gồm các phiên
bản nhân 2.0, 2.4, và 2.6, cùng với rất nhiều các ứng dụng, thư viện và các công cụ
phát triển. uClinux là một trong những hệ điều hành thích hợp nhất đối với các hệ
thống nhúng và nó hoàn toàn miễn phí. Phiên bản mới nhất của uClinux có khả năng
hỗ trợ nhiều kiến trúc xử lý, điển hình là các dòng M86k, ColdFire, ARM, Sparc, NEC
v850, H8/300, ngay cả softcore CPU như Altera NIOS và Xilinx MicroBlaze. Hỗ trợ
thư viện uClibc cũ và các phiên bản mới hơn như uClibc-0.9.27.
2.3.3 Cấu hình kernel
Cấu hình là bước đầu tiên cần làm trước khi xây dựng kernel cho target. Có rất
nhiều cách và các lựa chọn khi cấu hình kernel. Không xét đến các cách cầu hình hay
các lựa chọn của người dùng, kernel sẽ tạo ra file .config khi hoàn tất quá trình cấu
hình và sẽ tạo ra hàng loạt các liên kết và header file sử dụng trong suốt quá trình biên
dịch. Ở đây chỉ trình bày sự khác nhau khi cấu hình kernel trên các hệ thống nhúng.
Trong quá trình cấu hình, người dùng có khả năng lựa chọn các module sẽ
dùng trong kernel. Tuy theo target mà các menu lựa chọn có thể thay đổi, một số
menu sẽ không thể dùng được trên kiến trúc CPU của hệ thống nhúng. Những menu có
thể dùng khi lựa chọn trên các hệ thống nhúng bao gồm:
Code maturity level options
Loadable module support
General setup
Memory technology devices
SVTH: Trần Quang Thuận – Phan Bá Minh. - 38 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Block devices
Networking options
ATA/IDE/MFM/RLL support
SCSI support
Network device support
Input core support
Character devices
Filesystems
Console drivers
Sound
Kernel hacking
Bảng 2-2: Lựa chọn hệ thống và bộ xử lý
Bảng 2-3: Phần cứng hỗ trợ với các kiến trúc CPU
Việc cấu hình phần kernel có thể thực hiện bằng các phương pháp khác nhau:
cấu hình bằng command-line bằng make config, cấu hình sử dụng các tùy chọn cũ
bằng make oldconfig, cấu hình bằng các menu đơn giản bằng make menuconfig và cấu
hình bằng giao diện Xwindows bằng make xconfig. Việc cấu hình cũng đòi hỏi người
dùng có kiến thức về các module sẽ sử dụng trong kernel.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 39 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
2.4 Xây dựng hệ thống thư mục gốc (root filesystem)
2.4.1 Hệ thống tập tin (File Systems)
Mỗi hệ điều hành đều có cách tổ chức dữ liệu riêng. Ở mức vật lý, đĩa cứng
được định dạng thành các cung từ bao gồm sector, track, cylinder (chức năng này
thường được lệnh format cấp thấp thực hiện). Tuy nhiên ở mức logic các hệ điều hành
thường sắp xếp tổ chức dữ liệu theo chỉ mục và phân cấp sao cho quá trình sao lưu,
tìm kiếm dữ liệu là hiệu quả và nhanh nhất, cơ chế mà mỗi hệ điều hành tổ chức lưu
trữ tập tin trên đĩa được gọi là hệ thống file.
Ví dụ DOS và Windows 95/98 sử dụng cơ chế bảng FAT16, FAT32 để lưu tên
thư mục và tập tin. Windows NT có cách tổ chức và lưu file mới hơn gọi là NTFS (NT
filesystem). Linux sử dụng hệ thống EXT2 (Second Extended File System) để lưu trữ
dữ liệu và tên của tập tin, thư mục. EXT2 sử dụng một bảng i-node bao gồm một tập
các nút để lưu thông tin và tên của tập tin, thư mục. Mỗi tập tin hay thư mục đều được
tham chiếu hay trỏ đến bởi một i-node. Dữ liệu của tập tin được lưu vào thành từng
khối liền nhau. Hệ thống EXT2 bảo đảm cơ chế lưu trữ tối ưu và khiến dữ liệu trên đĩa
cứng không bị phân mảnh (fragment) như trong hệ thống file sử dụng bảng FAT của
DOS.
2.4.2 Các thư mục trên Linux
Lần đầu tiên làm quen với Linux có lẽ bạn sẽ thấy Linux có khá nhiều thư mục,
nhưng nhìn chung các thư mục này đã được chuẩn hóa và có những mục đích sử dụng
nhất định. Tất cả các file và thư mục được lưu trữ theo một cấu trúc hình cây duy nhất.
Gốc của cây thư mục này được gọi là root và được ký hiệu bằng ký tự sổ trái /.
Cơ bản một hệ thống Linux thường có các thư mục sau:
/bin Chứa các file chương trình thực thi (file nhị phân) và file khởi
động của hệ thống.
/boot Các file ảnh (image file) của kernel dùng cho quá trình khởi động
thường được đặt trong thư mục này.
/dev Chứa các file thiết bị. Trong thế giới UNIX và Linux, các thiết bị
phần cứng được xem như là file. Đĩa cứng và các phân vùng của
SVTH: Trần Quang Thuận – Phan Bá Minh. - 40 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
bạn cũng là các file như hda1, hda2… đĩa mềm mang tên fd0…
các tập tin thiết bị này thường được đặt trong /dev.
/etc Thư mục này chứa các file cấu hình toàn cục của hệ thống. Có thể
có nhiều thư mục con trong thư mục này nhưng nhìn chung chúng
chứa các file script để khởi động hay phục vụ cho mục đích cấu
hình chương trình trước khi chạy.
/home Chứa các thư mục con đại diện cho mỗi người dùng khi đăng
nhập. Nơi đây tựa như ngôi nhà của người dùng. Khi quản trị tạo
tài khoản người dùng, họ sẽ cung cấp cho người dùng một thư
mục con trong /usr người dùng hoàn toàn có quyền sao chép, xóa
file, tạo thư mục con trong thư mục home của mình mà không ảnh
hưởng đến người dùng khác.
/lib Chứa các file thư viện *.so hoặc *.a. Các thư viện C và các thư
viện liên kết động cần cho chương trình khi chạy và cho toàn hệ
thống. Thư mục này tương tự như thư mục system32 của
Windows.
/lost+found Khi hệ thống khởi động hoặc khi bạn chạy trình fsck (công cụ
kiểm tra và sửa lỗi hệ thống file của Linux) nếu tìm thấy chuỗi dữ
liệu thất lạc trên đĩa cứng không liên quan đến các tập tin. Linux
sẽ gộp chúng lại và đặt vào thư mục này để nếu cần bạn có thể lấy
lại dữ liệu bị mất.
/mnt Chứa các thư mục kết gán tạm thời đến các ổ đĩa hay đến các thiết
bị khác. Trong /mnt có thể có các thư mục con khác như cdrom
(kết gán ở đĩa CD) hay floppy là thư mục kết gán với đĩa mềm.
/sbin Chứa các file thực thi của hệ thống thường chỉ cho phép sử dụng
bởi người quản trị hệ thống.
/tmp Thư mục tạm chương trình thường dùng để chứa các file tạm
trong quá trình chạy. Các file trong này sẽ được hệ thống dọn dẹp
nếu như không dùng đến nữa.
/usr Chứa nhiều thư mục con khác như /usr/bin hay /usr/sbin. Một
SVTH: Trần Quang Thuận – Phan Bá Minh. - 41 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
trong những thư mục con quan trọng đó là /usr/local. Bên trong
thư mục này có các thư mục tương tự root như sbin, lib, bin…
Hầu hết các ứng dụng cài đặt trên Linux đều đưa vào thư mục
này, nó giống như Program Files trên Windows.
/var Chứa các file biến thiên bất thường, những file dữ liệu đột nhiên
tăng kích thước trong thời gian ngắn rồi 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 đưa ra máy in hoặc các hàng đợi chứa email.
Ngoài các thư mục trên, còn có một số thư mục quan trọng khác rất cần thiết
cho công việc của người lập trình trên Linux.
/usr/include
/usr/local/include
Chứa các file khai báo hàm (header) cần dùng khi biên
dịch chương trình nguồm sử dụng các thư viện của hệ
thống.
/usr/src Chứa mã nguồn (kể cả mã nguồn của Linux).
/usr/man Chứa các tài liệu hướng dẫn.
Cho dù máy tính có thể gắn thêm nhiều ổ cứng nhưng chúng cũng chỉ được gắn
vào thành một nhánh trong cây thư mục chính. Tùy theo người quản trị hệ thống chỉ
định mà các đĩa cứng phụ sẽ được gắn kết vào một thư mục nào đó trên cây thư mục
gốc.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 42 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 2-4: Cấu trúc thư mục trên Linux
SVTH: Trần Quang Thuận – Phan Bá Minh. - 43 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Chương 3 XUPV2P và phần mềm phát triển của Xilinx
3.1 Kiến trúc phần cứng của Kit XUPV2P
3.1.1 Tổng quan
- Virtex II Pro FPGA với Softcore CPU: Microblaze và Hardcore: PowerPC405
core, FPGA 30816 Logic Cells.
- Sử dụng trên 2GB (DDR) SDRAM.
- Sử dụng cấu trúc SystemACE và Type II CompactFlash để lưu trữ cấu hình và
dữ liệu FPGA ,thực hiện chế độ automatic load sau mỗi lần khởi động lại Kit.
- Khả năng nhúng Platform (nền FPGA) thông qua cáp USB cổng JTAG.
- Cung cấp chế độ “Golden” hoặc “User” FPGA.
- 10/100 Ethernet MAC.
- 1 cổng nối tiếp RS232 DB9.
- 2 cổng nối tiếp PS-2
- 4 Led được nối với các chân I/O pin.
- 4 Switch (công tắc) được nối với các chân I/O pin.
- 5 button (nút nhấn) được nối với các chân I/O pin.
- Bộ chuyển đổi AC97 audio CODEC.
- Sử dụng microphone và đường audio input.
- Cổng monitor (màn hình máy tính) XSGA lên đến độ phân giải 1200*1600 ở
70 Hz.
- 3 cổng ATA nối tiếp.
- USB 2 port
- Xung clock hệ thống 100Mhz, xung SATA clock 75Mhz.
- Khả năng cung cấp xung clock tùy thuộc vào yêu cầu người sử dụng.
- Cung cấp nguồn điện DC trên Kit.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 44 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Kit XUP Virtex-II Pro Development System có khả năng tạo ra một cấu trúc
phần cứng cao cấp.Cấu trúc này bao gồm một trung tâm Virtex-II Pro Platform FPGA
(vi xử lý), và các thành phần chức năng liên kết có thể sử dụng riêng biệt để tạo ra một
hệ thống đa chức năng cho nhiều ngành công nghiệp hiện đại.
Hình 3-1: Sơ đồ khối của Kit XUP Virtex
Hình 3-2: Kit XUP Virtex-II Pro Development System
SVTH: Trần Quang Thuận – Phan Bá Minh. - 45 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
3.1.2 Khối FPGA Virtex II Pro
Cấu hình XC2VP30
Độ dày 13969
Kích thước 80*46
RAM phân phát 428Kb
Khối Multiplier Blocks 136
Khối Block RAMs 2448Kb
DCMs 8
PowerPC RISC Cores 2
Muti-Gigabit nhận và truyền 8
Bảng 3-1: Đặt điểm khối FPGA
Bảng 3-2: Các khối giao tiếp ngoài của Virtex-II Pro Platform FPGA
- Nguồn cung cấp 5 VDC ổn áp.
- Nguồn trên Kit Switching 3.3V,2.5V và 1.5V cho khối FPGA.
- Nguồn tuyến tính cho các khối thành phần chức năng liên kết.
- Nguồn tuyến tính cho khối Multi-Gigabit Transceivers (MGTs)
SVTH: Trần Quang Thuận – Phan Bá Minh. - 46 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
- 4 trong 8 khối Multi-Gigabit Transceivers (MGTs) dành cho connectors (liên
kết) và cho người tùy sử dụng.3 khối của Bidirectional MGT channels dành cho SATA
connectors và SMA connectors được sử dụng chức năng như Terminal.Xung sử dụng
75Mhz riêng biệt cho SATA communication.2 cổng của SATA connector được cấu
hình như Host port (cổng chủ) và 3 cổng của SATA connector được cấu hình như
Target Port (cổng đến) cho phép các board_to_board (các Kit liên kết với nhau) trong
một khối mạng chung.
- Kit XUP Virtex-II Pro Development System cho phép chúng ta sử dụng RAM
memory chuẩn JEDEC 184 –pin dual in-line Double Data Rate Synchronous Dynamic
(184 chân truyền dữ liệu đồng bộ).Kit cung cấp cho người sử dụng buffer vào ra tương
ứng RAM 2GB hoặc ít hơn 64-bit hoặc 72-bit.Khuyến cáo: chỉ nên sử dụng 72-bit cho
việc dò và sửa lỗi ECC.
Bảng 3-3: Các module bộ nhớ thích hợp
3.1.3 System ACE
Cấu hình System ACE của Xilinx đòi hỏi Compact Flash phải có vùng không
gian tác động lớn, có thể cấu hình trước và dung lượng lớn. System ACE Controller
được phát triển mạnh trong các dòng FPGA có thể cấu hình lại (programmable).Điều
này làm giảm giá thành so với lúc trước sử dụng PROM và FPGA không thể cấu hình
lại được (non-programmable).
System ACE Compact Flash là cấu trúc gồm 1 chipset ,một bộ điều khiển
(Controller device) và 1 Compact Flash card.
Bộ điều khiển ACE controller có khả năng đa giao diện bao gồm các giao diện
với CF card, MPU, JTAG cho phép người sử dụng thiết lập các giao diện bên trong
FPGA từ đơn giản đến phức tạp.Việc có thể giao diện với CF card hay IBM
SVTH: Trần Quang Thuận – Phan Bá Minh. - 47 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Microdrive storage làm cho vùng nhớ chứa cấu hình FPGA (bitstream) lên đến hàng
Gbyte.Do đó đây là 1 IP quan trọng trong KIT XUP-II Pro Development System.
3.1.3.1 ACE Flash Memory Card:
Xilinx ACE Flash memory card là 1 vùng nhớ Compact Flash device có thể
biên dịch với Personal Computer Memory Card International Association ATA
(PCMCIA ATA). ACE Flash card ngày nay có nhiều dung lượng như: 128MB,
256MByte, 1 GByte…Trên card có bộ điều khiển giao tiếp Protocol, có khả năng lưu
trữ dữ liệu,khả năng phục hồi (retrieval), ECC, khả năng chống treo dữ liệu (defect-
hanging data), nguồn cung cấp, điều khiển xung clock.
Hình 3-3: Compact Flash Card
Compact ACE Flash Card có thể hoạt động trong môi trường PC
environment ,trong đó Compact Flash Card được xem như là 1 ổ cứng. Ngoài ra
System ACE còn cho phép lập trình hệ thống FPGA trên Compact ACE Flash Card
thông qua bộ điều khiển giao tiếp System ACE controller (chức năng Compact Flash
to MPU interface).
Cấu trúc của Compact ACE Flash File:
Capacity Sector/card Head Sector/track Cylinder
128,450,560 31360 2 32 490
256,910,120 62720 4 32 490
SVTH: Trần Quang Thuận – Phan Bá Minh. - 48 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
3.1.3.2 ACE Controller:
Bộ điều khiển ACE Controller quản lý cấu hình của FPGA.Bộ điều khiển cung
cấp các giao diện giữa FPGA với các tài nguyên thiết bị có trên Kit XUP.Nó có thể
liên kết bên ngoài với nhiều thiết bị FPGA thông qua cổng JTAG với tốc độ giao tiếp
16Mbit/sec.
Bộ ACE Controller có 3 giao diện khả năng cấu hình FPGA là:Compact Flash
interface,Microprocessor (MPU) interface và Test JTAG thông qua các cổng Compact
Flash, MPU và JTAG.
Hình 3-4: Các giao diện của Bô ACE Controller
Chức năng chính của ACE Controller là giao tiếp với Compact Flash Card
thông qua Compact Flash Controller để lưu trữ các file cấu hình FPGA bên trong
Compact Flash Card.
ACE Controller giao diện với MPU ,giúp MPU giao tiếp với Compact Flash
Card, giao tiếp với cấu hình Test JTAG và cấu hình cục bộ.
Giao diện Test JTAG được sử dụng khi chúng ta thực thi Boundary_Scan
System
Bộ điều khiển ACE Controller có 2 nguồn điện cung cấp chính là Core Power
supply (VCCL=2.5V~3.3V) và Compact Flash/Test JTAG (VCCH=3.3V) .
System ACE reset:
SVTH: Trần Quang Thuận – Phan Bá Minh. - 49 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
3.1.3.3 Giao tiếp System ACE
System ACE giao tiếp với Compact Flash Card bao gồm 2 bộ điều khiển
là:Compact Flash Controller và Compact Flash Arbiter (toàn quyền).Compact Flash
Controller dò tìm thiết bị Compact Flash Card được kết nối với kit XUP, lưu trữ tình
trạng và quản lý các tiến trình Bus Cycle, trừu tượng toán học và logic của các lệnh
thực thi trên Compact Flash Card.Ngoài ra giao tiếp này còn giúp khởi động mềm
(soft-reset), định dạng driver, đọc và ghi sector.Bộ điều khiển Compact Flash Arbiter
điều khiển các giao diện tay ba giữa Compact Flash Card, MPU và Test JTAG thông
qua buffer dữ liệu của Compact Flash Card
Hình 3-5: Hệ thống root dir trong Compact Flash Card
Chúng ta xét xem việc 1 file cấu hình FPGA được tạo ra và giao tiếp thông qua
bộ ACE Controller:
SVTH: Trần Quang Thuận – Phan Bá Minh. - 50 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
file .ACE là tầng thấp nhất của 1 cấu trúc thư mục FPGA Xilinx Software sẽ
chuyển dạng bitstream (download.bit) sang file .ACE.Mỗi file .ACE chứa 1 chuỗi
đơn các bitstream dùng để cấu hình cho các thiết bị của 1 dòng kit FPGA.
Tầng trên của ACE file là các tầng Collection.Một Collection bao gồm 8
file.ACE kết hợp với nhau thành 1 nhóm(group).Tất cả các file .ACE trong 1
Collection có thể được định địa chỉ trong môi trường System ACE và có thể được lưu
trữ trong Compact Flash Card.Nhưng tại 1 thời điểm chỉ có 1 Collection được set
active.
3.1.3.4 Microprocessor Interface(MPU):
Giao tiếp MPU cung cấp 1 phương tiện hữu dụng trong việc quan sát trạng thái
và điều khiển bộ System ACE Controller. MPU không cần thiết khi sử dụng các thuật
toán thông thường nhưng khi được sử dụng, nó cung cấp một khả năng mạnh mẽ.
Giao tiếp này có thể cho phép liên kết giữa các thiết bị có MPU với Compact Flash
Card và hệ thống dùng FPGA.
Giao tiếp MPU là tập hợp các thanh ghi mà các thanh ghi này cung cấp các
phương tiện giao tiếp với hệ thống Logic điều khiển Compact Flash Card, hệ thống
Logic điều khiển cấu hình và các nguồn tài nguyên khác trong bộ System ACE
Controller.
Có 2 điểm quan trọng trong việc sử dụng cổng giao tiếp Microprocessor là:
• Để cho bộ Controller được đồng bộ chính xác MPU phải được cấp xung
clock
• MPU phải tuân theo giản đồ thời gian của hệ thống System ACE.
Bộ giao diện MPU đa mục đích có thể update Compact Flash Card, đọc các
trạng thái của ACE và truy cập trực tiếp tới cổng cấu hình JTAG thông qua các lệnh
ACE Microprocessor. Giao diện này hỗ trợ truyền dữ liệu 8bit hay 16bit. Độ rộng Bus
có thể được cấu hình dễ dàng.
Tất cả các giao tiếp giữa ACE Controller và Microprocessor bao gồm việc
truyền dữ liệu đến hoặc lấy dữ liệu từ các thanh ghi ACE register.Có tất cả 128 thanh
ghi địa chỉ 8bit và 64 thanh ghi địa chỉ 16bit. Để cho việc lựa chọn dễ dàng 1 cấu hình
mới từ dữ liệu trên Compact Flash Card, giao diện MPU cho phép tái cấu hình FPGA
trên hệ thống Kit.
SVTH: Trần Quang Thuận – Phan Bá Minh. - 51 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
3.1.3.5 Test JTAG interface:
Giao tiếp Test JTAG hỗ trợ thuật toán IEEE 1149.1 Boundary-Scan trên bộ
ACE Controller và trên tất cả các thiết bị FPGA được kết nối với cổng cấu hình JTAG.
Giao tiếp này được sử dụng trong việc lập trình và load cấu hình FPGA tại cổng
CFGJTAG bằng các công cụ lập trình của Xilinx hay third-party JTAG.
Bộ ACE Controller tuân theo hoàn toàn chuẩn IEEE 1149.1 Boundary-Scan
thường được gọi dưới tên JTAG. Như hình dưới chúng ta thấy trong đó có bộ TAP
(Test Access Port) là bộ giải mã lệnh.Những thanh ghi trong bộ ACE Controller hỗ trợ
các lệnh Boundary-Scan. Thêm vào đó bộ ACE Controller còn hỗ trợ 1 thanh ghi nhận
dạng tùy ý 32bit (optional identification register).
Hình 3-6: Sơ đồ khối của giao diện Test JTAG
Pins Descriptions
TSTTDI(TDI) Kiểm tra dữ liệu vào
TSTTDO(TDO) Kiểm tra dữ liệu ra
TSTTMS(TMS) Kiểm tra chọn chế độ
TSTTCK(TCK) Kiểm tra xung clock
Thanh ghi lệnh IR (Intruction Register):
Thanh ghi IR 8bit của bộ ACE Controller được kết nối giữa TDI và TDO trong
suốt 1 quá trình thực thi lệnh.Thanh ghi này được load đồng thời với 1 lệnh kết nối
SVTH: Trần Quang Thuận – Phan Bá Minh. - 52 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
chuẩn cố định cho việc chuẩn bị thực thi lệnh tiếp theo .Và lệnh kết nối được đưa ra
TDO trong khi 1 lệnh khác được đưa vào thanh ghi lệnh thông qua TDI.
Thanh ghi Boundary-Scan(Boundary-Scan Register)
Thanh ghi Boundary-Scan là thanh ghi chính trong việc kiểm tra dữ liệu ,được
dùng để điều khiển và quan sát trạng thái của các chân (pins) thiết bị trong suốt quá
trình thực thi lệnh EXTEST và lệnh SAMPLE/PRELOAD
Chuỗi bit (Bit Sequence):
Một chuỗi bit của thiết bị được lấy từ file Boundary-Scan Description Language
(BSDL),được kèm theo khi chúng ta biên dịch 1 project trong ISE.
Thanh ghi nhận dạng (Identification register):
Thanh ghi nhận dạng còn gọi là IDCODE là một giá trị được gán sẵn bởi nhà
sản xuất. IDCODE dùng để xác định loại thiết bị và chế tạo các thiết bị đặc dùng để
kiểm tra.Thanh ghi này có 32bit.Nội dung của thanh ghi có thể được kiểm tra bởi các
dòng lệnh IDCODE.Thanh ghi IDCODE phù hợp với bất kỳ thành phần nào của hệ
thống thông qua JTAG.Thanh ghi này có định dạng nhị phân theo mẫu sau:
Version Family Array size Manufacturer Required by 1149.1
0000 0000001 00000000 00001001001 1
Thanh ghi lọc (Bypass Register):
Đây là thanh ghi dữ liệu trong bộ ACE Controller.Nó là thanh ghi lọc flip-flop
đơn có chức năng truyền dữ liệu trực tiếp theo kiểu nối tiếp từ TDI đến TDO thông
qua các lệnh lọc.Thanh ghi này được gán giá trị 0 khi bộ TAP Controller ở trạng thái
UPDATE-DR.
3.1.3.6 Các chế độ cấu hình của ACE Controller:
Bốn bộ giao diện ACE Controller (Compact Flash Controller interface,MPU
interface,Test JTAG(TSTJTAG) interface, configuration JTAG(CFGJTAG)interface)
được thiết kế để kết hợp làm các nhiệm vụ sau:
• Compact Flash to configuration JTAG(CFGJTAG) setup
SVTH: Trần Quang Thuận – Phan Bá Minh. - 53 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 3-7: Lưu đồ truyền dữ liệu từ CF đến JTAG(CFGJTAG)
Hình 3-8: Sơ đồ đi dây CF đến JTAG(CFGJTAG)
• Compact Flash to Microprosessor (MPU) setup
Hình 3-9: Lưu đồ truyền dữ liệu từ CF đến MPU
SVTH: Trần Quang Thuận – Phan Bá Minh. - 54 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 3-10: Sơ đồ đi dây từ CF đến MPU
• Microprosessor (MPU) to Compact Flash setup
Hình 3-11: Lưu đồ truyền dữ liệu từ MPU đến CF
• Microprosessor (MPU) to configuration JTAG setup
SVTH: Trần Quang Thuận – Phan Bá Minh. - 55 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 3-12: Lưu đồ truyền dữ liệu từ MPU đến CFGJATG
Hình 3-13: Sơ đồ đi dây từ MPU đến CFGJTAG
• Test JTAG(TSTJTAG) to configuration JTAG(CFGJTAG) setup
SVTH: Trần Quang Thuận – Phan Bá Minh. - 56 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 3-14: Lưu đồ truyền dữ liệu từ TSTJTAG đến CFGJTAG (Bypass path)
Hình 3-15: Lưu đồ truyền dữ liệu từ TSTJTAG đến CFGJTAG(Boundary-Scan path)
SVTH: Trần Quang Thuận – Phan Bá Minh. - 57 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Hình 3-16: Sơ đồ đi dây từ TSTJTAG đến CFGJTAG
3.1.4 Ethernet adaptor
IP Core Ethernet Lite MAC (Media Access Controller) được thiết kế theo chuẩn
IEEE 802.3 là chuẩn giao diện độc lập Media (Media Idependent Interface - MII).
Ethernet Lite MAC là IP core thiết kế mềm (soft design IP core) cho việc thực
thi truyền thông cho từng dòng FPGA của Xilinx.Ngoài nó ra còn hỗ trợ các thiết bị
hoạt động ở tầng vật lý (PHY -Physic Layer device) trong công nghiệp và liên kết
được khối xử lý bên trong FPGA thông qua Bus OPB (On-chip Peripheral Bus).IP này
có khả năng giao tiếp với các đường truyền 10Mbit/sec hoặc 100Mbit/sec.
3.1.4.1 Mô tả chung:
Ethernet Lite MAC giao tiếp slave OPB 32bit.
Bộ nhớ được định dạng trực tiếp đến các chân I/O, có thể truyền và nhận dữ
liệu 2 chiều từ cổng của nó.
Giao diện MII thực hiện việc kết nối tầng PHY bên ngoài với tốc độ
10/100Mbit/sec.
Có 2 cổng TX, RX với buffer bộ nhớ 2KB độc lập bên trong vùng nhớ IP core
làm nhiệm vụ giữ những gói tin vào ra tạm thời.
3.1.4.2 Mô tả chức năng:
OPB Ethernet Lite MAC là sự kết hợp của 2 khối IP bên trong: khối giao diện
IP (IPIF) và khối IP Ethernet Lite MAC.Trong đó, khối IPIF là tập hợp các giao diện
SVTH: Trần Quang Thuận – Phan Bá Minh. - 58 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
với Bus OPB.Các tập hợp con này được lựa chọn tùy theo cấu hình của IPIF nhưng
cũng tùy thuộc cấu hình thứ 2 là IP Ethernet Lite MAC.
Mặc dù những phần tử giao diện con trên được tách rời trong khối IPIF nhưng
IP Ethernet Lite MAC đòi hỏi phải có địa chỉ tham chiếu của chúng
Hình 3-17: Lưu đồ khối của OPB Ethernet Lite MAC
3.1.4.3 Giao thức Ethernet (protocol):
Dữ liệu truyền thông được gói gọn trong 1 khung (frame).Từng vùng trong
khung được truyền từ trái sang phải và từng bit trong vùng cũng được truyền từ trái
sang phải.
Vùng đầu (premble):
Phần đầu của khung được sử dụng cho việc đồng bộ có độ dài 7byte với nội
dung 1010101. Nếu như truyền đủ vùng preamble thì việc kết nối được diễn ra và tiếp
tục truyền các vùng tiếp theo trong khung. Ngược lại thì sẽ chấm dứt vì không thể kết
nối được.
Trong quá trình truyền này IP Ethernet Lite MAC sẽ tự động chèn preamble
vào khung.
Vùng khởi động khung (start frame delimiter):
Vùng khởi động này đánh dấu việc khởi động 1 khung và có giá trị
10101011.Khi khung truyền đủ vùng khởi động khung thì việc kết nối được diễn ra và
SVTH: Trần Quang Thuận – Phan Bá Minh. - 59 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
tiếp tục truyền các vùng tiếp theo trong khung. Ngược lại thì sẽ chấm dứt vì không thể
kết nối được.
Tín hiệu nhận giá trị từ tầng PHY (RX-DV) có thể được nhận dạng trong vùng
preamble hay cũng có thể được nhận dạng trong vùng khởi động khung
Vùng địa chỉ đích (Destination address field):
Địa chỉ đích trong khung có độ dài 6byte.Trong đó byte đầu tiên sẽ xác định địa
chỉ đích là loại địa chỉ gì: (‘0’)-individual/unicast hoặc (‘1’)-group/multicast.
Địa chỉ Broadcast (tất cả các bit trong vùng có giá trị là 1) là 1 địa chỉ multicast
có tất cả các đích đến trong vùng LAN cục bộ. IP Ethernet Lite MAC hỗ trợ việc
truyền thông và chấp nhận các gói tin dạng unicast hoặc Broadcast.
Vùng địa chỉ nguồn(source address field):
Có độ dài 6byte.
Vùng kiểu và độ dài(Type/Length field):
Vùng này có độ dài là 4byte. Giá trị chiều dài (length) sẽ cho biết số byte trong
vùng dữ liệu.Giá trị này sẽ không cho biết số byte các vùng khác tiếp theo của vùng dữ
liệu trong khung. Giá trị này được tham chiếu theo chuẩn IEEE 802.3
Giá trị kiểu (type) được định nghĩa theo Ethernet protocol và được tham chiếu
theo chuẩn IEEE 802.3
Độ dài tối đa của vùng dữ liệu là 1500byte do đó giá trị của vùng kiểu và độ dài
là 05DC Hex.IP Ethernet Lite MAC cho không cho phép chúng ta can thiệp vào vùng
kiểu và độ dài mà mặc định theo chuẩn IEEE 802.3
Vùng dữ liệu (data):
Vùng dữ liệu có độ dài 0Byte đến 1500Byte.
Vùng thêm vào (pad):
Vùng này được sử dụng để đảm bảo khung có ít nhất 64byte độ dài. Do đó, nếu
vùng data là 0 byte thì vùng pad có độ dài là 46byte.
Vùng FCS:
Vùng FCS có độ dài là 4 byte .Giá trị của FCS được tính toán tùy theo giá trị
của vùng địa chỉ đích, vùng đại chỉ nguồn, vùng kiểu và độ dài, vùng thêm vào. FCS
sử dụng 32bit CRC (Cyclic Redundancy Check) để kiểm tra dư thừa với công thức
sau:
SVTH: Trần Quang Thuận – Phan Bá Minh. - 60 -
Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
G(x)=x32+x26+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1
Những bit của CRC sẽ được thế vào trong vùng FCS với các phần tử
x31,x30,…,x1,x0
IP Ethernet Lite MAC sẽ tính toán với CRC. Giá trị tính toán này sẽ được qui
đổi để kiểm tra việc đồng nhất độ dài dữ liệu được truyền đi hay nhận vào trong từng
chu kỳ xung clock truyền/nhận
Hình 3-18: Khung truyền dữ liệu trên Ethernet
Chú ý: Theo chuẩn IEEE 802.3 thì cứ sau 96bit truyền phải có 1 thời gian trì
hoãn như sau: 9.6uS đối với 10Mhz và 0.96uS đối với 100Mhz.
3.1.4.4 Chế độ Half-Duplex và Full-Duplex:
Chế độ Half-Duplex:
Khi không có sự truyền thông, IP Ethernet Lite MAC sẽ quan sát Bus OPB chờ
tín hiệu CRS, tín hiệu gửi khung hay tín hiệu nhận khung từ tầng PHY bên ngoài.Tín
hiệu CRS là tín hiệu báo Busy OPB Bus (CSR=’1’).Ở chế độ này ,OPB Bus sẽ chia sẻ
đường truyền Bus với IP Ethernet Lite MAC.
Sau khi Bus đã thông (CSR=’0’), IP Ethernet Lite MAC sẽ bắt đầu khởi động
chương trình Timing Interface Gap của mình. Tiếp theo là truyền các gói khung ra
tầng PHYvà sau đó sẽ reset bộ định thời của mình.
Chế độ Full-Duplex:
Full-Duplex không sử dụng tín hiệu từ tầng PHY bên ngoài vì Bus
Các file đính kèm theo tài liệu này:
- NGHIEN CUU LINUX TREN HE THONG NHUNG VA UNG DUNG.pdf