Tải bản đầy đủ (.pdf) (72 trang)

Báo Cáo Môn Hệ Điều Hành

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 (3.51 MB, 72 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Báo Cáo Môn Hệ Điều Hành

Embedded Linux System
Phan Duy, Phạm Tuấn Duy, Bùi Thanh Hùng, Phạm Xuân Sơn, Phạm Đức Nguyên,
Nguyễn Xuân Triễn, Lê Quốc Hưng, Đào Xuân Dạng
11/22/2012

Những kiến thức căn bản về hệ điều hành nhúng linux và ứng dụng của nó trong lĩnh vực
công nghệ thông tin nói chung và lập trình nhúng nói riêng được nhóm sưu tầm và tổng
hợp.


Nhận xét.
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................


...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................


Nội Dung
I. GIỚI THIỆU TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ HỆ ĐIỀU HÀNH THỜI
GIAN THỰC ....................................................................................................................... 4
1. Hệ thống nhúng (Embedded System) ........................................................................ 4
a) Khái niệm ............................................................................................................... 4
b) Hệ thống thời gian thực.......................................................................................... 4
c) Đặc trưng................................................................................................................ 5
d) Giao diện ................................................................................................................ 5
e) Kiến trúc CPU ........................................................................................................ 5
f)

Thiết bị ngoại vi ..................................................................................................... 6

g) Công cụ phát triển .................................................................................................. 6
2. Hệ điều hành thời gian thực (RTOS) và kernel thời gian thực ................................. 7
a) Chương trình, tác vụ và luồng ............................................................................... 7
b) Vòng lặp kiểm soát đơn giản ................................................................................. 8
c) Hệ thống ngắt điều khiển ....................................................................................... 9
d) Đa nhiệm tương tác ................................................................................................ 9
e) Đa nhiệm ưu tiên .................................................................................................... 9
f)

Vi nhân (Microkernel) và nhân ngoại (Exokernel) ................................................ 9


g) Nhân khối (monolithic kernels) ........................................................................... 10
II.

PHẦN MÊM TRONG EMBEDDED LINUX ........................................................ 10

1. Giới thiệu Linux ...................................................................................................... 10
a) Tổng quan ............................................................................................................ 11
b) Điểm mạnh ........................................................................................................... 12
c) Điểm yếu .............................................................................................................. 13
2. Linux Kernel............................................................................................................ 14
a) Kiến trúc nhân ...................................................................................................... 14
b)

Đặc điểm chính của nhân Linux ...................................................................... 20

c) File System ............................................................................................................. 21
d) Device Drivers ..................................................................................................... 25


e) Cấu hình kernel .................................................................................................... 25
f)

Biên Dịch và cài đặt hạt nhân cho hệ thống máy chủ .......................................... 32

g) Sử dụng mô-đun hạt nhân .................................................................................... 33
3. Toolchain ................................................................................................................. 34
a) Cross compiler ..................................................................................................... 34
b)


Định nghĩa Toolchain và các thành phần ......................................................... 35

c) Thư viện C .......................................................................................................... 37
d)

Toolchain Options ............................................................................................ 38

e) Xây dựng một Toolchain ..................................................................................... 39
4. Bootloader ............................................................................................................... 42
a) Giới thiệu Bootloader ........................................................................................... 42
b)

Bootloader trên một số nền tảng phổ biến ........................................................ 42

c) Bootloader cho các CPUs nhúng ......................................................................... 45
d)
III.

U-boot Bootloader ............................................................................................ 45
PHẦN CỨNG ĐỐI VỚI EMBEDDED LINUX..................................................... 52

1. Yêu cầu phần cứng .................................................................................................. 52
2. Khả năng tích hợp phần cứng .................................................................................. 54
3. Các phần cứng tích hợp hiện nay ............................................................................ 56
IV. ỨNG DỤNG – XÂY DỰNG MỘT HỆ THỐNG NHÚNG LINUX TRÊN NỀN
TẢNG ARM (TI OMAP3) ................................................................................................ 57
1. Cấu hình phần cứng. ................................................................................................ 57
2. Build một Cross-compiling Toolchain .................................................................... 58
3. Buil Bootloader U-Boot. ......................................................................................... 61
4. Build kernel Linux................................................................................................... 64

5. Hướng phát triển của các ứng dụng Embedded Linux ............................................ 66
6. Embedded Linux trong Android.............................................................................. 67
V.

Tham Khảo .............................................................................................................. 71


I.

GIỚI THIỆU TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ HỆ ĐIỀU HÀNH
THỜI GIAN THỰC

1. Hệ thống nhúng (Embedded System)
a) Khái niệm
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả
năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ
thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng 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.
Hệ thống nhúng thường được thiết kế để thực hiện một chức năng chuyên biệt nào
đó. Khác với các máy tính đa chức năng, chẳng hạn như máy tính cá nhân, một hệ thống
nhúng chỉ thực hiện một hoặc một vài chức năng 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. Vì hệ thống chỉ được xây dựng cho một
số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ưu hóa nó nhằm giảm thiểu kích
thước và chi phí sản xuất. Các hệ thống nhúng thường được sản xuất hàng loạt với số
lượng lớn. Hệ thống nhúng rất đa dạng, phong phú về chủng loại. Đó có thể là những
thiết bị cầm tay nhỏ gọn như đồng hồ kĩ thuật số và máy chơi nhạc MP3, hoặc những sản
phẩm lớn như đèn giao thông, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các
máy năng lượng hạt nhân. Xét về độ phức tạp, hệ thống nhúng có thể rất đơn giản với

một vi điều khiển hoặc rất phức tạp với nhiều đơn vị, các thiết bị ngoại vi và mạng lưới
được nằm gọn trong một lớp vỏ máy lớn.
Các thiết bị PDA hoặc máy tính cầm tay cũng có một số đặc điểm tương tự với hệ
thống nhúng như các hệ điều hành hoặc vi xử lý điều khiển chúng nhưng các thiết bị này
không phải là hệ thống nhúng thật sự bởi chúng là các thiết bị đa năng, cho phép sử dụng
nhiều ứng dụng và kết nối đến nhiều thiết bị ngoại vi.
b) Hệ thống thời gian thực
Trong lĩnh vực công nghệ thông tin, người ta nói về hệ thống thông tin thời gian
thực khi hệ thống đó điều khiển một vật thể vật lý với một tốc độ phù hợp với sự tiến
triển của tiến trình chủ. Một ví dụ dễ hiểu (hệ thống thông tin điều khiển màn hình hiển
thị giờ chính xác của các tàu điện ngầm sẽ đến và đi tại một gare nhất định). Hệ thống
thông tin thời gian thực khác với những hệ thống thông tin khác bởi sự gò bó về thời
gian, do đó, việc tuân thủ các nguyên tắc cũng quan trọng như độ chính xác của kết quả,
nói một cách khác, hệ thống không chỉ đơn giản là đưa ra kết quả chính xác mà nó còn
phải thực hiện một xử lý trong một thời gian rất ngắn. Hệ thống thông tin thời gian thực
ngày nay được ứng dụng trong rất nhiều lĩnh vực như: trong ngành công nghiệp sản xuất,


kiểm soát tiến trình (trong nhà máy, hay trong viện hạt nhân, trong hệ thống hàng không,
thông qua các hệ thống dẫn đường tích hợp trên máy bay và vệ tinh). Sự phát triển của hệ
thống thông tin thời gian thực yêu cầu mỗi phần tử của hệ thống phải ở thời gian thực, và
một hệ thống được thiết kế theo cách như vậy được gọi là hệ điều hành thời gian thực.
c) Đặc trưng
Hệ thống nhúng thường có một số đặc điểm chung như sau:
 Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng chứ
