Tải bản đầy đủ (.doc) (44 trang)

Giới thiệu về hệ thống nhúng,hệ điều hành nhúng,linux nhúng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.05 MB, 44 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Thành phố Hồ Chí Minh
********

Báo cáo đề tài nhập môn công nghệ phần mềm
Tên đề tài:

Giới thiệu hệ thống
nhúng, hệ điều hành
nhúng, Linux nhúng

Sinh viên thực hiện: NGUYỄN THÀNH TRUNG.
MSSV: N102104179
Lớp: Đ10CQCN03N
Giáo viên: VÕ XUÂN THỂ

1


2

Mục lục

Mục lục
Mở đầu
Phần I : Hệ thống nhúng
4
I/ Các khái niệm:
II/ Các đặc điểm của hệ thống nhúng:
III/ Những điểm khác biệt giữa hệ thống nhúng và PC:
IV/Hệ thống nhúng lai


Phần II : Hệ điều hành Linux nhúng
15
I/ Hệ điều hành nhúng:
II/ Hệ điều hành Linux nhúng.
Phần III : Xây dựng hệ thống nhúng
32
I/ Toolchain
II/ Xây dựng hệ thống nhúng có hệ điều hành.
III/ Xây dựng hệ thống nhúng không hệ điều hành.
IV/ Mô hình lập trình hệ thống nhúng.
Phần IV: Phương pháp học tập hệ thống nhúng.
37
I/ Kiến thức cần có.
II/Phương pháp:
III/ Gioi thiệu Arduino.
Các tài liệu tham khảo
43


3

Mở đầu
Trong sự phát triển mạnh mẽ của khoa học kĩ thuật với nền kinh tế trí thức và
xu hướng hội nhập toàn cầu như hiện nay, thế giới và Việt nam đang thực hiện
việc kết hợp giữa các ngành thuộc lĩnh vực công nghệ cao trong một Khoa
hoặc cơ sở đào tạo. Đó là lĩnh vực khoa học dưới 3 ngọn cờ: Máy tính, Điện tửViễn thông và Điều khiển tự động mà ta thường gọi là “3 C” (Computer –
Communication - Control). Có thể nói, các quá trình sản xuất và quản lí hiện
nay như: các hệ thống đo lường điều khiển tự động trong sản xuất công nghiệp;
các hệ thống di động và không dây tiên tiến, các hệ thống thông tin vệ tinh, các
hệ thống thông tin dựa trên Web, chính phủ điện tử, thương mại điện tử, các cơ

sở dữ liệu của nhiều ngành kinh tế và của Quốc gia, các hệ thống thiết bị Y tế
hiện đại, các thiết bị điện tử dân dụng, ... đều là sản phẩm của sự kết hợp giữa
các lĩnh vực khoa học trên.Bài báo giới thiệu việc ứng dụng hệ thống nhúng
trong sự phát triển của lĩnh vực công nghệ cao”3C”. Bài viết phỏng theo bài
phát biểu của PGS.TSKH Phạm Thượng Cát- Viện Công nghệ Thông tin.
Hiện nay chúng ta đang ở thời đại hậu PC sau giai đoạn phát triển của máy tính
lớn (Mainframe) 1960-1980, và sự phát triển của PC-Internet giai đoạn 19802000. Giai đoạn hậu PC-Internet này được dự đoán từ năm 2000 đến 2020 là
giai đoạn của môi trường thông minh mà hệ thống nhúng là cốt lõi và đang làm
nên làn sóng đổi mới trong công nghệ thông tin nói riêng và lĩnh vực công
nghệ cao “3C”, nói chung. Một thực tế khách quan là thị trường của các hệ
thống nhúng lớn gấp khoảng 100 lần thị trường PC, trong khi đó chúng ta mới
nhìn thấy bề nổi của công nghệ thông tin là PC và Internet còn phần chìm của
công nghệ thông tin chiếm 99% số processor trên toàn cầu này nằm trong các
hệ nhúng thì còn ít được biết đến.
Sức đẩy của công nghệ đưa công nghệ vi điện tử, công nghệ vi cơ điện, công
nghệ sinh học hội tụ tạo nên các chip của công nghệ nano, là nền tảng cho
những thay đổi cơ bản trong lĩnh vực công nghệ cao “3C, sức kéo của thị
trường đòi hỏi các thiết bị phải có nhiều chức năng thân thiện với người dùng,
có mức độ thông minh ngày càng cải thiện đưa đến vai trò và tầm quan trọng
của các hệ thống nhúng ngày càng cao trong nền kinh tế quốc dân.
Phát triển các hệ nhúng và phần mềm nhúng (hệ điều hành nhúng, phần mềm
ứng dụng nhúng) là quốc sách của nhiều quốc gia trên thế giới, nhất là giai
đoạn hậu PC hiện nay. Ở nước ta đáng tiếc lĩnh vực này lâu nay đã bị lãng
quên, do vậy cần có những điều chỉnh phù hợp trong chiến lược phát triển để
có thể theo kịp, rút ngắn khoảng cách tụt hậu đối với các nước trong khu vực
và trên thế giới trong quá trình hội nhập nền kinh tế toàn cầu không thể tránh
khỏi hiện nay.


4


Phần I: HỆ THỐNG NHÚNG
I/ Các khái niệm:
1. Hệ thống là gì?
Hệ thống là một tập hợp các phần tử tương tác được tổ chức trong một môi trường nhằm
thực hiện một mục đích xác định.
Vi dụ: Trong tự nhiên chúng ta có thể dễ dàng bắt gặp hình ảnh của hệ thống: cơ thể
người là một hệ thống gồm nhiều phần tử cấu tạo thành như: hệ cơ, hệ tuần hoàn, hệ hô
hấp,… các hệ này (phần tử của cơ thể) phối hợp với nhau dưới một tổ chức cụ thể nhằm
mục đích tạo ra một con người và duy trì sự sống cho con người đó.
Một chiếc xe hơi cũng là một hệ thống với các phần tử: bánh xe, khung xe, động cơ,…
chúng được tổ chức lại với nhau để thực hiện một mục đích là tạo ra một cái máy có thể
dy chuyển và vận chuyển.

2. Nhúng là gì?
Nhúng là một từ dùng để chỉ việc đưa một thứ, một phần nhỏ vào một thứ, một phần lớn
hơn một cách dễ dàng và thuận tiện nhất, và giúp cho phần lớn hơn có thêm giá trị hay
hoàn thiện hơn..
Ví dụ: chúng ta nhúng một lát bánh mì nhỏ vào trong một ly sữa , thì chúng ta sẽ có một
món ăn ngon.

3.Hệ thống nhúng là gì?
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống xử lý thông
tin, hệ tính toán có khả năng hoạt động độc lập được nhúng vào trong một môi trường
hay một hệ thống lớn hơn, tạo thành một phần của hệ thống lớn hơn và thực hiện một số
chức năng của hệ thống đó.
Chúng là những tổ hợp của phần cứng và phần mềm để thực hiện một hoặc một nhóm
chức năng chuyên biệt, cụ thể trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển,
quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính
năng tự động hoá cao.

Chúng ta có thể hiểu một hệ thống nhúng là một máy tính có chức năng xác định hay ít
chức năng được nhúng vào một hệ thống hay thiết bị khác. Ở cách hiểu này vấn đề
“được nhúng vào” và “chức năng xác định hay ít chức năng” là những đặc điểm hàng
đầu, và cách hiểu này là bám sát nhất với khái niệm trên. (1)
Chúng ta cũng có thể hiểu một hệ thống nhúng là một hệ thống mà bên trong nó có một
hệ thống tính toán (một máy tính) thực hiện chức năng riêng biệt của hệ thống đó mà các
hệ thống khác không có. Ở cách hiểu này, hệ thống nhúng dường như là tất cả những
thiết bị, hệ thống có một thành phần cấu tạo mà thành phần đó có khả năng xử lý và tính
toán, hay nói cách khác nó có câu tạo bao gồm một máy tính và những những thứ khác
nữa. Như vậy, ở khía cạnh này, vấn đề có “một máy tính bên trong” là đặc điểm hàng
đầu. (2)
Còn có thể hiểu hệ thống nhúng là hệ thống/thiết bị tính toán chuyên biệt theo tính năng
được xây dựng thành một hệ thống/thiết bị lớn. (3)
(2) và (3) khá gần với nhau và là cách hiểu được nhiều người chấp nhận và khá phù hợp
cho thế giới thiết bị ngày nay. Theo (2) và (3) thì có thể nói rằng hệ thống nhúng là tất cả
những thiết bị có khả năng tính toán được thiết kế khác với máy tính đa chức năng PC.


5
Trong tài liệu này, tôi sẽ thiên hơn về cách hiểu (2) và (3) nhưng cách hiểu (1) vẫn rất
quan trọng.
Để có thể dễ hình dung theo cách hiểu (1), ta xem ví dụ sau đây: một chiếc xe hơi trung
bình có khoảng 70-80 chip vi xử lý (micro controller unit), mỗi bộ vi xử lý đảm nhiệm
một nhiệm vụ, chẳng hạn như đóng mở cửa, điều khiển đèn tín hiệu, đo nhiệt độ
trong/ngoài xe, hiển thị giao diện người dùng (dashboard), điều khiển thắng (nếu dùng hệ
thống thắng điện)…

