LỜÌ NÓÌ ĐAỤ Hệ điều hành Operating System-OS là một phần mềm chạy trên máy tính và cácthiết bị di động ,dùng để điều hành,quản lý các thiết bị phần cứng và các tài nguyên phầnmềm trên má
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN
HỆ ĐIỀU HÀNH
Đề tài:
Tìm Hiểu Về Biên Dịch Kernel Cấu Hình Lại Trên Một Hệ Điều Hành
Nhân Unix Để Cài Đặt Trên Máy Chưa Có Hệ Điêu Hành
Giảng Viên Hướng Dẫn: TS Phạm Doãn Tĩnh Nhóm:10
Trần Văn Huyện 20153
Nguyễn Thanh Lộc 20152304
Nguyễn Sĩ Khiêm 2015
Nguyễn Văn Thanh 20153332
Nguyễn Anh Tuấn
Hà Nội, 11-2019 He
1
Trang 2LỜI NHẬN XÉT CỦA GIẢNG VIÊN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Hà Nôi,Ngày tháng năm 2019 Giảng Viên
Trang 3MỤC LỤC
MỤC LỤC 3
DANH MỤC HÌNH ẢNH 4
DANH MỤC BẢNG BIỂU 5
PHẦN A LỜI NÓI ĐẦU 5
PHẦN B.NỘI DUNG 7
Chương I.Cơ sở lý thuyết 7
1.1.Hệ điều hành nhân unix/linux 8
1.1.1 Hệ điều hành nhân unix 8
1.2.Kernel 10
1.2.1 Cấu trúc 10
1.2.2 Hoạt động của kernel 13
Bộ nhớ RAM chứa các lệnh/dữ liệu dạng nhị phân của Linux kernel và các tiến trình RAM được chia làm 2 miền 13
Chương II.Cài đặt 17
2.1 Biên dịch và cài đặt kernel 17
2.2 Tùy chỉnh file ISO bằng phần mềm cubic 21
PHẦN C KẾT LUẬN 25
PHẦN D.DANH MỤC TÀI LIỆU THAM KHẢO 26
Trang 4DANH MỤC HÌNH ANH
Hình 1 1 Kiến trúc của kernel đứng ở góc độ quản lý 10
Hình 1 2 kiến trúc của linux kernel đứng ở góc độ thực thi 13
Hình 1 3 Các chế độ hoạt động của cpu 14
Y Hình 2 1 kiểm tra phiên bản kernel 17
Hình 2 2 giải nén file tar 18
Hình 2 3 Thiết lập cấu hình cho kernel 19
Hình 2 4 Quá trình dịch kernel 20
Hình 2 5 Cài đăt kernel 20
Hình 2 6 Phiên bản kernel sau cài đặt 21
Hình 2 7 Phần mềm cubic 22
Hình 2 8 Chọn file iso 23
Hình 2 9 Cài đặt và loại bỏ phần mềm 23
Hình 2 10 Cài đặt kernel mới 24
DANH MỤC BANG BÌỂỤ
Trang 5PHAN A LỜÌ NÓÌ ĐAỤ
Hệ điều hành (Operating System-OS) là một phần mềm chạy trên máy tính và cácthiết bị di động ,dùng để điều hành,quản lý các thiết bị phần cứng và các tài nguyên phầnmềm trên máy tính và các thiết bị di động Hệ điều hành quản lý các tài nguyên máy tínhbao gồm:Các thiết bị đầu vào như bàn phím và chuôt, Các thiết bị đầu ra như màn hìnhhiển thị, máy in và máy quét, Các thiết bị mạng như modem, bộ định tuyến và kết nốimạng, Các thiết bị lưu trữ như ổ đĩa trong và ngoài Hệ điều hành cũng cung cấp các dịch
vụ để tạo thuận lợi cho việc thực hiện và quản lý hiệu quả và phân bổ bộ nhớ cho bất kỳchương trình ứng dụng phần mềm được cài đặt bổ sung nào
Hệ điều hành bao gồm nhiều thành phần và tính năng Những tính năng nào đượcđịnh nghĩa là một phần của hệ điều hành sẽ khác nhau tùy theo từng hệ điều hành Tuynhiên, ba thành phần dễ dàng xác định nhất là:
Kernel: Kernel cung cấp các điều khiển mức cơ bản trên tất cả các thiết bị phầncứng máy tính Các vai trò chính bao gồm: đọc dữ liệu từ bộ nhớ và ghi dữ liệuvào bộ nhớ, xử lý các lệnh thực hiện, xác định cách dữ liệu được nhận và gửibởi các thiết bị như màn hình, bàn phím, chuột và xác định cách diễn giải dữliệu nhận được từ mạng
Giao diện người dùng: User Interface cho phép việc tương tác với người dùngthông qua các graphical icons và một desktop hoặc thông qua một commandline
Giao diện lập trình ứng dụng: Application Programming Interfaces cho phépcác application developers viết modular code
Các thành phần của hệ điều hành rất phức tạp , trong khuôn khổ một bài tập lớnchúng em chỉ tập trung vào việc tiềm hiểu nhân kernel là thành phần trung tâm của hệ
điều hành.Vì vậy chúng em lựa chọn đề tài “Tìm Hiểu Về Biên Dịch Kernel Cấu Hình Lại Trên Một Hệ Điều Hành Nhân Unix Để Cài Đặt Trên Máy Chưa Có Hệ Điêu Hành” Trong thời gian tìm hiểu và làm đề tài dựa vào kiến thức đã được học ở
Trang 6trường, qua một số sách, tài liệu có liên quan cùng với sự giúp đỡ tận tình của thầy
cô giáo,các bạn và đặc biệt là với sự hướng dẫn tận tình của thầy Phạm Doãn Tĩnh
Mặc dù đã cố gắng hoàn thành nhưng với kinh nghiệm và khả năng còn hạn chếnên chúng em không thể tránh khỏi những sai sót và nhầm lẫn, vì vậy chúng em rấtmong các thầy, cô giáo cùng các bạn đóng góp những ý kiến quý báu để chúng em
có thể hoàn thiện đề tài này
Chúng em xin chân thành cảm ơn!
Trang 7PHAN B.NÓÌ DỤNG
Chương I.Cơ sở lý thuyết
1.1.Hệ điều hành nhân unix/linux
1.1.1 Hệ điều hành nhân unix
Unix hay Unix là một hệ điều hành tính viết vào những năm 1960 và 1970 do một sốnhân viên của công ty AT&T Bell Labs bao gồm Ken Thompson,Dennis Ritchie vàDouglas Mcllroy.Từ góc nhìn người dùng chuyên nghiệp và lập trình viên,Hệ thốngUnix có đặc điểm là thiết kế theo module,đôi khi còn gọi là triết lý Unix,nghĩa là hệ điềuhành cung cấp một tập hợp các công cụ đơn giản,mỗi công cụ chỉ thực hiện những chứcnăng giới hạn và được định nghĩa rõ ràng ,với hệ thống file hợp nhất là phương tiện chính
để giao tiếp và phần lập trình vỏ và ngôn ngữ lệnh để kết hợp các công cụ để thực hiệnchức năng phức tập,Ngày nay hệ điều hành Unix được phân ra thành nhiều nhánh khácnhau,nhánh của AT&T,nhánh của một số nhà phân phối thương mại và nhánh của những
tổ chức phi lợi nhuận.Unix có thể chạy trên nhiều loại máy tính khác nhau,,từ những máytính cá nhân cho đến các máy chủ dịch vụ.Nó là một hệ điều hành đa nhiệm hỗ trợ mộtcách lý tưởng đối với các ứng dụng nhiều người dùng.Unix được viết bằng ngôn ngữ lậptrình C,một ngôn ngữ rất mạnh và mềm dẻo.Unix hỗ trợ các ứng dụng mạng và hỗ trợnhiều môi trường lập trình khác nhau.Với hàng trăm lệnh và một số lượng lớn các tùychọn,Unix thực sự là một khó khăn đối với người mới bắt đầu.Với sự phát triển của cácshell Unix hệ điều hành này đã trở nên phổ dụng hơn trong các lĩnh vực điện toán
Vì Bell Laboratories bị cấm không cho phép tiếp thị Unix vì lệnh chống độc quyềnđối với AT&T nên Unix đã được cung cấp miễn phí cho các trường đại học trên toàn Bắc
Mỹ từ năm 1976.Sau khi đã được ưa thích trong các lĩnh vực công nghệ,AT&T đã giànhđược quyền tiếp thị đối với Unix và cho ra đời System V vào năm 1983.Cho đến nayUnix vẫn được sử dụng rất rộng rãi trong thị trường máy chủ
1.1.2 Hệ điều hành nhân linux
Trang 8Linux là một hệ điều hành nguồn mở dựa trên Unix Nói một cách chính xác, thuậtngữ “Linux” được sử dụng để chỉ nhân Linux (Linux kernel).Phiên bản đầu tiên do LinuxTorvalds 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ầnLan Ô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ảnLinux 1.0 vào năm 1994 HĐH hoàn chỉnh được dựng lên từ Linux Kernel kết hợp vớicác ứng dụng khác làm việc trên đó thì gọi vắn tắt là Linux OS, các phiên bản biến thể
khác nhau của Linux OS được cộng đồng xây dựng sẵn gọi là các Linux distro, mỗi
Linux distro lại có thể có nhiều version
Hệ điều hành Linux có cả giao diện người dùng đồ họa (GUI) cũng như giao diệndòng lệnh (CLI) KDE và GNOME là 2 môi trường GUI khác nhau của HĐH Linux
Linux thường được phân phối miễn phí, tải xuống miễn phí, nhưng cũng có một sốbản phân phối Linux có phí như Red Hat Linux, nhưng chúng thường rẻ hơn Windows Linux là một hệ điều hành rất linh hoạt và tương thích với hầu hết các hệ thống phầncứng Hệ điều hành Linux có thể được cài đặt và thực thi trên hầu hết mọi thiết bị có bộ
xử lý Vì nó rất linh hoạt và nhanh nhẹn, Linux có thể được cài đặt trên nhiều loại phầncứng máy tính, từ điện thoại di động, máy tính bảng và máy chơi game, đến máy tính lớn
và siêu máy tính
Linux OS là một HĐH mã nguồn mở, mã nguồn của nó có sẵn miễn phí Do đó, bạn
có thể đọc, sửa đổi và triển khai nó trên máy của mình Tuy nhiên, bạn không thể bán nó
vì nó thuộc Giấy phép GPL GNU
Linux có khả năng mở rộng cao và hỗ trợ một tập hợp lớn các hệ thống file (file
systems) như: xfs, ramfs, nfs, vfat, cramfsm ext3, ext4, ext2, ext1, ufs, autofs, devpts, ntfs… Việc cài đặt Linux nói chung rất kinh tế so với Unix vì nó không yêu cầu phần
cứng đặc biệt để chạy và bản thân hệ điều hành này thì như đã nói, là miễn phí hoặc rấtrẻ
Trang 9Linux có một số các distro sau:
Trang 10Hình 1 Kiến trúc của kernel đứng ở góc độ quản lý
Process management: có nhiệm vụ quản lý các tiến trình, bao gồm các
công việc:
Tạo/hủy các tiến trình
Lập lịch cho các tiến trình Đây thực chất là lên kế hoạch: CPU sẽthực thi chương trình khi nào, thực thi trong bao lâu, tiếp theo làchương trình nào
Hỗ trợ các tiến trình giao tiếp với nhau
Đồng bộ hoạt động của các tiến trình để tránh xảy ra tranh chấp tàinguyên
Memory management: có nhiệm vụ quản lý bộ nhớ, bao gồm các công
việc:
Cấp phát bộ nhớ trước khi đưa chương trình vào, thu hồi bộ nhớ khitiến trình kết thúc
Trang 11 Đảm bảo chương trình nào cũng có cơ hội được đưa vào bộ nhớ.
Bảo vệ vùng nhớ của mỗi tiến trình
Device management: có nhiệm vụ quản lý thiết bị, bao gồm các công việc:
Điều khiển hoạt động của các thiết bị
Giám sát trạng thái của các thiết bị
Trao đổi dữ liệu với các thiết bị
Lập lịch sử dụng các thiết bị, đặc biệt là thiết bị lưu trữ (ví dụ ổcứng)
Networking management: có nhiệm vụ quản lý các gói tin (packet) theo
Khi triển khai thực tế Linux gồm các thư mục sau:
/arch Chứa mã nguồn giúp Linux kernel có thể thực thi được trên nhiều
kiến trúc CPU khác nhau như x86, alpha, arm, mips, mk68,powerpc, sparc,…
/block Chứa mã nguồn triển khai nhiệm vụ lập lịch cho các thiết bị
/drivers Chưa mã nguồn để triển khai nhiệm vụ điều khiển,giám sát,trao
đổi dữ liệu với các thiết bị
/fs Chứa mã nguồn triển khai nhiệm vụ quản lý dữ liệu trên các thiết
bị/ipc Chứa mã nguồn triển khai nhiệm vụ giao tiếp giữa các tiến trình
Trang 12/kernel Chứa mã nguồn triển khai nhiệm vụ lập lịch và đồng bộ hoạt
động của các tiến trình
/mm Chứa mã nguồn triển khai nhiệm vụ quản lý bộ nhớ
/net Chứa mã nguồn triển khai nhiệm vụ xử lý các gói tin theo mô
hình TCP/IP
Bảng 1 Một số thư mục trong mã nguồn của linux kernel
1.2.2 Hoạt động của kernel
Bộ nhớ RAM chứa các lệnh/dữ liệu dạng nhị phân của Linux kernel và các tiến trình.RAM được chia làm 2 miền
Kernel space là vùng không gian chứa các lệnh và dữ liệu của kernel.
User space là vùng không gian chứa các lệnh và dữ liệu của các tiến trình
Hình 1 kiến trúc của linux kernel đứng ở góc độ thực thi
CPU có 2 chế độ thực thi (hình 1.2):
Trang 13 Khi CPU thực thi các lệnh của kernel, thì nó hoạt động ở chế độ kernel mode Khi
ở chế độ này, CPU sẽ thực hiện bất cứ lệnh nào trong tập lệnh của nó, và CPU cóthể truy cập bất cứ địa chỉ nào trong không gian địa chỉ
Khi CPU thực thi các lệnh của tiến trình, thì nó hoạt động ở chế độ user mode.
Khi ở chế độ này, CPU chỉ thực hiện một phần tập lệnh của nó, và CPU cũng chỉđược phép truy cập một phần không gian địa chỉ
Để cho dễ hình dung, ta hãy liên tưởng thế này: CPU giống như bạn, tiến trìnhgiống như công việc của sếp giao cho bạn, còn kernel giống như công việc của vợ giaocho bạn Khi bạn thực thi các việc của sếp, bạn chỉ thực hiện cho xong, không nỗ lực hếtmình, những việc nào mà ảnh hưởng đến quyền lợi của bạn thì bạn không làm Thái độlàm việc này của bạn giống như chế độ user mode của CPU Khi bạn thực thi các việccủa vợ, bạn thực hiện các việc đó toàn tâm toàn ý, nỗ lực hết mình, dù cho đó là việc gì.Thái độ làm việc này của bạn giống như chế độ kernel mode của CPU
Để hiểu rõ hơn, ta xét tiến trình 1 trong hình 1.2 Tiến trình này gồm nhiều lệnh nhịphân, tương ứng với 2 lệnh C CPU sẽ lần lượt lấy các lệnh này ra và thực thi Lệnh thứnhất, "a = 5 + 10", là một lệnh tính toán, sẽ được CPU thực thi ở chế độ user mode Lệnhthứ hai, "printf("%d", a)", là một lệnh vào/ra Hàm "printf" sẽ gọi system call "write" đểyêu cầu Linux kernel in thông tin ra màn hình Khi đó, CPU sẽ chuyển sang chế độ kernelmode để thực thi các lệnh của Linux kernel
Trang 14Hình 1 Các chế độ hoạt động của cpu
Khi một tiến trình cần sử dụng một dịch vụ nào đó của kernel, tiến trình sẽ gọi
một system call System call cũng tương tự như các hàm bình thường khác (library call).
Chỉ có điều, các library call được cung cấp bởi các thư viện trong user space, còn cácsystem call được cung cấp bởi kernel Do đó, khi tiến trình gọi các library call, CPU vẫngiữ nguyên chế độ thực thi user mode Còn khi tiến trình gọi các system call, CPU phảichuyển sang chế độ kernel mode để thực thi các lệnh của kernel (hình 2.3) Lúc này, ta
nói rằng, CPU đang thực thi ở chế độ kernel mode, trong ngữ cảnh process context Sau
khi kernel thực hiện xong yêu cầu, kernel gửi trả kết quả cho tiến trình Lúc này, CPU lạichuyển sang chế độ user mode để thực thi tiếp các lệnh của tiến trình
Ngoài system call, ngắt cũng là một nguyên nhân khiến CPU chuyển chế độ thực thisang kernel mode (hình 5) Khi có một thiết bị muốn trao đổi dữ liệu với CPU, nó sẽ gửimột tín hiệu ngắt tới CPU bằng cách nâng điện áp trên chân INT của CPU Khi đó, CPU
sẽ ngừng thực thi các lệnh của tiến trình lại, chuyển sang chế độ kernel mode rồi thực thimột chương trình đặc biệt của kernel để xử lý tín hiệu ngắt đó Lúc này, ta nói CPU đang
Trang 15thực thi ở chế độ kernel mode, trong ngữ cảnh interrupt context Sau khi xử lý xong,
CPU trở lại chế độ user mode và tiếp tục thực hiện các lệnh tiếp theo của tiến trình
Trang 16Chương II.Cài đặt
2.1 Biên dich và% cà%i đà't kêrnêl
Kiểm tra phiên bản kernel đang dùng: uname –r
Hình 2 kiểm tra phiên bản kernel
Chạy các câu lệnh sau để cài các gói phần mềm cần thiết trong quá trình biên dịch
sudo apt-get update(trước khi cài đặt cần cập nhập index của các package)
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bcflex bison
Truy cập trang kernel.org để tải về phiên bản kernel (trong phần này sẽ là phiên bản5.3.8)
Trang 17Truy cập trang kernel.org để tải về phiên bản kernel (trong phần này sẽ là phiên bản5.3.8)
Tại thư mục tải về, mở terminal và giải nén file vừa tải về bằng lệnh:
tar xvf linux-5.3.8.tar.xz
Hình 2 giải nén file tar
Truy cập thư mục vừa giải nén bằng lệnh: cd linux-5.3.8
Thiết lập cấu hình cho kernel (sử dụng cấu hình của phiên bản đang dùng ):
cp /boot/config-$(uname -r) config
make menuconfig
Trang 18Hình 2 Thiết lập cấu hình cho kernel
Nếu không có gì thay đổi thì lưu lại và thoát
Nếu không có gì thay đổi thì lưu lại và thoát
Dịch kernel (-j$(nproc) là chọn số luồng) :
make -j$(nproc)
Trang 19Hình 2 Quá trình dịch kernel
Cài đặt kernel: sudo make install
Hình 2 Cài đăt kernel
Trang 20Khởi động lại máy: reboot
Sau khi máy khởi động xong thì ta kiểm tra phiên bản kernel: uname –r
Hình 2 Phiên bản kernel sau cài đặt
2.2 Tùy chỉnh file ISO bằng phần mềm cubic
Cài đặt phần mềm Cubic:
apt-add-repository ppa:cubic-wizard/release
apt-key adv keyserver keyserver.ubuntu.com recv-keys 6494C6D6997C215Eapt update && apt install cubic
Trang 21Truy cập trang releases.ubuntu.com để tải file
iso của phiên bản ubuntu cần cài đặt, trong ví dụ này là amd64.iso
ubuntu-18.04.1-desktop-Mở Cubic:
Hình 2 Phần mềm cubic
Chọn thư mục làm việc và nhấn next
Chọn file iso vừa tải về và nhấn next và chờ giải nén
Trang 23cd kernel-5-1
050100_5.1.0-050100.201905052130_all.deb
https://kernel.ubuntu.com/~kernel-050100.201905052130_amd64.deb
ppa/mainline/v5.1/linux-modules-5.1.0-050100-generic_5.1.0-Hình 2 Cài đặt kernel mới