không phải đóng vai trò là các hệ thống máy tính đa chức năng. Một số hệ thống đòi
hỏi ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng
dụng; một số hệ thống không đòi hỏi hoặc ràng buộc chặt chẽ, cho phép đơn giản hóa
hệ thống phần cứng để giảm thiểu chi phí sản xuất.
 Một hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống

phức tạp nằm trong thiết bị mà nó điều khiển.
 Phần mềm được viết cho các hệ thống nhúng được gọi là firmware và được lưu trữ
trong các chip bộ nhớ ROM hoặc bộ nhớ flash chứ không phải là trong một ổ đĩa.
Phần mềm thường chạy với số tài nguyên phần cứng hạn chế: không có bàn phím,
màn hình hoặc có nhưng với kích thước nhỏ, dung lượng bộ nhớ thấp Sau đây, ta sẽ đi
sâu, xem xét cụ thể đặc điểm của các thành phần của hệ thống nhúng.
d) Giao diện
Các hệ thống nhúng có thể không có giao diện (đối với những hệ thống đơn nhiệm)
hoặc có đầy đủ giao diện giao tiếp với người dùng tương tự như các hệ điều hành trong
các thiết bị để bàn. Đối với các hệ thống đơn giản, thiết bị nhúng sử dụng nút bấm, đèn
LED và hiển thị chữ cỡ nhỏ hoặc chỉ hiển thị số, thường đi kèm với một hệ thống menu
đơn giản.
Còn trong một hệ thống phức tạp hơn, một màn hình đồ họa, cảm ứng hoặc có các
nút bấm ở lề màn hình cho phép thực hiện các thao tác phức tạp mà tối thiểu hóa được
khoảng không gian cần sử dụng; ý nghĩa của các nút bấm có thể thay đổi theo màn hình
và các lựa chọn. Các hệ thống nhúng thường có một màn hình với một nút bấm dạng cần
điểu khiển (joystick button). Sự phát triển mạnh mẽ của mạng toàn cầu đã mang đến cho
những nhà thiết kế hệ nhúng một lựa chọn mới là sử dụng một giao diện web thông qua
việc kết nối mạng. Điều này có thể giúp tránh được chi phí cho những màn hình phức tạp
nhưng đồng thời vẫn cung cấp khả năng hiển thị và nhập liệu phức tạp khi cần đến, thông
qua một máy tính khác. Điều này là hết sức hữu dụng đối với các thiết bị điều khiển từ
xa, cài đặt vĩnh viễn. Ví dụ, các router là các thiết bị đã ứng dụng tiện ích này.
e) Kiến trúc CPU


Các bộ xử lý trong hệ thống nhúng có thể được chia thành hai loại: vi xử lý và vi điều
khiển. Các vi điều khiển thường có các thiết bị ngoại vi được tích hợp trên chip nhằm
giảm kích thước của hệ thống. Có rất nhiều loại kiến trúc CPU được sử dụng trong thiết
kế hệ nhúng như ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR,
Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … Điều này trái ngược với các loại máy

tính để bàn, thường bị hạn chế với một vài kiến trúc máy tính nhất định. Các hệ thống
nhúng có kích thước nhỏ và được thiết kế để hoạt động trong môi trường công nghiệp
thường lựa chọn PC/104 và PC/104++ làm nền tảng. Những hệ thống này thường sử
dụng DOS, Linux, NetBSD hoặc các hệ điều hành nhúng thời gian thực như QNX hay
VxWorks. Còn các hệ thống nhúng có kích thước rất lớn thường sử dụng một cấu hình
thông dụng là hệ thống on chip (System on a chip – SoC), một bảng mạch tích hợp cho
một ứng dụng cụ thể (an application-specific integrated circuit – ASIC). Sau đó nhân
CPU được mua và thêm vào như một phần của thiết kế chip. Một chiến lược tương tự là
sử dụng FPGA (field-programmable gate array) và lập trình cho nó với những thành phần
nguyên lý thiết kế bao gồm cả CPU.
f) Thiết bị ngoại vi
Hệ thống nhúng giao tiếp với bên ngoài thông qua các thiết bị ngoại vi, ví dụ như:
 Serial Communication Interfaces (SCI): RS-232, RS-422, RS-485...
 Synchronous Serial Communication Interface: I2C, JTAG, SPI, SSC và ESSI
 Universal Serial Bus (USB)
 Networks: Controller Area Network, LonWorks...
 Bộ định thời: PLL(s), Capture/Compare và Time Processing Units
 Discrete IO: General Purpose Input/Output (GPIO)
g) Công cụ phát triển
Tương tự như các sản phẩm phần mềm khác, phần mềm hệ thống nhúng cũng được
phát triển nhờ việc sử dụng các trình biên dịch (compilers), chương trình dịch hợp ngữ
(assembler) hoặc các công cụ gỡ rối (debuggers). Tuy nhiên, các nhà thiết kế hệ thống
nhúng có thể sử dụng một số công cụ chuyên dụng như:
 Bộ gỡ rối mạch hoặc các chương trình mô phỏng (emulator)
 Tiện ích để thêm các giá trị checksum hoặc CRC vào chương trình, giúp hệ thống
nhúng có thể kiểm tra tính hợp lệ của chương trình đó.


 Đối với các hệ thống xử lý tín hiệu số, người phát triển hệ thống có thể sử dụng phần
mềm workbench như MathCad hoặc Mathematica để mô phỏng các phép toán.

 Các trình biên dịch và trình liên kết (linker) chuyên dụng được sử dụng để tối ưu hóa
một thiết bị phần cứng.
 Một hệ thống nhúng có thể có ngôn ngữ lập trình và công cụ thiết kế riêng của nó
hoặc sử dụng và cải tiến từ một ngôn ngữ đã có sẵn.
Các công cụ phần mềm có thể được tạo ra bởi các công ty phần mềm chuyên dụng về
hệ thống nhúng hoặc chuyển đổi từ các công cụ phát triển phần mềm GNU. Đôi khi, các
công cụ phát triển dành cho máy tính cá nhân cũng được sử dụng nếu bộ xử lý của hệ
thống nhúng đó gần giống với bộ xử lý của một máy PC thông dụng.
2. Hệ điều hành thời gian thực (RTOS) và kernel thời gian thực
a) Chương trình, tác vụ và luồng
Một chương trình trên một hệ thống nhúng chính là một phần mềm có khả năng thực
thi độc lập và có vùng nhớ riêng của mình. Nó bao gồm môi trường thực thi một chức
năng cụ thể và khả năng tương tác với hệ điều hành. Một chương trình có thể được bắt
đầu chạy một cách độc lập hoặc có thể từ các chương trình khác. Một hệ điều hành có
khả năng thực thi nhiều chương trình cùng một lúc song song nhau.
Tuy nhiên, khi một chương trình có khả năng tự chia ra một vài phần có khả năng
thực thi song song nhau, mỗi phần đó được gọi là một luồng. Một luồng chính là một
phần trong chương trình và phụ thuộc về mặt chức năng so với các luồng khác nhưng lại
có khả năng hoạt động độc lập nhau. Các luồng sẽ chia sẻ chung một bộ nhớ trong một
chương trình. Khái niệm về tác vụ và luồng có thể thay thế cho nhau. Hình dưới mô tả sự
khác nhau giữa chương trình và luồng.