Mỗi ô tô trung bình có khoảng 70-80 chíp nhúng
Mỗi bộ phận như thế là một hệ thống nhúng, tất cả được thiết kế tích hợp vào một hệ
thống chung lớn hơn, chính là chiếc xe hơi.

Một ví dụ khác gần gũi hơn với cuộc sống hằng ngày, đó là những chiếc điện thoại di
động. Các chức năng như điều khiển màn hình hiển thị, máy nghe nhạc và radio, bộ cảm
ứng chụp hình, kết nối với máy tính và thiết bị ngoại vi, hoặc cao cấp hơn là kết nối với
hệ thống định vị toàn cầu (GPS), tất cả đều là những hệ thống nhúng được tích hợp chung
vào chiếc điện thoại. Và mỗi hệ thống đó thường chỉ thực hiện chuyên biệt chức năng của
chúng, không thể thực hiện các chức khác nữa.
Như giải thích ở trên thì điện thoại di động là một hệ thống hoàn chỉnh được tạo ra bởi
nhiều hệ thống nhúng thành phần, như vậy điện thoại di đông khi nhìn tổng thể không kể
cấu tạo thì nó không là hệ thống nhúng nhưng nếu xét trong hệ thống thông tin liên lạc
GSM thì nó lại là một hệ thống nhúng mang chức năng chuyên biệt, một hệ thống giúp
nguoi sử dụng gửi/nhận thông tin.
Hiểu theo cách (1) hệ thống nhúng khá là hạn chế khi ta không thể biết được cái hệ thống
lớn hơn mà nó được nhúng vào. Nếu không biết hệ thống lớn mà nó được nhúng vào thì
dù nó có chức năng chuyên biệt thì vẫn không là hệ thống nhúng.
Hiểu theo cách (2) và (3) thì chiếc điện thoại đi đông hiển nhiên là một hệ thống nhúng vì
nó có một máy tính ở bên trong và nó không có thiết kế như một cái máy tính đa chức
năng (giống PC). Với cách này hệ thống nhúng lại vô cùng đa dạng như TV, máy ảnh
KTS, máy giặt, máy chơi game,.v.v.v.
Vậy, điện thoại thông mình thì sao? Câu trả lời: điện thoại thông mình là một hệ thống
nhúng lai với máy tính đa chức năng, nếu như bạn chấp nhận cách hiểu (2) và (3) còn nếu
chấp nhận cách hiểu (1) thì ta phải xem xét là nó có được nhúng vào hệ thống lớn hơn
nào không để quyết định, nếu không tìm được hệ thống lớn mà nó được nhúng vào thì
với việc có chức năng phong phú như vậy điện thoại thông minh là một máy tính đa chức
năng. Vấn đề này tôi sẽ phân tích rõ hơn ở phần sau.
Còn bây giờ, chúng ta sẽ chấp nhận điện thoại thông mình là một “hệ thống nhúng lai” vì
như đã nói lúc đầu tôi thiên về cách hiểu (2) và (3) hơn.


6
Sở dĩ có quá nhiều cách hiểu như vậy bởi vì hiện nay có quá nhiều thiết bị có khả năng

tính toán, mà những thiết bị đó lại thường có chức năng khá phong phú. Theo ý kiến chủ
quan của tôi thì khái niệm hệ thống nhúng được xây dựng ra để phân biệt với hệ thống
máy tính đa chức năng (hay còn gọi là hệ thống máy tính mục đích chung) PC. Tôi nghĩ
trong tương lai thì khi máy tính mục đích chung mà điển hình là PC dần mất vị thế trung
tâm của mình trong việc tính toán thông tin hiện nay thì khái niệm hệ thống nhúng (theo
cách hiểu (2) và (3) ) sẽ được thay thế bằng sự phân biệt vật/thiết bị thông mình (có khả
năng tính toán, xử lý thông tin , kết nối) và những vật/thiết bị không thông mình (không
có khả năng tính toán, xử lý thông tin, kết nối). Còn nếu hiểu theo cách (1) thì rõ ràng là
luôn luôn tồn tại hệ thống nhúng.
Cách hiểu (2) và (3) thiên về đặc điểm, chức năng của thiết bị (nhìn ở mức thiết bị), tính
cụ thể và mô tả. Nghĩa là tất cả thiết bị có chức năng như thế thì gọi là hệ thống nhúng.
Cách hiểu (1) thiên về cơ cấu, phân lớp hệ thống (nhìn ở mức hệ thống), tính tổng thể.
Nghĩa là hệ thống có cấu tạo nhiều thành phần và các thành phần hoàn chỉnh nhỏ hơn thì
là thành phần nhúng, khi phân tích một hệ thống (thiết bị) ta luôn chú ý cấu tạo và vị trí
của nó trong hệ thống tổng thể.
Một lần nữa, trong tài liệu này, tôi thiên về cách hiểu (2) và (3).
Hình ảnh của các hệ thống nhúng thông thường:

Do tính chất chuyên biệt của hệ thống nhúng và chúng thường được sản xuất với số
lượng lớn nên các nhà sản xuất thường yêu cầu phải tối ưu hóa chúng nhằm giảm thiểu
kích thước và chi phí sản xuất.


7

4. Hệ thống nhúng thời gian thực:
Trong các bài toán điều khiển và ứng dụng chúng ta rất hay gặp thuật ngữ “thời gian
thực”. Thời gian thực có phải là thời gian phản ánh về độ trung thực của thời gian hay
không? Thời gian thực có phải là hiển thị chính xác và đồng bộ theo đúng như nhịp đồng
hồ đếm thời gian hay không? Không phải hoàn toàn như vậy! Thực chất, theo cách hiểu

nếu nói trong các hệ thống kỹ thuật đặc biệt là các hệ thống yêu cầu khắt khe về sự ràng
buộc thời gian, thời gian thực được hiểu là yêu cầu của hệ thống phải đảm bảo thoả mãn
về tính tiền định trong hoạt động của hệ thống. Tính tiền định nói lên hành vi của hệ
thống phải thực hiện đúng trong một khung thời gian cho trước hoàn toàn xác định.
Khung thời gian này được quyết định bởi đặc điểm hoặc yêu cầu của hệ thống, có thể là
vài giây và cũng có thể là vài nano giây hoặc nhỏ hơn nữa. Ở đây chúng ta phân biệt yếu
tố thời gian gắn liền với khái niệm về thời gian thực. Không phải hệ thống thực hiện rất
nhanh là sẽ đảm bảo được tính thời gian thực vì nhanh hay chậm hoàn toàn là phép so
sánh có tính tương đối vì mili giây có thể là nhanh với hệ thống điều khiển nhiệt nhưng
lại là chậm đối với các đối tượng điều khiển điện như dòng, áp….Hơn thế nữa nếu chỉ
nhanh không thì chưa đủ mà phải đảm bảo duy trì ổn định bằng một cơ chế hoạt động tin
cậy,chính xác. Chính vì vậy hệ thống không kiểm soát được hoạt động của nó (bất định)
thì không thể là một hệ thống đảm bảo tính thời gian thực mặc dù hệ thống đó có thể cho
đáp ứng rất nhanh, thậm chí nhanh hơn rất nhiều so với yêu cầu đặt ra.
Các hệ thống này không chỉ phải trả về một kết quả đúng mà còn phải nhanh nhất đáp
ứng được yêu cầu về tốc độ của hệ thống. Trong các hệ thống thời gian thực, tốc độ cũng
quan trọng không kém gì độ chính xác của nó.
Một ví dụ minh hoạ tiêu biểu đó là cơ chế truyền thông dữ liệu qua đường truyền chuẩn
Ethernet truyền thống, mặc dù ai cũng biết tốc độ truyền là rất nhanh nhưng vẫn không
phải hệ hoạt động thời gian thực vì không thoả mãn tính tiền định trong cơ chế truyền dữ
liệu (có thể là rất nhanh và cũng có thể là rất chậm nếu có sự canh trạnh và giao thông
đường truyền bị nghẽn).
Người ta phân ra làm hai loại đối với khái niệm thời gian thực là cứng (hard real‐time) và
mềm (soft real‐time). Thời gian thực cứng là khi hệ thống hoạt động với yêu cầu thoả
mãn sự ràng buộc trong khung thời gian cứng tức là nếu vi phạm thì sẽ dẫn đến hoạt động
của toàn hệ thống bị sai hoặc bị phá huỷ.Ví dụ về hoạt động điều khiển cho một lò phản
ứng hạt nhân, nếu chậm ra quyết định có thể dẫn đến thảm hoạ gây ra do phản ứng phân
hạch và dẫn đến bùng nổ cả hệ thống. Thời gian thực mềm là khi hệ thống hoạt động với
yêu cầu thoả mãn ràng buộc trong khung thời gian mềm, nếu vi phạm và sai lệch nằm
trong khoảng cho phép thì hệ thống vẫn có thể hoạt động được và chấp nhận được. Ví dụ

