1. Trang chủ
  2. » Luận Văn - Báo Cáo

NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG

138 732 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 138
Dung lượng 3,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN CHUYÊN NGHÀNH MẠNG-MÁY TÍNH

Trang 2

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

Trang 3

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

Trang 4

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 30U 2.1.2 Bus và các chuẩn giao tiếp 31

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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

Trang 9

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

Trang 10

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.

Trang 11

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

Trang 12

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

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ử

Trang 13

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

Trang 14

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

Trang 15

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

Trang 16

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

Trang 17

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

Trang 18

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

Trang 19

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

Trang 20

• 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ớ

Trang 21

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í

Trang 22

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

Trang 23

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

Trang 24

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

Trang 25

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 ở

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

Trang 26

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

• 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í

Trang 27

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

Trang 28

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

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

Trang 29

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

Trang 30

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

Trang 31

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

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ị đó

Trang 32

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

Trang 33

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

Trang 34

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

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

Trang 35

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

• 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…

Trang 36

• 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

• 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

Trang 37

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

Trang 38

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

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

Trang 39

™ Block devices

™ Networking options

™ ATA/IDE/MFM/RLL support

™ SCSI support

™ Network device support

™ Input core support

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

Trang 40

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

Ngày đăng: 09/04/2016, 14:27

HÌNH ẢNH LIÊN QUAN

Hình 1-3: sự chuyển trạng thái giữa User Mode và Kernel Mode - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 1 3: sự chuyển trạng thái giữa User Mode và Kernel Mode (Trang 17)
Hình dưới mô tả những  device driver interface với phần còn lại của kernel và - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình d ưới mô tả những device driver interface với phần còn lại của kernel và (Trang 29)
Hình 2-1: Các bộ nhớ MTD - 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 (Trang 32)
Hình 2-4: Cấu trúc thư mục trên Linux - 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 (Trang 43)
Hình 3-11: Lưu đồ truyền dữ liệu từ MPU đến CF - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 3 11: Lưu đồ truyền dữ liệu từ MPU đến CF (Trang 55)
Hình 3-14: Lưu đồ truyền dữ liệu từ TSTJTAG đến CFGJTAG (Bypass path) - 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) (Trang 57)
Hình 3-16: Sơ đồ đi dây từ TSTJTAG đến CFGJTAG - 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 (Trang 58)
Hình 3-19: Lưu đồ truyền theo chuẩn Half-duplex (CSMA/CD) - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 3 19: Lưu đồ truyền theo chuẩn Half-duplex (CSMA/CD) (Trang 62)
Hình 3-20: Lưu đồ nhận dữ liệu Half-Duplex - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 3 20: Lưu đồ nhận dữ liệu Half-Duplex (Trang 63)
Hình 4-5: Cấu hình sử dụng chip PowerPC - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 4 5: Cấu hình sử dụng chip PowerPC (Trang 92)
Hình 4-6: Cấu hình cho bộ xử lý PowerPC - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 4 6: Cấu hình cho bộ xử lý PowerPC (Trang 93)
Hình 4-16: Cấu hình hệ điều hành (OS) và Library - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 4 16: Cấu hình hệ điều hành (OS) và Library (Trang 97)
Hình 4-19: Chế độ cấu hình nhân bằng các menu đơn giản - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 4 19: Chế độ cấu hình nhân bằng các menu đơn giản (Trang 103)
Hình 5-1: Lưu đồ thiết kế - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 5 1: Lưu đồ thiết kế (Trang 114)
Hình 5-3: Demo của thiết kế - NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG
Hình 5 3: Demo của thiết kế (Trang 117)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w