Một phương pháp khác mà các kernel thời gian thực hay sử dụng đó chính là mô hình
sắp xếp mức độ ưu tiên. Trong mô hình này, mỗi luồng sẽ đi kèm với mức độ ưu tiên của
nó, lúc này, vi xử lý sẽ thiết lập đường truy cập tới luồng nào có mức độ ưu tiên cao nhất
khi nó đòi hỏi được phục vụ. Cũng có một vài biến thể của phương pháp này, tuy nhiên
vẫn phải đảm bảo các luồng có mức độ ưu tiên thấp nhất vẫn phải có thể truy cập tới vi
xử lý một vài lần. Hình dưới mô tả phương pháp cách xử lý của phương pháp này.


Một ưu điểm cực kỳ quan trọng của phương pháp này đó chính là nó có khả năng tạm
hoãn thực thi một luồng khi có một luồng khác với mức độ ưu tiên cao hơn cần phục vụ.
Quá trình lưu trữ lại các thông tin hiện thời của luồng bị tạm hoãn thực thi khi có một
luồng khác với mức độ ưu tiên cao hơn cần phục vụ gọi là “context switching”. Quá trình
này phải được thực hiện nhanh và đơn giản để luồng bị tạm hoãn có thể thực hiện tiếp
nhiệm vụ của mình một cách chính xác khi nó lấy lại đươc quyền điều khiển.
Một hệ thống nhúng thời gian thực phải có khả năng đáp ứng lại các tín hiệu ngõ vào
hay các sự kiện một cách nhanh nhất và chính xác nhất, đây chính là các ngắt của hệ
thống. Ngắt của hệ thống sẽ phải làm cho vi xử lý ngưng nhiệm vụ đang thực thi để xử lý
ngắt. Một ngắt sẽ được xử lý bởi ISR (interrupt service routine), nó có khả năng kích hoạt
một luồng có mức độ ưu tiên cao hơn luồng đang được thực thi. Lúc này, nó sẽ tạm hoãn
lại luồng hiện tại để dành quyền cho luồng mới có mức độ ưu tiên cao hơn. Ngắt có thể
được tạo ra bởi phần mềm (ngắt mềm) hay bởi các thiết bị phần cứng (ngắt cứng).
b) Vòng lặp kiểm soát đơn giản
Theo thiết kế này, phần mềm được tổ chức thành một vòng lặp đơn giản. Vòng lặp
gọi đến các chương trình con, mỗi chương trình con quản lý một phần của hệ thống phần
cứng hoặc phần mềm.


c) Hệ thống ngắt điều khiển
Các hệ thống nhúng thường được điểu khiển bằng các ngắt. Có nghĩa là các tác vụ
của hệ thống nhúng được kích hoạt bởi các loại sự kiện khác nhau. Ví dụ, một ngắt có thể
được sinh ra bởi một bộ định thời sau một chu kỳ được định nghĩa trước, hoặc bởi sự
kiện khi cổng nối tiếp nhận được một byte nào đó.
Loại kiến trúc này thường được sử dụng trong các hệ thống có bộ quản lý sự kiện đơn
giản, ngắn gọn và cần độ trễ thấp. Hệ thống này thường thực hiện một tác vụ đơn giản
trong một vòng lặp chính. Đôi khi, các tác vụ phức tạp hơn sẽ được thêm vào một cấu
trúc hàng đợi trong bộ quản lý ngắt để được vòng lặp xử lý sau đó. Lúc này, hệ thống gần
giống với kiểu nhân đa nhiệm với các tiến trình rời rạc.
d) Đa nhiệm tương tác

Một hệ thống đa nhiệm không ưu tiên cũng gần giống với kỹ thuật vòng lặp kiểm
soát đơn giản ngoại trừ việc vòng lặp này được ẩn giấu thông qua một giao diện lập trình
API. Các nhà lập trình định nghĩa một loạt các nhiệm vụ, mỗi nhiệm vụ chạy trong một
môi trường riêng của nó. Khi không cần thực hiện nhiệm vụ đó thì nó gọi đến các tiến
trình con tạm nghỉ (bằng cách gọi “pause”, “wait”, “yield” …).
Ưu điểm và nhược điểm của loại kiến trúc này cũng giống với kiểm vòng lặp kiểm
soát đơn giản. Tuy nhiên, việc thêm một phần mềm mới được thực hiện dễ dàng hơn
bằng cách lập trình một tác vụ mới hoặc thêm vào hàng đợi thông dịch (queueinterpreter).
e) Đa nhiệm ưu tiên
Ở loại kiến trúc này, hệ thống thường có một đoạn mã ở mức thấp thực hiện việc
chuyển đổi giữa các tác vụ khác nhau thông qua một bộ định thời. Đoạn mã này thường
nằm ở mức mà hệ thống được coi là có một hệ điều hành và vì thế cũng gặp phải tất cả
những phức tạp trong việc quản lý đa nhiệm.
Bất kỳ tác vụ nào có thể phá hủy dữ liệu của một tác vụ khác đều cần phải được tách
biệt một cách chính xác. Việc truy cập tới các dữ liệu chia sẻ có thể được quản lý bằng
một số kỹ thuật đồng bộ hóa như hàng đợi thông điệp (message queues), semaphores …
Vì những phức tạp nói trên nên một giải pháp thường được đưa ra đó là sử dụng một hệ
điều hành thời gian thực. Lúc đó, các nhà lập trình có thể tập trung vào việc phát triển các
chức năng của thiết bị chứ không cần quan tâm đến các dịch vụ của hệ điều hành nữa.
f) Vi nhân (Microkernel) và nhân ngoại (Exokernel)
Khái niệm vi nhân (microkernel) là một bước tiếp cận gần hơn tới khái niệm hệ điều
hành thời gian thực. Lúc này, nhân hệ điều hành thực hiện việc cấp phát bộ nhớ và
chuyển CPU cho các luồng thực thi. Còn các tiến trình người dùng sử dụng các chức


năng chính như hệ thống file, giao diện mạng lưới,… Nói chung, kiến trúc này thường
được áp dụng trong các hệ thống mà việc chuyển đổi và giao tiếp giữa các tác vụ là
nhanh.
Còn nhân ngoại (exokernel) tiến hành giao tiếp hiệu quả bằng cách sử dụng các lời
gọi chương trình con thông thường. Phần cứng và toàn bộ phần mềm trong hệ thống luôn

đáp ứng và có thể được mở rộng bởi các ứng dụng.
g) Nhân khối (monolithic kernels)
Trong kiến trúc này, một nhân đầy đủ với các khả năng phức tạp được chuyển đổi để
phù hợp với môi trường nhúng. Điều này giúp các nhà lập trình có được một môi trường
giống với hệ điều hành trong các máy để bàn như Linux hay Microsoft Windows và vì
thế rất thuận lợi cho việc phát triển. Tuy nhiên, nó lại đòi hỏi đáng kể các tài nguyên phần
cứng làm tăng chi phí của hệ thống. Một số loại nhân khối thông dụng là Embedded
Linux và Windows CE. Mặc dù chi phí phần cứng tăng lên nhưng loại hệ thống nhúng
này đang tăng trưởng rất mạnh, đặc biệt là trong các thiết bị nhúng mạnh như Wireless
router hoặc hệ thống định vị GPS. Lý do của điều này là:
 Hệ thống này có cổng để kết nối đến các chip nhúng thông dụng
 Hệ thống cho phép sử dụng lại các đoạn mã sẵn có phổ biến như các trình điều khiển