như hệ thống phát thanh truyền hình, nếu thông tin truyền đi từ trạm phát tới người
nghe/nhìn chậm một vài giây thì cũng không ảnh hưởng đáng kể đến Tính thời sự của tin
được truyền đi và hoàn toàn được chấp nhận bởi người theo dõi.
Thực tế thấy rằng hầu hết hệ nhúng là các hệ thời gian thực và hầu hết các hệ thời gian
thực là hệ nhúng. Điều này phản ánh mối quan hệ mật thiết giữa hệ nhúng và thời gian
thực và tính thời gian thực đã trở thành như một thuộc tính tiêu biểu của hệ thống nhúng.
Vì vậy hiện nay khi đề cập tới các hệ nhúng người ta đều nói tới đặc tính cơ bản của nó là
tính thời gian thực.


8

II/ Đặc điểm của hệ thống nhúng:
Các hệ thống nhúng thường có phần lớn các đặc điểm sau đây:
• Một hệ thống nhúng bao giờ cũng bao gồm một hệ thống phần cứng chuyên biệt
và một hệ thống phần mềm điều khiển chuyên biệt cho phần cứng đó (tính đóng
gói cao). Mức hòa hợp giữa phần cứng và phần mềm của hệ thống nhúng rất cao
để thực hiện một cách tốt nhất chức năng riêng biệt của nó.Do đó, đây cũng là sự
khác biệt giữa một hệ thống nhúng và một máy tính đa chức năng.
• Một hệ thống được gọi là hệ thống nhúng khi nó thực hiện một chức năng riêng
biệt và thường là phải được nhúng vào một hệ thống lớn hơn (cách hiểu (1) ), hay
được xây dựng thành một hệ thống,thiết bị lớn hơn. (cách hiểu (2) và (3) )
• Một hệ thống nhúng luôn thưc hiện một chức năng được định trước, và chức năng
này trong quá trình sử dụng người dùng không thể hay khó thay đổi được.
• Các hệ thống nhúng được nối với môi trường vật lý qua các cảm biến để thu thập
thông tin từ môi trường đó và qua các bộ điều khiển/tác động để điều khiển môi
trường,hay trả lại một kết quả tính toán cho người dùng.
• Các hệ thống nhúng phải tin cậy được. “Tin cậy được” bao gồm độ tin cậy, tính
bảo trì, tính khả dụng, an toàn và bảo mật.
Các hệ thống nhúng thường nằm trong các cỗ máy được kỳ vọng là sẽ chạy hàng

năm trời liên tục mà không bị lỗi hoặc có thể khôi phục hệ thống khi gặp lỗi. Vì
thế, các phần mềm hệ thống nhúng được phát triển và kiểm thử một cách cẩn thận
hơn là phần mềm cho máy tính cá nhân. Ngoài ra, các thiết bị rời không đáng tin
cậy như ổ đĩa, công tắc hoặc nút bấm thường bị hạn chế sử dụng. Việc khôi phục
hệ thống khi gặp lỗi có thể được thực hiện bằng cách sử dụng các kỹ thuật như
watchdog timer – nếu phần mềm không đều đặn nhận được các tín hiệu watchdog
định kì thì hệ thống sẽ bị khởi động lại.
Một số vấn đề cụ thể về độ tin cậy như:
• Hệ thống không thể ngừng để sửa chữa một cách an toàn, ví dụ như ở các hệ
thống không gian, hệ thống dây cáp dưới đáy biển, các đèn hiệu dẫn đường,…
Giải pháp đưa ra là chuyển sang sử dụng các hệ thống con dự trữ hoặc các
phần mềm cung cấp một phần chức năng.
• Hệ thống phải được chạy liên tục vì tính an toàn, ví dụ như các thiết bị dẫn
đường máy bay, thiết bị kiểm soát độ an toàn trong các nhà máy hóa chất,…
Giải pháp đưa ra là lựa chọn backup hệ thống.
• Nếu hệ thống ngừng hoạt động sẽ gây tổn thất rất nhiều tiền của ví dụ như
các dịch vụ buôn bán tự động, hệ thống chuyển tiền, hệ thống kiểm soát trong
các nhà máy …
• Các hệ thống nhúng phải có hiệu quả cao: Hiệu quả của các hệ thống nhúng được
đánh giá theo các độ đo sau:

Năng lượng: Nhiều hệ thống nhúng là các hệ thống di động dùng năng
lượng pin. Công nghệ pin tiến bộ với tốc độ rất chậm. Nhưng các yêu cầu tính
toán lại tăng với tốc độ cao, đặc biệt đối với các ứng dụng multimedia, và khách


9
hàng muốn có pin chạy lâu hết. Do đó, năng lượng điện phải được sử dụng một
cách có hiệu quả


Kích thước mã: Toàn bộ mã chương trình chạy trong một hệ nhúng phải
được lưu trong hệ thống. Thông thường, không có đĩa cứng để lưu chương trình.
Việc bổ sung mã vẫn còn là ngoại lệ và chỉ giới hạn trong những trường hợp như
điện thoại Java, điện thoại thông minh, và set-top box (thiết bị giải mã tín hiệu
truyền hình). Do tất cả các hạn chế khác, điều đó có nghĩa kích thước mã nên càng
nhỏ càng tốt. Điều này đặc biệt đúng cho systems on a chip - các hệ thống mà tất
cả các mạch xử lý thông tin đều chứa trong một con chip. Nếu bộ nhớ lệnh cần
được tích hợp vào con chip này, nó nên được dùng một cách rất hiệu quả.

Hiệu quả khi chạy: Chỉ nên dùng lượng tài nguyên tối thiểu để thực hiện
chức năng được yêu cầu. Ta cần thỏa mãn ràng buộc về thời gian với lượng tối
thiểu tài nguyên phần cứng và năng lượng. Để giảm mức tiêu thụ năng lượng, tần
số đồng hồ và hiệu điện thế nên nhỏ hết mức có thể. Ngoài ra, hệ thống chỉ nên có
những thành phần phần cứng thiết yếu. Có thể bỏ các thành phần không cải thiện
thời gian chạy trong trường hợp xấu nhất (chẳng hạn nhiều cache hay đơn vị quản
lý bộ nhớ).

Trọng lượng: Tất cả các hệ thống xách tay đều phải có trọng lượng thấp.
Nhẹ cân thường là một điều quan trọng khi cân nhắc mua một hệ thống nào đó.

Giá: Đối với các hệ thống nhúng thông dụng, đặc biệt là đồ điện gia dụng,
sức cạnh tranh trên thị trường là một vấn đề cực kì quan trọng, do đó cần sử dụng
hiệu quả các thành phần phần cứng cũng như chi phí phát triển phần mềm.
• Chức năng chuyên biệt hoá: Các bộ vi xử lý trong các hệ nhúng thường được sử
dụng để đảm nhiệm và thực hiện một hoặc một nhóm chức năng rất độc lập và
cũng đặc thù cho từng phần chức năng của hệ thống lớn mà nó được nhúng vào.
Ví dụ, các bộ vi xử lý chạy phần mềm điều khiển ô tô hoặc tầu hỏa sẽ luôn chạy
phần mềm đó, và sẽ không ai định chạy một trò chơi điện tử hay chương trình
bảng tính trên bộ vi xử lý đó. Có hai lý do chính:
1. Chạy thêm các chương trình khác sẽ làm giảm độ tin cậy của các hệ thống đó

2. Việc chạy thêm các chương trình khác chỉ khả thi khi các tài nguyên như bộ
nhớ đang rỗi. Ở một hệ thống hiệu quả, không có tài nguyên nào ở trạng thái
không được sử dụng.
Khả năng này làm tăng thêm sự chuyên biệt hoá về chức năng của một hệ thống
lớn và dễ dàng hơn cho quá trính xây dựng, vận hành và bảo trì. Đặc điểm này là
một đặc điểm quan trọng của hệ thống nhúng.
• Hầu hết các hệ thống nhúng không dùng bàn phím, chuột hay màn mình để giao
tiếp với người dùng. Thay vào đó, chúng có các giao tiếp dành riêng cho người
dùng như các nút nhấn, bàn đạp,…
• Khả năng thời gian thực: Các hệ thống đều gắn liền với việc đảm nhiệm một
chức năng chính và phải được thực hiện đúng theo một khung thời gian qui định.
Thông thường một chức năng của hệ thống phải được thực hiện và hoàn thành
theo một yêu cầu thời gian định trước để đảm bảo thông tin cập nhật kịp thời cho
phần xử lý của các chức năng khác và có thể ảnh hưởng trực tiếp tới sự hoạt động
đúng và chính xác của toàn hệ thống. Tuỳ thuộc vào từng bài toán và yêu cầu của
hệ thống mà yêu cầu về khả năng thời gian thực cũng rất khác nhau.


• Nhiều hệ thống nhúng là những hệ thống hỗn hợp (hybrid systems) theo nghĩa
gồm cả hai phần analog và số.

10

• Các hệ thống nhúng là những hệ thống có phản ứng lại (reactive systems).
Chúng có thể được định nghĩa như sau: hệ thống có phản ứng lại là hệ thống mà
có tương tác liên tục với môi trường của nó và thực thi với tốc độ được xác định
bởi môi trường đó [Bergé et al., 1995].

III/ Những điểm khác biệt giữa hệ thống nhúng và
máy tính đa chức năng (PC):

• Một hệ thống máy tính đa chức năng là hệ thống có chức năng đa dạng và có thể
dễ dàng thay đổi dựa trên ứng dụng đang chạy trên nó, chức năng của PC không
được định trước. Trong khí chức năng của hệ thống nhúng là không đổi và luôn
được định trước.
• Khi phát triển hệ thống nhúng nhà phát triển thường biết rõ chức năng của nó còn
khi phát triển PC nhà phát triển không biết rõ.
• Phần lớn các hệ thống nhúng là hệ thống thời gian thực, còn PC thì không phải là
hệ thống thời gian thực.
• Hệ thống nhúng được thiết kế và phát triển để thực hiện tối ưu một hay một vài
chức năng chuyên biệt,nhất định, thường đi kèm với những yêu cầu cụ thể và bao
gồm một số thiết bị máy móc và phần cứng chuyên dụng mà ta không tìm thấy
trong một máy tính đa năng nói chung.
• PC là máy tính đa chức năng, chức năng của PC vào từng thời điểm là tùy vào
phần mềm ứng dụng chạy trên nó.
• Hệ thống nhúng sử dụng và được phát triển trên nhiều loại kiến trúc vi xử lý khác
nhau như :ARM, AVR, PIC, x86,MIPS, PowerPC… trong khi PC chỉ sử dụng và
được phát triển trên một vài kiến trúc vi xử lý và phổ biến nhất hiện nay là kiến
trúc x86.
• Các vi xử lý thiết kế cho hệ thống nhúng có chức năng chuyên biệt cho từng loại
hệ thống cụ thể. Vi dụ: vi xử lý dùng trong máy ảnh kỹ thuật số được chuyên biệt
cho việc nhận và xử lý ảnh từ cảm biến của nó,…
• Kiến trúc và cấu trúc của một PC là ít thay đổi theo thời gian và ít đa dạng, còn
kiến trúc và cấu trúc của các hệ thống nhúng là rất đa dạng và thay đổi tùy thuộc
vào từng loại hệ thống cụ thể.
• Hệ thống nhúng thường yêu cầu, vận hành trên một số lượng rất giới hạn các tài
nguyên về RAM, ROM hay các thiết bị IO, chúng yêu cầu đủ để thực hiện chức
năng của mình không giống như PC thường có yêu cầu gần như không giới hạn về
các tài nguyên này.



11
• Hệ thống nhúng thường tiêu thụ một lượng điện năng thấp hơn PC và một bộ quản
lý điện năng tiêu thụ là luôn cần thiết đối với một hệ thống nhúng để chúng có thể
hoạt đông hiệu quả và lâu dài. Vi dụ: điện thoại đi đông luôn cần có một bộ quản
lý diện năng để quản lý lượng pin trong máy giúp máy hoạt động, khi gần hết pin
bộ quản lý điện năng có nhiệm vụ thông báo để nguoi dùng sạc lại, giúp duy trì
việc hoạt động của hệ thống.
• Các công cụ phát triển và gỡ rối của hệ thống nhúng thường rất khác so với PC,
nếu như trên PC công cụ phát triển và gỡ rối chủ yếu là các công cụ phần mềm, thì
khi làm việc với hệ thống nhúng bạn sẽ làm quen với những mạch gỡ rối (phần
cứng)dành riêng cho từng loại vi xử lý, hệ thống nhúng.
• Hệ thống nhúng thường được xây dựng với mức hòa hợp giữa phần cứng và phần
mềm của hệ thống rất cao để thuc hiện một cách tốt nhất chức năng riêng biệt của
nó.Vidu: máy mp3 sẽ có một chip chuyên xử lý âm thanh, và một phần mềm
chuyên để phuc vụ cho việc nghe nhạc và tương tác nguoi dùng.Trong khi PC
được thiết kế cho đa mục đích sử dụng, cũng với chức năng nghe MP3, nó có thể
không có một chip giải mã nhạc MP3 mà thay vào đó là dùng các bộ giải mã mềm
phù hợp và bộ giải mã này được chạy trên vi xử lý của PC.

Hình ảnh về một số mạch gỡ rối cho hệ thống nhúng:

Mạch gỡ rối cho vi xử lý ARM.

Mạch nạp và gỡ rối cho vi điều khiển dòng MSP430 của TI.


12

IV/ Hệ thống nhúng lai:
1.Khái niệm:

Là những hệ thống vừa có những đặc điểm của hệ thống nhúng vừa mang những đặc
điểm của máy tính đa chức năng. Vidu: điện thoại thông minh, máy tính bảng,.v.v.
Tùy thuộc vào hướng tiếp cận của người phát triển mà chúng ta có thể coi chúng như là
một hệ thống nhúng cao cấp, phức tạp hoặc có thể như là một máy tính đa chức năng tối
giản.
Để cho dễ hiểu chúng ta có thể định nghĩa một hệ thống nhúng một cách mở như sau: các
hệ thống thông tin thỏa mãn hầu hết các đặc điểm của hệ thống nhúng như đã được đề
cập ở trên được gọi là hệ thống nhúng.

2.Phân tích trường hợp của điện thoại thông mình:
Điện thoại thông mình là một trường hợp điển hình của các hệ thống nhúng lai.
Một hệ thống được gọi là hệ thống nhúng khi nó mang trong mình hầu hết những đặc
điểm của hệ thống nhúng như đã nêu trên.
Trong trường hợp này, điện thoại thông mình có các đặc điểm như sau:
 Điện thoại thông mình luôn được đóng gói với một nền tảng phần cứng chuyên
biệt và một nền tảng phần mềm (hệ điều hành, driver,…) chuyên biệt để khai thác
sức mạnh của phần cứng.
 Mức độ hòa hợp giữa phần cứng và phần mềm của điện thoại thông mình là rất
cao, Vidu: chúng ta không thể đem cài một hệ điều hành của một máy chạy
Android lên một máy chạy Windowns Phone hay iOS và ngược lại. Hơn nữa trong
từng dòng máy cùng sài hệ điều hành Android nhưng khác model, hãng sản xuất
chúng ta cũng thể làm được chuyện đó.
 Điện thoại thông mình cũng có các cảm biến để thu thập dữ liệu về môi trường
xung quang.
 Điện thoại thông mình luôn có một giới hạn nhất định về các tài nguyên như
ROM, RAM, và các loại tài nguyên này một khi đã được đóng gói và thiết kế cho
từng model thì chúng ta khó, thường là không thể nâng cấp hay can thiệp được
nữa, khác với máy tính đa năng điển hình là PC, chúng ta có thể dễ dàng nâng cấp
được tài nguyên của máy.
 Điện thoại thông mình vì là điện thoại nên sẽ được tối ưu hóa cho việc nghe gọi

(về kiểu dáng và các hệ thống truyền nhận sóng GSM).
 Về tính hiệu quả: điện thoại thông minh cũng thỏa các tiêu chí về năng lượng,
trọng lượng, kích thước, kích thước hệ điều hành, ứng dụng,…
 Hơn nữa khi phát triển Hệ điều hành và ứng dụng cho điện thoại thông mình,
người lập trình phải luôn tính toán tối ứu ứng dụng của mình cho phù hợp với
lượng tài nguyên hạn hẹp của từng model cụ thể, đây là một đặc điểm quan trọng
nhất của các phần mềm dành cho hệ thống nhúng.
Vậy điện thoại thông mình là một hệ thống nhúng.
Nhưng điện thoại thông mình có thể thực hiện được nhiều chức năng tương tự như các
máy tính đa chức năng (PC) như: nghe nhạc, xem phim, bảng tính, soạn thảo văn bản,
duyệt web, thậm chí cả chạy một số trình biên dịch C (C4Droid),… và chức năng của nó
không còn được định sẵn khi mới xuất xưởng nữa (đa phần các hệ thống nhúng có chức
năng định sẵn khi xuất xưởng và sau đó thì không thể thay đổi được) mà tùy thuộc vào
từng ứng dụng chạy trên nó. Vậy điện thoại thông mình là một máy tính đa chức năng.


13
Từ những phân tích trên chúng ta thấy rằng điện thoại thông mình mang trong mình cả
những đặc điểm của hệ thống nhúng và cả những đặc điểm của một máy tính đa chức
năng.
Đó là về mặt sử dụng và đặc điểm. Ở khía cạnh nhà phát triển chúng ta có thể thấy rõ hơn
nữa về tính “lai” của điện thoại thông mình.
Khi phát triển một điện thoại thông mình, dưới gốc độ của nhà sản xuất phần cứng, họ
phải tính toán, tích hợp, điều chỉnh và thiết lập thông số cho sản phẩm của mình sao cho
nó có thể đáp ứng được những yêu cầu về mặt chức năng của một chiếc điện thoại như:
thiết lập thông số băng tầng GSM, gắn các cảm biến phù hợp, tính toán lượng RAM và
ROM phù hợp cho từng loại và phiên bản hệ điều hành,…Họ phải lập trình tích hợp thêm
rất nhiều driver về các thiết bị sử dụng trong sản phẩm vào hệ điều hành mà họ sẽ sử
dụng như các driver về USB, WIFI, Camera,… các driver này là đặc trưng và chuyện biệt
cho từng model cụ thể.