thiết bị, Web Servers, Firewalls, …
 Việc phát triển hệ thống có thể được tiến hành với một tập nhiều loại đặc tính, chức
năng còn sau đó lúc phân phối sản phẩm, hệ thống có thể được cấu hình để loại bỏ
một số chức năng không cần thiết. Điều này giúp tiết kiệm được những vùng nhớ mà
các chức năng đó chiếm giữ.
 Hệ thống có chế độ người dùng để dễ dàng chạy các ứng dụng và gỡ rối. Nhờ đó, qui
trình phát triển được thực hiện dễ dàng hơn và việc lập trình có tính linh động hơn.
Có nhiều hệ thống nhúng thiếu các yêu cầu chặt chẽ về tính thời gian thực của hệ
thống quản lý. Còn một hệ thống như Embedded Linux có tốc độ đủ nhanh để trả lời cho
nhiều ứng dụng. Các chức năng cần đến sự phản ứng nhanh cũng có thể được đặt vào
phần cứng.
II.

PHẦN MÊM TRONG EMBEDDED LINUX

1. Giới thiệu Linux
Khác với PC thường chạy trên nền hệ điều hành windows hoặc unix, các hệ thống
nhúng có các hệ điều hành nhúng riêng của mình. Các hệ điều hành dùng trong các hệ

nhúng nổi trội hiện nay bao gồm Embedded linux, VxWorks, WinCE, Lynyos, BSD,
Green Hills, QNX và DOS, Embeddde linux hiện đang phát triển mạnh. Năm 2001 hệ
điều hành này chiếm 12% thị phần các hệ điều hành nhúng thì năm 2002 chiếm 27% và


chiếm vị trí số 1. Hiện nay 40% các nhà thiết kế các hệ nhúng cân nhắc đầu tiên sử dụng
Embedded linux cho các ứng dụng mới của mình và sau đó mới đến các hệ điều hành
nhúng truyền thống như VxWorks, WinCE. Các đối thủ cạnh tranh của Embedded linux
hiện nay là các hệ điều hành nhúng tự tạo và windows CE. Sở dĩ Embedded linux có sự
phát triển vượt bậc là do có sức hấp dẫn đối với các ứng dụng giá thành thấp và đòi hỏi
thời gian đưa sản phẩm ra thị trường nhanh. Mặt khác Linux là phần mềm mã nguồn mở
nên bất kỳ ai cũng có thể hiểu và thay đổi theo ý mình. Linux cũng là một hệ điều hành
có cấu trúc module và chiếm ít bộ nhớ trong khi windows không có các đặc tính ưu việt
này. Do thị trường của các sản phẩm nhúng tăng mạnh lên các nhà sản xuất ngày càng sử
dụng các hệ điều hành nhúng để đảm bảo sản phẩm có sức cạnh tranh và Embedded linux
đang là sản phẩm hệ điều hành nhúng có uy tín chiếm vị trí số 1 trong những năm tới.
a) Tổng quan
Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân của hệ điều hành.
Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và của việc phát triển mã nguồn
mở.
Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ông còn là một sinh
viên của Đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng say trong vòng 3
năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm 1994. Bộ phận chủ yếu này được
phát triển và tung ra trên thị trường dưới bản quyền GNU General Public License. Do đó
mà bất cứ ai cũng có thể tải và xem mã nguồn của Linux.
Một cách chính xác, thuật ngữ "Linux" được sử dụng để chỉ Nhân Linux, nhưng tên này
được sử dụng một cách rộng rãi để miêu tả tổng thể một hệ điều hành giống Unix (còn
được biết đến dưới tên GNU/Linux) được tạo ra bởi việc đóng gói nhân Linux cùng với
các thư viện và công cụGNU, cũng như là các bản phân phối Linux. Thực tế thì đó là tập
hợp một số lượng lớn các phần mềm như máy chủ web, các ngôn ngữ lập trình, các hệ

quản trị cơ sở dữ liệu, các môi trường làm việc desktop như GNOME và KDE, và các
ứng dụng thích hợp cho công việc văn phòng như OpenOfficehay LibreOffice.
Khởi đầu, Linux được phát triển cho dòng vi xử lý 386, hiện tại hệ điều hành này hỗ trợ
một số lượng lớn các kiến trúc vi xử lý, và được sử dụng trong nhiều ứng dụng khác nhau
từ máy tính cá nhân cho tới các siêu máy tính và các thiết bị nhúng như là các máy điện
thoại di động.
Ban đầu, Linux được phát triển và sử dụng bởi những người say mê. Tuy nhiên, hiện nay
Linux đã có được sự hỗ trợ bởi các công ty lớn nhưIBM và Hewlett-Packard, đồng thời
nó cũng bắt kịp được các phiên bản Unix độc quyền và thậm chí là một thách thức đối
với sự thống trị của Microsoft Windows trong một số lĩnh vực. Sở dĩ Linux đạt được
những thành công một cách nhanh chóng là nhờ vào các đặc tính nổi bật so với các hệ
thống khác: chi phí phần cứng thấp, tốc độ cao (khi so sánh với các phiên bản Unix độc
quyền) và khả năng bảo mật tốt, độ tin cậy cao (khi so sánh với Windows) cũng như là


các đặc điểm về giá thành rẻ, không bị phụ thuộc vào nhà cung cấp. Một đặc tính nổi trội
của nó là được phát triển bởi một mô hình phát triển phần mềm nguồn mở hiệu quả.
Tuy nhiên, hiện tại số lượng phần cứng được hỗ trợ bởi Linux vẫn còn rất khiêm tốn so
với Windows vì các trình điều khiển thiết bị tương thích với Windows nhiều hơn là
Linux. Nhưng trong tương lai số lượng phần cứng được hỗ trợ cho Linux sẽ tăng lên.
Cơ bản của HĐH có các topic:
- Scheduler và các cơ chế scheduling (dựa trên hệ số ưu tiên của process-priority).
- Virtual Memory+Paging (Bộ nhớ ảo và cơ chế paging).
- Filesystem (Standard I/O).
- Driver (Kernel space/User space).
- Interprocess communication mechanism (các cơ chế giao tiếp giữa các process).
- Interupt (interrupt từ Hardware và interrupt từ software).
b) Điểm mạnh
Trong chúng ta sẽ có rất nhiều người hỏi: "Thế Linux có gì hay ???".
Linux, ngay từ ngày đầu, được tạo ra với 1 suy nghĩ về sự kết hợp cùng Internet. Vì thế