Dưới gốc độ của một người lập trình ứng dụng, khi xây dựng một ứng dụng di động, họ
luôn phải tính toán để tối ưu về mặt tài nguyên cho ứng dụng của mình sao cho phù hợp
nhất với từng thiết bị cụ thế.
Nhưng việc lập trình cho ứng dụng di đông thì thường rất giống với việc lập trình phần
mềm cho máy tính đa chức năng PC. Lúc này người lập trình sẽ sử dụng những API có
sẵn đi kèm với từng loại hệ điều hành cụ thể và làm việc với những API đó một cách độc
lập với những hiểu biết về giao tiếp phần cứng, hay nói cách khác bằng việc sử dụng thư
viện API, việc giao tiếp và sử dụng các thành phần thiết bị ngoại vi của điện thoại thông
mình là gần như trong suốt với người lập trình, việc giao tiếp cấp thấp đã có hệ điều hành
và hệ thống middleware đảm nhiệm. Điều này là khác hoàn toàn với việc lập trình nhúng
truyền thống.
Như vậy ở khía cạnh phát triển chúng ta cũng có thể thấy điện thoại thông mình là một hệ
thống nhúng lai thật sự.
Tóm lại, tùy thuộc vào hướng nhìn nhận và tiếp cận cụ thể của từng người ở các gốc độ
khác nhau mà điện thoại thông mình có thể là một máy tính đa chức năng “tối giản”, hay
một hệ thống nhúng phức tạp, cao cấp.
Và cũng tùy vào hướng nhìn nhận, chúng ta có thể nói rằng điện thoại thông mình là một
cái điện thoại được nhúng vào trong nó một hệ thống máy tính đa chức năng, hay điện
thoại thông mình là một máy đa chức năng có tính năng gọi điện và được thiết kế phù
hợp cho chức năng đó.

3.Một số hướng nhìn khác:
Như định nghĩa mở rộng đã nếu: các hệ thống thông tin thỏa mãn hầu hết các đặc điểm
của hệ thống nhúng như đã được đề cập ở trên được gọi là hệ thống nhúng.
Chúng ta hoàn toàn có thể sử dụng một máy tính đa chức năng (PC) để thực hiện một hệ
thống nhúng hoàn chỉnh, nếu như như hệ thống đó đáp ứng được phần lớn các nhu cầu
của hệ thống nhúng.
Vidu: chúng ta có thể dùng một PC để làm thiết bị thu thập dữ liệu thời tiết, bằng cách
cho nó chạy duy nhất những ứng dụng chuyên dụng cho việc thu thập dữ liệu, và kết nối
nó với những thiết bị cảm biến môi trường khác. Điều này đã thật sự tạo nên một hệ

thống nhúng hoàn chỉnh với một chức năng chuyên biệt là làm thiết bị thu thập dữ liệu dự
báo thời tiết. Và cái thiết bị này là một phần của hệ thống lớn hơn đó là trạm dự báo thời
tiết.


14
Cũng với ý trên nếu chúng ta chỉ xem điện thoại thông mình là một máy tính đa chức
năng có chức năng gọi thì với việc cho nó chạy một ứng dụng duy nhất chuyên biệt về
công việc chuyên biệt mà hệ thống của ta yêu cầu, và nhúng nó vào một hệ thống lớn
hơn. Lúc này, điện thoại thông mình với ứng dụng đó trở thành một hệ thống nhúng thật
sự.
Những khía cạnh nêu trên là hoàn toàn phù hợp với định nghĩa: “Một hệ thống nhúng là
hệ thống tính toán được nhúng vào một hệ thống lơn hơn và thực hiện một phần chức
năng của hệ thống lớn đó”. (hiểu theo cách hiểu (1))
Hình ảnh minh họa về việc dùng điện thoại làm hệ thống nhúng hoàn chỉnh cho một
hệ thống lớn hơn.
Vidu: Robot cho iOS Romo dùng điện thoại thông mình iPhone để làm hệ thống điều
khiển phần thân của robot và xử lý các thuật toán về AI,…


15

Phần II: HỆ ĐIỀU HÀNH LINUX NHÚNG
I/ Hệ điều hành:
Vì sao chúng ta cần một hệ điều hành cho các hệ thống nhúng?
Để phát triển một hệ thống nhúng chúng ta cần phải hiểu rất rõ về phần cứng của từng
loại hệ thống mà chúng ta đang phát triển, cụ thể là cần phải nắm: kiến trúc và tập lệnh
của vi xử lý đang sử dụng, phương phức giao tiếp với các loại thiết bị ngoại vi như:
sensor, thẻ nhớ, chip nhớ, giao tiếp USB,… như vậy để hệ thống nhúng hoạt động được
người ta phải lập trình tất cả những thứ trên rồi biên dịch ra file hex và nạp xuống hệ

thống. Việc làm này sẽ làm gây hao phí rất nhiều chi phí và công sức của anh em lập
trình viên. Hơn nữa, các hệ thống nhúng ngày càng đa dạng và thông minh hơn, chúng
không còn đơn thuần là chạy một tiến trình trong quá trình hoạt động của mình để có thể
xử lý một cách chính xác và nhanh nhất công việc được giao nữa, mà chúng sẽ có nhiều
tiến trình cùng chạy trong quá trình xử lý. Mỗi một tiến trình thường yêu cầu một lượng
tài nguyên hệ thống nhất định để có thể chạy được, và trong một số trường hợp các tài
nguyên này không thể dùng chung vì như thế có thể gây ra lỗi nghiêm trọng với hệ thống,
như vậy chúng ta cần phải điều phối và đồng bộ các tiến trình này một cách phù hợp để
chúng không gây tổn hại với nhau và chạy được một cách trơn tru nhất.
Với hai yêu cầu trên đòi hỏi chúng ta cần phải có một phần mềm chuyên giao tiếp với
phần cứng và chứa trong nó một sớ lượng vừa đủ các chương trình viết sẵn để điều khiển
các thiết bị ngoại vi trong hệ thống, để giúp cho lập trình viên có thể dễ dàng phát triển
các ứng dụng và bớt lệ thuộc vào phần cứng, và đồng thời phần mềm này phải có sẵn
chức năng quản lý, điều phối và đồng bộ các tiến trình trong hệ thống giúp hệ thống chạy
an toàn và chính xác. Phần mềm kể trên được gọi là hệ điều hành.
Hệ điều hành là một loại phần mềm các loại phần mềm thông thường. Sự khác biệt điển
hình là hệ điều hành được nạp và thực thi đầu tiên khi hệ thống bắt đầu khởi động và
được thực hiện trực tiếp bởi bộ xử lý của hệ thống. Hệ điều hành được viết để phục vụ
điều khiển bộ xử lý cũng như các tài nguyên khác trong hệ thống bởi vì nó sẽ đảm nhiệm
vụ chức năng quản lý và lập lịch các quá trình sử dụng CPU và cùng chia sẻ tài nguyên.

Tóm lại, hệ điều hành thực chất chính là một giao diện quan trọng, giao tiếp trực tiếp với
tầng phần cứng cấp thấp phục vụ cho cả người sử dụng cũng như các chương trình ứng


16
dụng thực thi trên nền phần cứng hệ thống. Hơn nữa hệ điều hành còn có vai trò quan
trọng trong việc đảm nhiệm 3 tác vụ nguyên lý chính:
(1)Quản lý quá trình,
(2) Quản lý tài nguyên,

(3) Bảo vệ tài nguyên khỏi sự xâm phạm của các quá trình thực thi sai.

Khái niệm hệ điều hành nhúng:

• Mang đặc trưng cơ bản của hệ điều hành
+ Quản lý tài nguyên phần cứng và phần mềm của hệ thống
+ Trung gian giữa phần cứng và phần mềm, giúp phần cứng làm việc trong
suốt với phần mềm ứng dụng
+ Cung cấp giao diện hàm chuẩn cho phần mềm ứng dụng
• Đặc trưng riêng của hệ điều hành nhúng
+ Tăng tính tin cậy
+ Khả năng tương thích mềm: dễ dàng nâng cấp hay thu gọn để tương thích
với nền tảng hệ thống
+ Đòi hỏi ít bộ nhớ hơn
+ Cung cấp các cơ chế lập lịch hỗ trợ hệ điều hành thời gian thực
(Realtime OS – RTOS)
+ Hỗ trợ các hệ thống không có ổ cứng thông qua cơ chế khởi động và thực thi
từ ROM và RAM
+ Tăng tính khả chuyển (portability)
+ Tính chuyên biệt hóa cáo cho từng loại hệ thống nhúng và từng dòng thiết bị
trong loại đó.