Linux đã đi trước trong việc tạo ra 1 hệ thống : đa người dùng ( multi-user ), đa nhiệm (
multi-tasking ), hỗ trợ nhiều CPU cùng 1 lúc, ... đã và đang đóng góp cho những hệ thống
trọng điểm của Internet ngày nay.
Linux là 1 HĐH mạng theo đúng nghĩa của nó, các dịch vụ telnet, ssh, web, ftp,
firewall... được phát triển từ bản Linux đầu tiên. Cluster - cách ghép nhiều máy tính yếu
thành 1 máy tính mạnh hơn đã có mặt từ nhiều năm trước. Remote Control đã đi trước
windows một bước dài ( dịch vụ này mới có mặt trong Windows XP). Có thể nói Linux
sinh ra cho Network - Networking OS.
Trong quá trình phát triển, Linux đã dần dần rủ bỏ lớp áo cứng ngắt khô khan khó sử
dụng và tiến gần lại với người dùng gia đình bằng GUI ( Graphic User Interface - Giao
diện đồ hoạ người sử dụng ) , quá trình install được đơn giản hoá và tạo những bước dễ
dàng hơn. X-window cùng các Môi Trường Đồ Hoạ ( Desktop-Enviroment ) nổi tiếng
như KDE, GNOME đã giúp cho người sử dụng không còn phải khó khăn với các dòng
lệnh khô khan.
Về phương diện sử dụng, Linux ngày nay đã rất dễ hơn thời sơ khai. Các Distributions
đang đưa Linux vào với mọi người, nhưng phần cho người sử dụng Advance vẫn được
giữ nguyên, bạn có thể Config Linux bằng GUI của các Desktop Enviroment cũng như có
thể dùng Shell command line. Linux rất uyển chuyển tùy theo người sử dụng.
Linux là 1 HĐH bền vững ( Stable ), mức bền vững của Linux được chứng tỏ qua các hệ
thống máy chủ chạy Linux và được mở 24/7 ( 24 giờ - 7 ngày ). ( só sánh với Windows
XP, được coi là hệ thống Windows bền vững nhất, bạn cũng phải Restart sau 2-3 tuần 1
lần ). Mức bền vững của Linux cũng được chứng tỏ qua cách quản lý thiết bị, 1 chương


trình bị Crash trong Linux không thể kéo toàn bộ hệ thống crash theo, bạn chỉ cần tắt
chương trình đó và khởi động lại nó. ( đối với windows, 1 chương trình crash dễ dàng
kéo theo toàn bộ hệ thống windows gục ngã ).
Linux không yêu cầu 1 cấu hình máy tính cực mạnh để chạy, Linux có thể chạy được trên
các CPU từ 100 MHz trở đi cũng như khoảng 300 MB ổ cứng. Hệ thống tưởng như "đồ
bỏ" này vẫn có thể giúp bạn tìm hiểu Linux cũng như làm thành 1 gateway hay proxy,

webserver, fileserver, ...
Hơn hết, Linux được tao ra dưới GPL, nghĩa là Linux hoàn toàn free ( miễn phí ). Free
theo 2 nghĩa: "free-beer" ( bia miễn phí ) và "freedom" ( tự do ). Free-beer: Trong thực tế,
free-beer không có nghĩa là hoàn toàn free, bạn sẽ được free beer nhưng bù lại sẽ phải trả
1 cái gì đó. Linux cũng thế, thực tế bạn sẽ phải tốn tiền internet để download Linux, hay
phải mua CD để chứa Linux, hay phải mua từ các cửa hàng bán đĩa CD ( tất nhiên chỉ với
giá của đĩa trắng + giá tiền cồng ).
 Freedom: đúng, khi có Linux trong tay, bạn có thể tự do mở mã nguồn của Linux,
khoả sát từng dòng lệnh của Linux để học tập, cũng như bạn có quyền tự do sửa đổi
Kernel hay nguồn của các phần mềm GPL để phù hợp với ý thích của bạn. Tất nhiên
sẽ có 1 số qui định nhỏ, nhưng các quy định này không nằm ngoài mục đích giúp cho
tên tuổi người viết đầu tiên không bị nhầm lẫn thôi. Cuối cùng giá của Linux là $ 0.00
. Bạn có thể copy 1 bộ Linux và gửi cho bạn mình mà không sợ bị FBI ( Female Body
Inspector ) đến rờ gáy vì CopyRight, Linux chính là FBI ( For a Better Internet ).
 Mã nguồn mở: có thể tìm hiểu tất cả các thành phần tạo nên hệ điều hành, từ nhân hệ
điều hành đến các tầng trên => giúp cho người học và làm việc với Linux nâng cao
kiến thức về hệ thống rất nhiều. Ví dụ như ở trường các bạn đều có học Kiến trúc máy
tính, hệ điều hành, vi xử lý với rất nhiều khái niệm khác nhau thì khi làm việc và làm
quen với mã của Linux các bạn sẽ hiểu rõ hơn rất nhiều.
 Free: các bạn có thể sử dụng để làm thương mại mà không phải lo gì, trong khi các hệ
điều hành khác phải mất phí, ví như uC/OS-ii cũng được dùng rất nhiều, dùng để
nghiên cứu thì thoải mái nhưng muốn làm ra sản phẩm thì phải mua bản quyền.
 Tính đa nền: học Linux giúp bạn có thể làm việc trên mọi nền tảng, Desktop, Mobile,
các thiết bị dân dụng, công nghiệp ...
 Cộng đồng phát triển rộng: có nhiều người cùng học tất nhiên chúng ta sẽ dễ hỏi và dễ
trao đổi hơn rất nhiều.
 Tính phổ biến: Linux được phát triển dựa trên thiết kế của Unix nên khi đã làm Linux
mình nghĩ bạn sẽ dễ dàng làm quen với một số hệ điều hành khác, ngay cả hệ điều
hành trên máy Mac mình cũng sử dụng các lệnh gần giống hệt như Linux, cách tổ
chức hệ thống cũng giống.

c) Điểm yếu


Đúng, chúng ta thích thế mạnh của Linux nhưng cũng không phải bỏ qua điểm yếu
chết người của Linux.
Tuy các Distribution đã có bước tiến dài trong việc đưa Linux xuống cho người sử
dụng bình thường ( Home-User ) nhưng Linux dường như vẫn có khoảng cách xa lạ,
không thân thiện như windows.
Vì Linux miễn phí nên những nhà sản xuất phần cứng đôi lúc muốn giữ bí mật về
phần cứng của mình, vì thế những thông tin cần thiết để viết chương trình điểu khiển
thiết bị phần cứng không được thông báo. Điều này dẫn tới Linux không thể hỗ trợ nhiều
phần cứng như Windows. Việc kiểm tra HCL ( Hardware Compatibility List - Danh sách
Phần cứng tương thích ) là cực kì cần thiết trước khi cài đặt 1 hệ thống Linux, bạn có thể
có một thiết bị không hoạt động nếu bạn không chắc chắn vấn đề này. ( Tới thời điểm
này: hầu hết các phần cứng thiết bị PC thông thường đã được Linux hỗ trợ ).
Vấn đề tiếp theo đó là Game, các game lớn hiện nay tuy đã phát triển phiên bản cho
Linux, nhưng cũng chỉ dừng lại ở mức độ của Quack III Arena, The Sim, ... bạn vẫn sẽ
phải sử dụng windows nếu bạn là Gamer.
2. Linux Kernel
a) Kiến trúc nhân

Nhân là 1 phần mềm đảm trách chức vụ liên lạc giữa các chương trình ứng dụng máy
tính và phần cứng. Cung cấp các chứng năng như: quản lý file, quản lý bộ nhớ ảo, các
thiết bị nhập xuất nhưng ổ cứng, màn hình, bàn phím, .... Nhưng Nhân Linux chưa phải
là 1 HĐH, vì thế nên Nhân Linux cần phải liên kết với những chương trình ứng dụng
được viết bởi tổ chức GNU tạo lên 1 HĐH hoàn chỉnh: HĐH Linux. Đây cũng là lý do
tại sao chúng ta thấy GNU/Linux khi được nhắc đến Linux.


Tiếp theo, 1 công ty hay 1 tổ chức đứng ra đóng gói các sản phẩm này ( Nhân và

Chương trình ứng dụng ) sau đó sửa chữa một số cấu hình để mang đặc trưng của công
ty/ tổ chức mình và làm thêm phần cài đặt ( Installation Process ) cho bộ Linux đó,
chúng ta có : Distribution. Các Distribution khác nhau ở số lượng và loại Software được
đóng gói cũng như quá trình cài đặt, và các phiên bản của Nhân. 1 số Distribution lớn
hiện nay của Linux là : Debian, Redhat, Mandrake, SlackWare, Suse, ...
Khái niệm kernel ở đây nói đến những phần mềm, ứng dụng ở mức thấp (low-level)
trong hệ thống, có khả năng thay đổi linh hoạt để phù hợp với phần cứng. Chúng tương
tác với tất cả ứng dụng và hoạt động trong chế độ user mode, cho phép các quá trình
khác – hay còn gọi là server, nhận thông tin từ các thành phần khác qua inter-process
communication (IPC).
Về bản chất, có nhiều cách để xây dựng cấu trúc và biên dịch 1 bộ kernel nhất định từ
đầu. Nhìn chung, với hầu hết các kernel hiện nay, chúng ta có thể chia ra làm 3
loại: monolithic, microkernel, và hybrid. Linux sử dụng kernel monolithic trong khi OS
X (XNU) và Windows 7 sử dụng kernel hybrid.
Linux kernel cung cấp một giao diện giữa các ứng dụng người dùng, hệ thống phần
cứng và tài nguyên. Một vài chức năng của Linux là:






Quản lý bộ nhớ
Quản lý hệ thống file
Xử lý các lỗi và ngắt
Thực hiện các dịch vụ I/O
Cấp phát tài nguyên hệ thống cho các người dùng

Phiên bản 3.7 là nhân Linux mới nhất hiện nay.



Microkernel:
Microkernel có đầy đủ các tính năng cần thiết để quản lý bộ vi xử lý, bộ nhớ và IPC.
Có rất nhiều thứ khác trong máy tính có thể được nhìn thấy, tiếp xúc và quản lý trong chế
độ người dùng. Microkernel có tính linh hoạt khá cao, vì vậy bạn không phải lo lắng khi
thay đổi 1 thiết bị nào đó, ví dụ như card màn hình, ổ cứng lưu trữ... hoặc thậm chí là cả
hệ điều hành. Microkernel với những thông số liên quan footprint rất nhỏ, tương tự với
bộ nhớ và dung lượng lưu trữ, chúng còn có tính bảo mật khá cao vì chỉ định rõ ràng
những tiến trình nào hoạt động trong chế độ user mode, mà không được cấp quyền như
trong chế độ giám sát - supervisor mode.
Ưu điểm:
 Tính linh hoạt cao.
 Bảo mật.
 Sử dụng ít footprint cài đặt và lưu trữ.
Nhược điểm:
 Phần cứng đôi khi “khó hiểu” hơn thông qua hệ thống driver.
 Phần cứng hoạt động dưới mức hiệu suất thông thường vì các trình điều khiển ở
trong chế độ user mode.
 Các tiến trình phải chờ đợi để được nhận thông tin.
 Các tiến trình không thể truy cập tới những ứng dụng khác mà không phải chờ đợi.
Monolithic Kernel:
Với Monolithic thì khác, chúng có chức năng bao quát rộng hơn so với microkernel,
không chỉ tham gia quản lý bộ vi xử lý, bộ nhớ, IRC, chúng còn can thiệp vào trình điều
khiển driver, tính năng điều phối file hệ thống, các giao tiếp qua lại giữa server...
Monolithic tốt hơn khi truy cập tới phần cứng và đa tác vụ, bởi vì nếu 1 chương trình
muốn thu thập thông tin từ bộ nhớ và các tiến trình khác, chúng cần có quyền truy cập
trực tiếp và không phải chờ đợi các tác vụ khác kết thúc. Nhưng đồng thời, chúng cũng là
nguyên nhân gây ra sự bất ổn vì nhiều chương trình chạy trong chế độ supervisor mode
hơn, chỉ cần 1 sự cố nhỏ cũng khiến cho cả hệ thống mất ổn định.
Ưu điểm:

 Truy cập trực tiếp đến các phần cứng.
 Dễ dàng xử lý các tín hiệu và liên lạc giữa nhiều thành phần với nhau.
 Nếu được hỗ trợ đầy đủ, hệ thống phần cứng sẽ không cần cài đặt thêm driver
cũng như phần mềm khác.


 Quá trình xử lý và tương tác nhanh hơn vì không cần phải chờ đợi.
Nhược điểm:
 Tiêu tốn nhiều footprint cài đặt và lưu trữ.
 Tính bảo mật kém hơn vì tất cả đều hoạt động trong chế độ giám sát - supervisor
mode.
Hybrid Kernel:
Khác với 2 loại kernel trên, Hybrid có khả năng chọn lựa và quyết định những ứng
dụng nào được phép chạy trong chế độ user hoặc supervisor. Thông thường, những thứ
như driver và file hệ thống I/O sẽ hoạt động trong chế độ user mode trong khi IPC và các
gói tín hiệu từ server được giữ lại trong chế độ supervisor. Tính năng này thực sự rất có
ích vì chúng đảm bảo tính hiệu quả của hệ thống, phân phối và điều chỉnh công việc phù
hợp, dễ quản lý.
Ưu điểm:
 Các nhà phát triển có thể chọn và phân loại những ứng dụng nào sẽ chạy trong chế
độ thích hợp.
 Sử dụng ít footprint hơn so với monolithic kernel.
 Có tính linh hoạt và cơ động cao nhất.
Nhược điểm:
 Có thể bị bỏ lại trong quá trình gây treo hệ thống tương tự như với microkernel.
 Các trình điều khiển thiết bị phải được quản lý bởi người dùng.
Kernel Linux là phần mềm cơ bản nhất của hệ thống Linux. Nó quản lý các phần
cứng trống trong hệ thống.
Kernel Linux xử lý hệ thống cho các chương trình và truy cập gián tiếp vào các thiết
bị phần cứng. Đặc biệt, Kernel Linux có thể truy cập vào tài nguyên hệ thống mà không

cần giao tiếp trực tiếp với phần cứng.
Cấu hình Kernel cho phép loại bỏ những hỗ trợ không cần thiết, và ngược lại, nó có
thể hỗ trợ thêm một thiết bị ngoại vi đặc biệt.
Trong lĩnh vực hệ thống nhúng, Linux kernel 2.6 đã giúp Linux trở thành đối thủ cạnh
tranh lớn cho nhà cung cấp RTOS như VxWorks và WinCE.
Linux kernel 2.6 nhiều tính năng mới cải tiến giúp hệ điều hành tốt hơn như:


 Tăng cường hiệu quả thời gian thực. Nó có thể đáp ứng được các nhu cầu nghiêm
ngặt về thời gian. Ví dụ: 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.
 Porting dễ dàng hơn.
 Hỗ trợ cho các mô hình bộ nhớ lớn, hỗ trợ cho vi điều khiển.
 Cải tiến hệ thống lịch trình I/O.
 Hỗ trợ các phần cứng mới.
 Tạo kiến trúc phụ. Nó thây đổi cấu trúc đã có thành một cấu trúc riêng.
Ngoài ra, Linux kernel 2.6 hỗ trợ một số vi điều khiển không có đơn vị quản lý bộ nhớ,
hỗ trợ các bộ vi xử lý m68k Motorola, Dragonball, ColdFire, Hitachi…