Các hệ điều hành nhúng thông dụng hiện nay: Embedded Linux, Windown CE,
Android, iOS, Window Phone, VxWork, LynxOS,….
Nhưng chiếm tỷ trọng cao nhất và phổ biến nhất là Embedded Linux, trong đề tài này
chúng ta sẽ đi tìm hiểu kỹ về Embedded Linux.
Embedded Linux được sử dụng nhiều và phổ biến vì:
• Chi phí: bản thân Linux là mã nguồn mở, nên ta không cần phải trả tiền để có thể
sử dụng và phát triển nhân của nó. Yếu tố này đặc biệt quan trong đối với các nhà
sản xuất và phát triển các sản phẩm điện tử tiêu dùng vì nó sẽ làm giảm giá thành

và nâng cao tính cạnh tranh cho các sản phẩm.
• Tính tương thích cao với nhiều loại vi xử lý khác nhau, cả 32bit và 64 bit, nó hỗ
trợ cả các kiến trúc có và không có khối quản lý bộ nhớ (MMU).
• Tính mềm dẻo và linh hoạt: bản chất của Linux là module Linux, do đó dễ dàng
làm nhỏ lại cho vừa môi trường hoạt động bằng cách bớt các chương trình tiện ích,
công cụ, và hệ thống dịch vụ không cần thiết được nhúng vào trong một môi
trường hoạt động. Một trong những lợi thế lớn của Linux đó là nó là một hệ điều
hành đầy đủ các chức năng, với hỗ trợ cho các mạng đang trở thành một yêu cầu
rất quan trọng trong bất kì hệ thống nhúng nào. Do có thể thêm hoặc bớt từ các mô
đun nhân tại chế độ runtime, nên điều này làm cho Linux rất linh hoạt.


17

II/ Hệ điều hành Linux nhúng:
1.Giới thiệu:
1.1 Lịch sử phát triển:
Linux là một nhân hệ điều hành được phát triển bởi Linus Torvalds vào năm 1991
trên cơ sở cải tiến phiên bản UNIX có tên Minix do giáo sư Andrew S.Tanenbaum
xây dựng và phổ biến . Sau đó Linus Torvalds đã công bố mã nguồn của mình cho
mọi người và mong muốn mọi người có thể đóng góp ý kiến , phát hiện lỗi và phát
triển nó ngày càng tốt hơn . Và cũng từ thời điểm đó , theo tư tưởng GNU rất nhiều
chuyên gia trên toàn thế giới đã tham gia vào quá trình phát triển Linux và vì vậy
Linux ngày càng phát triển , mạnh mẽ , ổn định , có độ tin cậy cao và đáp ứng được
nhu cầu của người dùng .
Một số mốc lịch sử quan trọng trong quá trình phát triển nhân hệ điều hành Linux :

Sau ba năm nhân Linux ra đời , đến ngày 14-3-1994, hệ điều hành Linux phiên bản
1.0 được phổ biến . Thành công lớn nhất của Linux 1.0 là nó đã hỗ trợ giao thức mạng
TCP/IP chuẩn UNIX , sánh với giao thức socket BSD- tương thích cho lập trình mạng

. Trình điều khiển thiết bị đã được bổ sung để chạy IP trên một mạng Ethernet hoặc
trên tuyến đơn hoặc qua modem. Hệ thống file trong Linux 1.0 đã vượt xa hệ thống
file của Minix thông thường , ngoài ra đã hỗ trợ điều khiển SCSI truy nhập đĩa tốc độ
cao. Điều khiển bộ nhớ ảo đã được mở rộng để hỗ trợ điều khiển trang cho các file
swap và ánh xạ bộ nhớ của file đặc quyền .
Vào tháng 3-1995 , nhân 1.2 được phổ biến. Điều đáng kể của Linux 1.2 so với Linux
1.0 ở chỗ nó hỗ trợ một phạm vi rộng và phong phú phần cứng , bao gồm cả kiến trúc
tuyến phần cứng PCI mới . Nhân Linux 1.2 là nhân kết thúc dòng nhân Linux chỉ hỗ
trợ PC .
Cách đánh chỉ số các dòng nhân (hệ điều hành) Linux : Hệ thống chỉ số được chia
thành một số mức, chẳng hạn hai mức như 2.4 hoặc ba mức như 2.2.5. Trong cách
đánh chỉ số như vậy , quy ước rằng với các chỉ số từ mức thứ hai trở đi , nếu là số
chẵn thì dòng nhân đó đã khá ổn định và tương đối hoàn thiện , còn nếu là số lẻ thì
dòng nhân đó vẫn đang được phát triển tiếp .
Tháng 6-1996 , nhân Linux 2.0 được phổ biến . Có hai đặc trưng nổi bật của Linux
2.0 là hỗ trợ kiến trúc phức hợp , bao gồm cả cổng Alpha 64-bit đầy đủ , và hỗ trợ
kiến trúc đa bộ xử lý . Phân phối nhân Linux 2.0 cũng thi hành được trên bộ xử lý
Motorola 68000 và kiến trúc SPARC của SUN .
Tới năm 2000 , nhân Linux 2.4 được phổ biến . Một trong đặc điểm được quan tâm
của nhân này là nó hỗ trợ mã ký tự Unicode 32 bít , rất thuận lợi cho việc xây dựng


18
các giải pháp toàn diện và triệt để đối với vấn đề ngôn ngữ tự nhiên trên phạm vi toàn
thế giới .
Nhân Linux là phần mềm tự do được phân phối theo Giấy phép sở hữu công cộng
phần mềm GNU GPL ( General Public License ) .
Vật lấy phước của nhân Linux là chú chim cánh cụt - Tux .

Hình 1: Linus Torvalds và vật lấy phước chú chim cánh cụt


1.2 Các thành phần của hệ điều hành linux nhúng:

1.2.1 Kiến trúc nhân hệ điều hành Linux:
Nhân được ví như trái tim của hệ điều hành . Về bản chất nhân cũng là một chương
trình phần mềm máy tính nhưng ở cấp độ hệ thống có vai trò điều khiển các thành
phần của hệ thống máy tính , quản lý tài nguyên của hệ thống , cung cấp một số dịch
vụ và phần mềm cơ bản cho máy tính , cung cấp môi trường thực thi có các ứng dụng
khác nhau chạy trên hệ thống . Nhân chính là cầu nối giữa phần cứng vật lý của máy
tính với và chương trình ứng dụng .
Các dịch vụ của nhân được chạy trong chế độ đặc quyền của bộ xử lý . Trái lại , các
chương trình ứng dụng được chạy trong chế độ người dùng hoàn toàn cách ly với hệ


19
điều hành . Khi ứng dụng chạy trong chế độ người dùng gọi tới một dịch vụ hệ thống
thông qua một giao diện , bộ xử lý chặn lại lời gọi và thi hành dịch vụ mức nhân hệ
điều hành . Thông thường việc thực thi ở mức nhân đơn giản và nhanh hơn bởi vì nó
không bị chuyển giữa chế độ đặc quyền và không đặc quyền .
Nhân của Linux gồm năm tiểu hệ thống :
-

Bộ phân thời gian cho tiến trình ( Process Schedule – SCHED ) :

Hoạt động của máy tính , tại một thời điểm chỉ có một lệnh được thực thi . Tuy nhiên
các hệ điều hành đa nhiệm như Windows , Linux … đều cho phép nhiều chương trình
chạy cùng một lúc . Các hệ điều hành đa nhiệm có thể làm được như vậy bằng cách
chuyển quyền thực thi qua lại giữa các chương trình thật nhanh làm cho người dùng
có cảm giác các chương trình chạy cùng lúc với nhau . Vi dụ người dùng có thể vừa
soạn thảo văn bản vừa có thể nghe . Trong hệ điều hành đa nhiệm thì bộ phân thời

gian tiến trình đảm nhiệm nhiệm vụ này .
SCHED được chia thành bốn khối :
Khối luật định thời (scheduling policy): chịu trách nhiệm phân bố xem tiến trình
( process ) nào được quyền truy xuất CPU. Hệ thống hoạt động có thông suốt hay
không nhờ vào bộ luật này, tránh trường hợp một tiến trình lợi dụng sơ hở của điều
luật mà chiếm thời gian hệ thống quá nhiều làm các tiến trình khác bị đóng băng
(freeze) .

Khối phụ thuộc kiến trúc ( architeture-specific ): khối này gồm các mã
assembly phụ thuộc vào mỗi loại CPU dùng để tạm ngưng hoạt động của tiến trình .

Khối độc lập kiến trúc (architeture-independent): Khối gọi các hàm từ khối
phụ thuộc kiến trúc và khối luật để chuyển giửa các tiến trình đồng thời nó còn gọi
các hàm ở MM để thiết lập bộ nhớ ảo cho các tiến trình được hồi phục lại . Khối phụ
thuộc kiến trúc sẽ khác nhau ở mỗi loại CPU (ỉ386, apha, v.v) nhưng khối độc lập
kiến trúc thì không đổi .