Tại sao Nhân Linux viết bằng C mà không phải là C++?
Những lý do nào về nhân Linux (nói chung cả Unix, bao gồm Solaris) được viết bằng
C mà không phải là C++. Trong khi C++ là một ngôn ngữ tốt hơn C về các khái niệm
hướng đối tượng. Tại sao kernel hay hầu hết các hệ thống CSDL phổ biến được viết bằng
ngôn ngữ C thay vì bằng C++.

Linus đã bắt đầu với với chiếc máy 386, hệ điều hành Minix, và trình biên dịch gcc.
C được dùng để thay thế Assembly bởi nhiều lý do như khả năng bảo trì mã, khả
năng đọc, tính hiệu quả…
Cách đây nhiều năm, những nhà phát triển kernel đã cố gắng dùng g++ để biên dịch
nhân Linux và thấy rằng kernel chạy chậm hơn so với khi được biên dịch bằng gcc (nhiều
người đã nghĩ rằng tốc độ sẽ là như nhau); và rồi họ chẳng muốn thực hiện điều này một
lần nào nữa.
Về bối cảnh lịch sử, Thompson và Ritchie đã phát triển UNIX bằng cách sử dụng một số
khái niệm từ Multics và CTSS. ( ) Bao gồm việc
thực hiện hầu hết các hoạt động bằng một ngôn ngữ bậc cao hơn (Unix – C, Multics –
PL/I), đặt tên các command thông thường, v.v.. Bạn hãy tham khảo:
/>

Trong đó mô tả sự phát triển sớm của UNIX bao gồm việc chuyển đổi từ Assembly
trên PDP-7 thành C trên PDP-11. (gần cuối trang).
Xây dựng từ những cơ sở đó, UNIX từ AT&T đã mở rộng việc phân phối và được
tiến hành bởi hàng ngàn người là một hệ điều hành dựa trên C. Trong những năm 1970 và
1980, một sự thay thế cho việc phân phối của AT&T đã được phát triển tại UC Berkeley.
Xem:
/>Cho một lời giải thích ngắn liên quan tới sự phát triển của BSD. Các phiên bản cuối
cùng của BSD đã không sử dụng bất kỳ cơ sở mã nguồn nào của AT&T, ngoại trừ việc
thực hiện chúng bằng C. Cuối bài viết là danh sách một vài hậu duệ của BSD bao gồm cả
SunOS (hiện nay là Solaris).
Điều đó không phải để nói rằng ứng dụng được thực hiện tốt hơn bằng ngôn ngữ
hướng đối tượng như là C++. Nhưng có một số giao diện người dùng đồ họa (GUI) chẳng
hạn như KDE thì được viết bằng C++. Tuy nhiên, có những ứng dụng thì phù hợp hơn
với ngôn ngữ hướng thủ tục, về điểm này thì hệ điều hành cũng nằm trong loại đó.
b) Đặc điểm chính của nhân Linux
Điểm mạnh chính




Di động và hỗ trợ phần cứng.Chạy trên hầu hết tất cả kiến trúc.
Khả năng mở rộng,có khả năng chạy trên các thiết bị nhỏ cũng như các siêu máy
tính.
• Tuân thủ các tiêu chuẩn và có khả năng tương tác.
• Hỗ trợ đầy đủ kết nối mạng.
• Bảo mật.Nó không thể che giấu các khiếm khuyết.Mã của nó được xem xét bởi nhiều
chuyên gia.
• Tính ổn định và độ tin cậy.
• Hệ modul,có thể bao gồm những gì hệ thống cần ngay cả thời gian thực thi.

Chương trình đơn giản,bạn có thể học hỏi ngay từ mã hiện tại.Cũng có rất nhiều
tài nguyên trên mạng rất hữu ích cho các bạn.
Lời gọi hệ thống (System Calls)




Giao diện chính giữa hạt nhân và không gian người dùng được thiết lập các hệ thống
cuộc gọi.
Giao diện hệ thống cuộc gọi được bao bọc bởi thư viện C và ứng dụng không gian
người dùng không bao giờ thực hiện được cuộc gọi hệ thống trực tiếp.
Có khoảng 300 hệ thống các cuộc gọi cung cấp dịch vụ hạt nhân chính


o Tập tin và thiết bị hoạt động, hoạt động kết nối mạng,giao tiếp giữa các quá
trình, tiến trình quản lý, bản đồ bộ nhớ.......
o Hệ thống này khá ổn định theo thời gian:các hệ thống cuộc gọi mới chỉ được
thêm vào bởi người phát triển hệ thống.

Kích thước nhân Linux





Linux 3.1:

Kích thước:434MB(39,400 file, khoảng 14,800,000 dòng)

gzip nén lưu trữ tar: 93 MB

bzip2 nén lưu trữ tar : 74 MB (tốt)

xz nén lưu trữ tar : 62 MB (tốt nhất)
Kích thước biên dịch tối thiểu hạt nhân Linux 2.6.29 là CONFIG_EMBEDDED ,hạt
nhân khởi động là QEMU PC( ổ cứng IDE,hỗ trợ thực thi ELF).
Tại sao kích thước lớn như vậy?

Bởi vì chúng bao gồm 1000 điều khiển thiết bị,nhiều giao thức kết nối
nhiều kiến trúc......


mạng,hỗ trợ

Lõi của Linux là khá nhỏ

c) File System
Trong hệ điều hành Linux, những tập tin mà người sử dụng nhìn thấy được đều theo
cấu trúc cây thư mục, vớiroot nằm ở trên cùng. Từ điểm này các thư mục và tập tin mới



mọc nhánh ra lan dần xuống phía dưới. Thư mục cao nhất, được ký hiệu bằng vạch /,
được gọi là root directory (thư mục gốc).
Với người sử dụng bình thường thì cây thư mục này là một dải những tập tin và thư
mục nối liền nhau. Trên thực tế, nhiều thư mục trong cây thư mục này nằm ở nhiều vị trí
vật lý khác nhau, trên các partition khác nhau, và thậm chí trên các ổ đĩa khác nhau. Khi
một trong các partition ấy được kết nối với cấu trúc cây tại một thư mục gọi là mount
point (điểm kết nối, điểm lắp ráp), thì mount point này và tất cả các thư mục cấp dưới
được gọi là file system.
Hệ điều hành Linux hình thành từ nhiều thư mục và tập tin khác nhau. Các thư mục
có thể lập thành nhiều file system khác nhau, tùy vào cách cài đặt bạn đã chọn. Nhìn
chung, đa phần hệ điều hành nằm ở hai file system: root file system (file system gốc)
được ký hiệu là /, và một file system khác được kết nối theo /usr (đọc là user).
Khi dùng lệnh cd / để chuyển về thư mục gốc và gọi hiển thị danh sách thư mục, bạn
sẽ thấy nhiều thư muc. Những thư mục này tạo thành nội dung của root file system, đồng
thời cung cấp mount point cho các file system khác
Thư mục /bin chứa các chương trình thi hành được, còn gọi là các binaries (nhị phân).
Chúng là chương trình hệ thống chủ yếu. Nhiều lệnh của Linux, chẳng hạn như ls, là các
chương trình nằm tại các thư mục ấy.
Thư mục /sbin chứa các file nhị phân hệ thống. Hầu hết các tập tin ở đây dùng để
quản trị hệ thống. (superuser-bin).
Thư mục /etc rất quan trọng vì chứa nhiều file cấu hình Linux. Chúng giúp cho hệ
thống máy bạn có "cá tính". File mật khẩu passwdnằm ở thư mục này, cũng như fstab ,
danh sách các file system cần nạp vào khi khởi động máy. Ngoài ra thư mục còn chứa các
script khởi động cho Linux, danh sách các host kèm địa chỉ IP, cùng với nhiều thông tin
cấu hình khác.
Các thư viện dùng chung được chứa trong thư mục /lib. Khi dùng chung thư viện,
nhiều chương trình sẽ sử dụng lại cùng loại mã, hơn nữa khi được chứa cùng chỗ, thư
viện sẽ giúp giảm thiểu kích cỡ chương trình ở khía cạnh thời gian chạy.