Khối hàm gọi hệ thống ( system call ) . Gồm các hàm mà người dùng có thể
dùng để tương tác với SCHED. Khi lập trình Linux và Unix sẽ quen với các hàm gọi
hệ thống này.
-

Bộ quản lý bộ nhớ ( Memory Manager - MM) :

Bộ nhớ qui ước của các máy tính chỉ có 640KB . Do BIOS chỉ quản lý được tới
FFFF , vùng nhớ cao từ A0000 trở lên dùng để ánh xạ BIOS , video card memory và
các thiết bị ngoại vi khác , vùng nhớ còn lại tử 9FFFF trở xuống tương đương với
640KB. Trong chế độ bảo vệ ( protect mode ) của CPU 32 bit đưa ra khái niệm bộ
nhở ảo ( Virtual Memory ) . Lúc này mỗi tiến trình được cấp tới 4GB bộ nhớ ảo .
Nhưng nhân hệ điều hành sẽ tạo ra một bảng mô tả từng trang của bộ nhớ ảo với bộ



20
nhớ vật lý . Bộ nhớ vật lý bây giờ bao gồm cả bộ nhớ RAM và vùng nhớ hoán vị trên
đĩa cứng .
-

Hệ thống file ảo :

Hệ thống này không chỉ cung cấp truy suất đến hệ thống file trên đĩa cứng mà còn tất
cả các ngoại vi . Trong Linux tất cả các tập tin , thư mục và các thiết bị đều được coi
như là file . Ví dụ như máy in , cổng nối tiếp , các ổ đĩa … đều được truy cập như là
file . Linux cũng cung cấp các thuộc tính truy cập cho file và thư mục , các thuộc tính
có thể được thiết lập như cho phép đọc , cho phép ghi , cho phép thực thi . Linux thiết
lập chế độ bảo vệ đối với các file hệ thống và hạn chế quyền truy cập đối với các thiết
bị .
-

Giao diện mạng ( Network Interface - NET) :

Trong nhân Linux dựng sẵn giao thức TCP/UDP , IP và Ethernet .
-

Bộ truyền thong nội bộ (Inter-process communication IPC) :

Một tiến trình trong Linux giao tiếp với các tiến trình khác và với nhân hệ điều hành
thông qua một cơ chế được gọi là bộ truyền thông nội bộ - IPC . Nó cho phép các tiến
trình gửi hoặc nhận các thông điệp từ một tiến trình khác , sử dụng chung vùng nhớ
chia sẻ và đồng bộ với các tiến trình khác .


1.2.2 Bootloader:
Trong một hệ thống nhúng, không tồn tại firmware giống như CMOS của PC. Vì vậy
để khởi động một hệ thống nhúng, chúng ta phải xây dựng bootloader. Bootloader là
một phần rất quan trọng trong hệ thống nhúng. Chức năng của bootloader như sau:
• Sao chép kernel từ flash memory đến RAM và thực thi kernel.
• Khởi tạo phần cứng.
• Bootloader cũng bao gồm chức năng ghi dữ liệu đến flash memory (tải
• kernel hoặc RAM disk image xuống flash memory bằng cổng giao tiếp tuần
tự hoặc các thiết bị nối mạng).
• Cung cấp giao tiếp để gửi lệnh đến hoặc nhận về các trạng thái của bo mạch cần
chạy.

1.2.3 Device driver:
Device driver là phần mềm giao tiếp giữa phần cứng và kernel của Embedded Linux.
Linux device driver có thể được tích hợp vào trong kernel theo 2 phương pháp: biên
dịch trực tiếp vào kernel hoặc biên dịch thành một định dạng đối tượng (object format
có tập tin là device_driver.o) để kernel có thể tải lên khi có nhu cầu (sử dụng lệnh
install module “insmod device_driver.o”).


21
Để biên dịch các tập tin của device driver cần phải xây dựng một Makefile. Kết quả
thu được sẽ là tập tin có phần mở rộng *.o.

1.2.4 Tổ chức thư mục:
Các file trong hệ thống Linux được đặt theo một trật tự trong các thư mục . Có một
thư mục chính trong đó chứa các thư mục con và các file .
Thư mục ./bin : Chứa các file thực thi dạng nhị phân và các chương trình khởi dộng
của hệ thống được .
Thư mục ./boot : Thư mục này chứa file ảnh ( image file ) của nhân dùng cho quá

trình khởi động .
Thư mục ./dev : Thư mục này chứa các file thiết bị .
Thư mục ./etc : Thư mục này chứa các file cấu hình toàn cục của hệ thống .
Thư mục ./home : Thư mục này chứa các thư mục con đại diện cho mỗi người dùng
khi đăng nhập . Đây là nơi làm việc thường xuyên của người dùng . Khi người quản
trị tạo tài khoản cho một người dùng thì sẽ cấp cho người dùng một thư mục cùng tên
với tài khoản người dùng nằm trong thư mục /home . Người dùng cho mọi quyền thao
tác trên thư mục của mình và không ảnh hưởng đến người dùng khác .
Thư mục ./lib : Thư mục này chứa các file thư viện .so hoặc .a . Các thư viện C và
lien kết động cần cho chương trình chạy và cho toàn hệ thống .
Thư mục ./lost+found : Khi chạy chương trình fsck , nếu tìm thấy một chuỗi dữ liệu
nào thất lạc trên đĩa cứng và không lien quan đến các tập tin , Linux sẽ gom chúng lại
và đặt trong thư mục này để nếu cần người dùng có thể đọc và giữ lại dữ liệu bị mất .
Thư mục ./mnt : Thư mục này chứa các kết gán ( mount ) tạm thời đến các ổ đĩa hoặc
thiết bị khác .
Thư mục ./sbin : Thư mục này chứa các file thực thi của hệ thống dành cho người
quản trị hệ thống .
Thư mục ./tmp : thư mục này dùng để chứa các file tạm mà chương trình tạo ra lúc
chạy . Các file này sẽ được hệ thống dọn dẹp khi các chương trình kết thúc .
Thư mục ./usr : Thư mục này chứa nhiều thư mục con như /usr/bin , /usr/local … và
đây cũng là một trong những thư mục con quan trọng của hệ thống , bên trong thư
mục con này (/usr/local) cũng chứa đầy đủ các thư mục con tương tự ngoài thư mục
gốc như sbin, lib, bin… Nếu nâng cấp hệ thống thì các chương trình người dùng cài
đặt trong thư mục /usr/local vần giữ nguyên và không sợ các chương trình bị mất mát.
Thư mục ./var : Thư mục này chứa các file biến thiên bất thường như các file dữ liệu
đột nhiên tăng kích thước trong một thời gian ngắn sau đó lại giảm kích thước xuống
còn rất nhỏ. Điển hình là các file dùng làm hàng đợi chứa dữ liệu cần đưa ra máy in
hoặc các hàng đợi chứa thư điện tử .



22

2.Một số hệ điều hành Linux nhúng phổ biến:
2.1 Hệ điều hành nhúng uClinux:
Hệ điều hành uClinux là một phiên bản hệ điều hành sử dụng nhân Linux được thiết
kế cho các hệ thống nhúng sử dụng bộ vi điều khiển không có đơn vị quản lý bộ nhớ .
Là một phiên bản hệ điều hành sử dụng nhân Linux nên uClinux có kiến trúc , cách
thức hoạt động giống như hệ điều hành Linux chạy trên các PC , phương pháp phát
triển ứng dụng cũng giống như phát triển trên môi trường hệ điều hành Linux . Do là
một hệ điều hành mã nguồn mở nên các nhà phát triển có thể cấu hình hệ điều hành
theo ý mình để tạo ra một hệ điều hành phù hợp với hệ thống cần phát triển .

2.1.1 Lịch sử phát triển:
Dự án hệ điều hành uClinux được bắt đầu phát triển từ năm 1997 , mục đích tạo ra hệ
điều hành này là phát triển một phiên bản nhân hệ điều hành Linux 2.0 để nhúng vào
các vi điều khiển . Nó được Jeff Dionne , Kenneth Albanowski và nhóm các nhà phát
triển khác đặt vấn đề là khả năng nhúng Linux vào mạng vi điều khiển không có đơn
vị quản lý bộ nhớ , khả năng truyền thông giữa mạng đó với các hệ thống truyền
thông . Phiên bản phát hành đầu tiên của hệ điều hành này được phát hành cùng với vi
xử lý Motorola 68000 , vi xử lý này dựa trên trên vi xử lý MC68328 DragonBall
Intergrated Microprocessor nó được triển khai trong bộ điều khiển SCADA năm
1997/98 . Phiên bản này đã được cộng đồng nguồn mở phát triển và một phiên bản
khác đã được sử dụng cho Palm Pilot vào tháng 2 năm 1998 .
Trong hệ điều hành uClinux có một số thay đổi so với hệ điều hành Linux , thư viện
uC-libc được thiết kế để thay cho thư viện libc và glibc trong hệ điều hành Linux .
Một cải tiến khác đã được thực hiện bởi SnapGear là thêm một định dạng mới Binary
Flat – bFLT .
Hệ điều hành uClinux là một hệ điều hành đa nhiệm , các chương trình có thể chạy ở
nhiều mức khác nhau của hệ thống . Hệ điều hành cho phép chạy nhiều chương trình
cùng một lúc , cho phép chạy các ứng dụng đa luồng . Với việc nhúng hệ điều hành