Thư mục /dev chứa các file đặc biệt gọi là device files (file thiết bị, được hệ thống sử
dụng để chạy các phần cứng. Ví dụ file/dev/mouse sẽ đọc thông tin từ chuột. Khi tổ chức
sử dụng phần cứng theo cách này, Linux làm cho việc tương tác với phần cứng trông
giống như một phần mềm. Điều này có nghĩa là trong nhiều trường hợp, bạn có thể dùng
cú pháp như khi dùng với directory của mình trên đĩa mềm, ta có thể dùng lệnh: tar -cdf
/dev/fd0 tackett . /dev/fd0 chỉ cho lệnh tar biết phải dùng đĩa mềm. Nhiều thiết bị trong
thư mục /dev được tập hợp thành nhóm logical.
Bảng 1.1: Các thiết bị thường dùng chứa trong thư mục /dev
File thiết bị Description
Bàn giao tiếp hệ thống, là màn hình nối kết vật lý
/dev/console
với hệ thống
Giao diện driver cho các ổ cứng IDE. Thiết bị
/dev/hd*
/dev/hda1 chỉ partition đầu tiên trên ổ cứng had.
Thiết bị /dev/had chỉ toàn bộ ổ cứng hda.


Giao diện driver cho các ổ đĩa SCSI. Những ổ đĩa
/dev/sd*
và partition này có cùng quy ước với thiết bị IDE
/dev/hd*.
Driver thiết bị hỗ trợ đĩa mềm. Ổ đĩa mềm đầu
/dev/fd*
tiên là /dev/fd0, ổ thứ hai là /dev/fd1.
/dev/st*
Driver thiết bị cho ổ cứng băng từ SCSI.
Driver cung cấp nhiều loại thiết bị giao tiếp khác
nhau cho user nhập liệu. Sở dĩ viết tắt là tty bởi vì
trước kia các terminal dạng teletype đều móc nối

/dev/tty*
với hệ điều hành UNIX. Với Linux, những tập tin
này hỗ trợ các thiết bị giao tiếp ảo, mà bạn có thể
truy cập bằng cách bấm từ cho đến . Thiết bị giao
tiếp ảo cho phép nhiều user đăng nhập cùng lúc.
Driver hỗ trợ terminal giả, dùng cho việc đăng
/dev/pty*
nhập từ xa, chẳng hạn như những phiên đăng
nhập qua Telnet.
Các cổng giao diện nối tiếp trên máy bạn. File
/dev/ttyS0 tương ứng COM1 của MS-DOS. Nếu
/dev/ttyS* bạn sử dụng chuột nối tiếp, thì file /dev/mouse là
một liên kết tượng trưng, nối với thiết bị ttyS
tương ứng (Chuột nối kết với thiết bị này.)
/dev/cua* Các thiết bị đặc biệt gọi ra ngoài dùng với modem
Một thiết bị rất đặc biệt, chủ yếu là một lỗ đen.
Tất cả các dữ liệu ghi vào /dev/null xem như bị
mất vĩnh viễn. Việc này hữu ích khi bạn muốn
/dev/null
chạy một câu lệnh và thủ tiêu stdout hoặc stderr.
Và nếu /dev/null dùng làm file nhập, bạn sẽ tạo ra
một file có độ dài zero.
Thư mục /proc là một file system ảo, dùng để đọc thông tin từ bộ nhớ.
Thư mục /tmp chứa các file tạm mà chương trình tạo ra trong khi chạy. Nếu bạn biết
hệ thống máy mình có chương trình tạo ra nhiều file tạm với kích cỡ lớn, bạn nên tạo thư
mục /tmp thành một file system riêng thay vì đặt nó vào file system gốc như là một thư
mục bình thường. Bởi vì với đà chất chứa các file tạm ngày càng nhiều, file system gốc
sẽ nhanh chóng bị đầy.
Thư mục /home là thư mục cơ sở của các home directory cho các user. Quản trị viên
thường đặt /home thành file system riêng rẽ nhằm tạo nhiều khoảng trống cho user sử

dụng. Ngoài ra nếu hệ thống máy bạn có nhiều user, bạn nên chia thư mục /home thành
nhiều file system khác nhau. Ví dụ bạn có thể tạo ra /home/vnexperts cho các thành viên


của nhóm điều hành của công ty và/home/admin cho quản trị viên. Mỗi thư mục như thế
sẽ là một file system riêng, bên dưới có home directory riêng cho các user tương ứng.
Thư mục /var lưu các file có thể thay đổi kích thước theo thời gian. Nhiều file đăng
nhập hệ thống (system log file) thường nằm trong thư mục này. Thư mục /var/spool cùng
với các thư mục con dùng để chứa dữ liệu như tin tức hoặc thư tín mới nhận được, hoặc
giả đang chờ gửi đi nơi khác.
Thư mục /usr và các thư mục con rất quan trọng cho hệ thống Linux, bởi vì chứa
đựng nhiều thư mục trong đó có những chương trình cần thiết nhất cho hệ thống. Những
thư mục cấp dưới của /usr chứa các gói phần mềm lớn mà bạn đã cài đặt. Bảng 1.2 giới
thiệu một số thư mục cấp dưới của /usr. Ở hầu hết mọi trường hợp thư mục /usr được
thiết lập như là một file system riêng rẽ.
Bảng 1.2 Các thư mục thứ cấp quan trọng trong file system /usr.
Thư mục thứ
cấp
/usr/bin
/usr/etc

/usr/include

/usr/g++include

Description
Lưu nhiều file thi hành của hệ thống.
Lưu nhiều file cấu hình hệ thống
Tại đây và trong nhiều thư mục cấp dưới của
/usr/include là nơi lưu tất cả các file kèm theo

bộ biên dịch C. Những file header này định
nghĩa các hằng và hàm dùng trong lập trình
bằng C.
Lưu các file kèm theo bộ biên dịch C.

Chứa các thư viện để chương trình sử dụng
trong khi kết nối
Chứa các trang thủ công cho chương trình.
/usr/share/man Bên dưới /usr/share/man là nhiều thư mục
tương ứng với các đoạn trong trang man.
Driver hỗ trợ terminal giả, dùng cho việc đăng
/dev/pty*
nhập từ xa, chẳng hạn như những phiên đăng
nhập qua Telnet.
Chứa các thư mục mã nguồn của nhiều chương
trình trên hệ thống. Nếu nhận được gói phần
/usr/src
mềm chờ cài đặt, bạn nên lưu vào /usr/src/têngói trước khi cài đặt.
Dành riêng cho việc thiết kế hoặc tùy chỉnh
/usr/local
các ứng dụng cho phù hợp với hệ thống máy
/usr/lib


×