uClinux vào các vi điều khiển đã giúp cho các nhà phát triển tạo ra các ứng dụng dễ
dàng vì phương pháp lập trình giống như trên môi trường hệ điều hành Linux . Hệ
điều hành uClinux là một hệ điều hành thời gian thực , nhà phát triển có thể chạy các
ứng dụng đa luồng trên môi trường hệ điều hành . Điều này là rất khó khi phát triển
một ứng dụng đa luồng chạy trực tiếp trên vi điều khiển không có hệ điều hành .
Nhiệm vụ chính khi phát triển hệ điều hành uClinux là cấu hình nhân hệ điều hành
cho phù hợp với hệ thống cần phát triển , biên dịch nhân , phát triển các driver cho
các ngoại vi và sau đó phát triển các ứng dụng cho hệ thống nhúng chạy trên môi
trường hệ điều hành .


23

2.1.2 Kiến trúc của hệ điều hành uClinux:
uClinux là một hệ điều hành dùng phổ biến cho các hệ thống nhúng Linux . Hệ điều
hành này được dùng cho các vi điều khiển không có đơn vị quản lý bộ nhớ . Ngày nay
nhân hệ điều hành này hỗ trợ cho rất nhiều loại nền tảng CPU khác nhau như
ColdFire , Axis ETRAX , ARM , Atari 68k và rất nhiều loại khác nữa . Giống như
Linux , uClinux cũng có hỗ trợ mạng giao thức TCP/IP và các giao thức giao tiếp
mạng khác . Nó cũng hỗ trợ các hệ thống file khác nhau và thêm vào một số dạng file
đặc biệt được thiết kế cho các hệ thống nhúng .
Để có thể chạy trên các vi điều khiển không có đơn vị quản lý bộ nhớ thì trong nhân
của hệ điều hành có một số thay đổi . Toàn bộ mã nguồn và các chức năng điều khiển
của nhân hệ điều hành của bộ quản lý bộ nhớ được loại bỏ ra khỏi mã nguồn của nhân
hệ điều hành . Một số chức năng khác cũng được điều chỉnh để phù hợp với yêu cầu
của các vi điều khiển không có đơn vị quản lý bộ nhớ .
Sự thuận lợi chính của nhân uClinux mang lại so với nhân Linux chạy trên PC là kích
thước của nhân . Khi biên dịch nhân , nhà phát triển phải thiết lập các lựa chọn biên
dịch như hỗ trợ loại vi xử lý , hệ thống file và hỗ trợ các thiết bị của nhân làm sao để
kich thước của nhân giảm xuống còn khoảng 400 KB . Tuy nhiên vào lúc khởi động ,

thì nhân của hệ điều hành sẽ yều cầu khoảng không gian bộ nhớ khoảng một
megabyte . Trong thực tế kích thước bộ nhớ cần khoảng 2MB vì còn cần cho các ứng
dụng . Với hệ điều hành uClinux , kích thước ảnh nhân hệ điều hành được điều chỉnh
khoảng từ 500 tới 900 KB .
Tương tự như mã nguồn hệ điều hành Linux , mã nguồn của hệ điều hành uClinux
cũng có thể tải miễn phí . Mã nguồn hệ điều hành này cũng thuộc bản quyền GNU
GPL , và giống như các tất cả các ứng dụng khác gói mã nguồn của nhân cũng bao
gồm đầy đủ mã nguồn và các thư viện kèm theo . Mã nguồn hệ điều hành uClinux và
các công cụ cần thiết có tìm tại website www.uclinux.org . Từ website này các nhà
phát triển có thể tải gói phân phối củ hệ điều hành bao gồm mã nguồn nhân hệ điều
hành uClinux , các thư viện , một số ứng dụng đã được phát triển , những thông báo
lỗi và những lỗi đã được sửa .

2.1.3 Các thư viện sử dụng để phát triển hệ điều hành uClinux:
uClinux sử dụng một phần của thư viện C chuẩn , đó là thư viện cơ sở để phục vụ cho
việc phát triển nhân uClinux . Thư viện này dựa trên thư viện C Linux – 8086 nhưng
đã đã được thu nhỏ thành một thư viện súc tích phù hợp với vi điều khiển . Thư viện
uClibc đã được tạo ra hỗ trợ cho các vi điều khiển không có đơn vị quản lý bộ nhớ
như Dragonball , ColdFire , ARM … thư viện vẫn hỗ trợ kiến trúc Linux chuẩn .
uClinux cũng cung cấp hoàn toàn thư viện Linux chuẩn libC API .


24
Để phát triển uClinux , nhà phát triển có thể lựa chọn giữa hai thư viện libc là uC-libc
và uClibc . Thư viện uClibc giống như thư viện glibc phát triển cho Linux , các hàm
của glibc cũng được áp dụng cho uClibc . Ngoài ra gói mã nguồn của uClinux còn có
một sô thư viện khác như : libatm hỗ trợ truyền dữ liệu không đồng bộ , libjpeg hỗ trợ
cho định dạng ảnh nén JPEG , libm hộ trợ các thư viện toán học , libnet hỗ trợ các
API để thao tác mạng .


2.1.4 Driver của các ngoại vi:
Driver là các trình quản lý , điều khiển các ngoại vi , cung cấp các hàm cho phép
người dùng để có thể điều khiển tới các thành phần ngoại vi . Các driver được chia
làm ba lớp :
- Character driver : Lớp này được sử dụng rộng rãi từ các ứng dụng đơn giản đến
các ứng dụng phức . Ví dụ ứng dụng đơn giản như driver điều khiển LED , ứng dụng
phức tạp như driver Firewire , driver USB . Character driver đọc và ghi dữ liệu trực
tiếp tới thiết bị mà không có bộ nhớ đệm .
- Block driver : Lớp này giao tiếp tới hệ thống file và được sử dụng để kết nối các
phân vùng đĩa , các thiết bị vào file hệ thống . Khác với character driver , block
driver thường đọc ghi dữ liệu với thiết bị thông qua bộ đệm .
- Network driver : Loại này có nhiều cấu trúc khác nhau , hỗ trợ truyền thông , sử
dụng các Port và các Socket để định tuyến các gói dữ liệu .
Thông thường chương trình ứng dụng không được truy cập , đọc hoặc ghi trực tiếp tới
các thiết bị ngoại vi . Khi cần giao tiếp với các ngoại vi , chương trình ứng dụng sẽ sử
dụng các driver để giao . Các driver có thể là một module hoặc là được liên kết tĩnh
vào nhân . Driver được đăng ký với nhân hệ điều hành trong khi module khởi tạo tiến
trình . Driver sẽ đăng ký các thành phần :
• Bảng Fops .
• Chỉ số Major .
• Device Class ( Block hoặc Char ) .
• Name – tên driver .

2.1.5 Mã nguồn của hệ điều hành uClinux:
Mã nguồn của uClinux có thể tải về từ địa chỉ www.uclinux.org , ở địa chỉ này cũng
cấp các phiển bản khác nhau của hệ điều hành uClinux . Toàn bộ mã nguồn uClinux
được chứa trong một file nén . Khi được giả nén , gói mã nguồn được tạo ra thành cấu
trúc hình cây gồm các thư mục và tất cả các thư mục này đều được chứa trong thư
mục chính là uClinux-dist . Đó là mã nguồn của hệ điều hành uClinux và cần biên
dịch tạo ra một file ảnh để đưa vào hệ thống cần phát triển . File nén chứa mã nguồn



25
uClinux được đặt tên theo một định dạng chuẩn như sau uClinux-distYYYYMMDD.tar.gz trong đó YYYY là năm , MM là tháng , DD là ngày .
Trong khóa luận này em sử dụng mã nguồn hệ điều hành uClinux với phiên bản nhân
Linux là linux-2.4 . Sau khi giải nén file mã nguồn , các thư mục có trong thư mục
chính uClinux-dist gồm các thư mục :


bin : các tiện ích để tạo ra file flash.bin .



Documention : tài liệu chi tiết của uClinux .



tools : các công cụ để biên dịch .



user : ứng dụng của người dùng và mã nguồn các ứng dụng đó .



freeswan : các chương trình bảo mật , mã hóa .



lib : Chứa các thư viện cho ứng dụng .




linux-2.4.x : mã nguồn nhân uClinux .



uClibc : thư viện C .



config : Cấu hình hệ thống file uClinux . vv…



romfs : Cấu trúc hệ thống file của ROM , bao gồm ứng dụng , các file thiết bị . Thư
mục này được tạo ra khi biên dịch .



vendor : Chứa tên các thư mục của các loại vi xử lý mà hệ điều hành hỗ trợ .



images : Sau khi biên dịch , thư mục này chủa nhân dạng nhị phân của hệ điều hành ,
file ROM , và file ảnh .

Hình 2 : các thưc mục con và các file của thư mục uClinux-dist .



×