CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 1. Hình thành vấn đề Vào những thập kỷ đầu của thế kỷ 21 này, các hệ thống nhúng đang phát triển mạnh mẽ, với tính năng gần như tương đương với những chiếc máy tính cá nhân, đặc biệt là điện thoại thông minh và các hệ thống hỗ trợ trên xe hơi. Với thị trường tiềm năng ấy, các hệ điều hành hiện giờ cũng đang hướng đến việc hỗ trợ đa nền tảng. Tuy nhiên, khác với máy tính, với những đặc thù về nguồn điện cung cấp và yêu cầu về thời gian, các hệ thống nhúng cần một quá trình khởi động riêng phức tạp hơn.
Cùng với xu hướng đó, các chương trình boot loader hiện nay đang hướng đến việc hỗ trợ nhiều nền tảng khác nhau như các hệ điều hành. Đề tài này nghiên cứu chương trình boot loader hỗ trợ đa nền tảng cho hệ điều hành họ Linux, cũng như những chức năng mà một chương trình boot loader cần có để có thể khởi động hệ điều hành thành công. Lý do chọn đề tài Hiện tại có rất nhiều chương trình boot loader hỗ trợ boot hệ điều hành họ Linux, trong đó Uboot hiện đang được sử dụng rộng rãi nhất trên các hệ thống nhúng. Tuy nhiên khi công nghệ phần cứng không ngừng phát triển và hệ thống nhúng ngày càng phức tạp, việc hiện thực Uboot cho hệ thống mới ngày càng trở nên khó khăn, nhất là phần hiện thực các trình điều khiển.
Kế thừa những ưu điểm về tính dễ hiện thực và hiệu suất của Uboot, Barebox – với tên gọi cũ là Uboot v2, là sự kết hợp của Uboot và mô hình driver của nhân Linux kèm theo hỗ trợ các lệnh truy cập theo chuẩn POSIX File API, giúp những người phát triển đ quen thuộc với Linux dễ dàng nắm bắt và hiện thực hơn, đồng thời Trang 1 Luận văn ngành Khoa học máy tính – Khóa 2009 khắc phục nhược điểm về tính thiếu mô hình chuẩn của trình điều khiển thiết bị trong Uboot. Do kế thừa từ Uboot, những người đ từng làm quen với Uboot cũng sẽ dễ dàng nắm bắt được Barebox. Hơn nữa Barebox cũng có cả hệ thống filesystem - cái mà Uboot thiếu, nên người dùng Barebox cũng dễ dàng truy cập đến dữ liệu hơn mà không cần quan tâm dữ liệu đó trên thiết bị nào, RAM, thẻ SD hay e C,… Hiệu suất của Barebox cũng tốt hơn Uboot đáng kể, qua thực nghiệm, hệ thống sử dụng Barebox chỉ cần 336 ms để boot (trên bo MX35 dùng CPU ARM) [1] trong khi thời gian boot trung bình khi sử dụng Uboot trên một hệ thống tương đương là 1. Những boot loader hỗ trợ tốt nền tảng x86 thường không được thiết kế để hỗ trợ tốt cho hệ thống nhúng, còn những boot loader được thiết kế chủ yếu cho hệ thống nhúng thường chỉ hỗ trợ nền tảng x86 ở mức rất cơ bản.
Barebox được thiết kế chủ yếu cho các hệ thống nhúng nên sẽ có nhiều việc cần làm nếu muốn tạo một phiên bản Barebox hoàn chỉnh có thể boot được Linux trên x86. Hơn nữa với việc hiện thực Barebox trên x86, mọi người có thể dễ dàng làm quen với Barebox mà không cần một hệ thống nhúng và hệ điều hành Linux đặc biệt nào, do x86 là nền tảng phổ biến trên máy tính và những hệ điều hành Linux chạy trên nền tảng x86 đ có sẵn. Do đó luận văn này sẽ tập trung vào đề tài nghiên cứu và hiện thực Barebox trên nền tảng x86. Phạm vi nghiên cứu Đề tài này sẽ giới thiệu về Barebox cũng như phương pháp tạo một boot loader cho nền tảng x86 dựa trên Barebox.
Qua đó sẽ cung cấp tài liệu chi tiết hơn về cách hiện thực Barebox cũng như việc cải tiến chương trình boot loader sau này. Trang 2 Luận văn ngành Khoa học máy tính – Khóa 2009 1. Đối tượng nghiên cứu Chương trình Barebox boot loader và cách thức boot hệ điều hành Linux trên nền tảng x86. Mục tiêu đề tài Mục tiêu đề tài bao gồm hiện thực Barebox chạy trên nền tảng x86 bao gồm các trình điều khiển thiết bị, cấu hình lại Barebox tạo thành hệ thống hoàn chỉnh để có thể boot được Linux kernel.
Phương pháp kiểm thử của phiên bản Barebox mới sẽ là feasibility checking, tức là chỉ kiểm tra các chức năng cơ bản và đảm bảo các trình điều khiển mới trong Barebox có thể hoạt động đúng đắn trong trường hợp bình thường và xử lý được những trường hợp lỗi cơ bản. Ý nghĩa đề tài Đề tài này sẽ giới thiệu về Barebox cũng như phương pháp tạo một boot loader cho hệ thống mới dựa trên Barebox. Barebox là chương trình boot loader rất phù hợp với những người mới tìm hiểu về boot loader, nhất là những người đ làm quen với hệ điều hành Linux do Barebox có mô hình device/ driver sao chép từ Linux kernel và hỗ trợ các lệnh truy cập theo chuẩn POSIX File API. Hơn nữa, do có hệ thống file, việc hiện thực các tính năng mới sẽ dễ dàng hơn vì độc lập với việc hiện thực các trình điều khiển điều đó sẽ làm chương trình luôn nhất quán và dễ bảo trì cũng như mở rộng.
Qua đó sẽ cung cấp chi tiết hơn về cách hiện thực Barebox cũng như việc cải tiến chương trình boot loader sau này. Kết cấu của đề tài Bao gồm 3 phần chính: - Tổng quan về boot loader. - Tổng quan về Barebox. Trang 3 Luận văn ngành Khoa học máy tính – Khóa 2009 - Trình bày cách hiện thực Barebox trên x86.
- Kiểm thử Barebox trên x86 Trang 4 Luận văn ngành Khoa học máy tính – Khóa 2009 CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2. Tổng quan về boot loader Trong hệ thống Linux, quá trình boot được xác định từ lúc hệ thống được bật lên, BIOS (basic input/output system) hoặc MaskROM được chạy, rồi đến bộ nạp khởi động (boot loader) được BIOS/MaskROM nạp lên, và kết thúc khi kernel (nhân Linux) lại được boot loader nạp lên và khởi tạo toàn bộ môi trường hệ điều hành. BIOS/MaskROM Boot loader Linux kernel Hình 2.1 Quá trình boot linux cơ bản BIOS - hệ thống xuất nhập cơ bản hoặc MaskROM, là chương trình (phần dẻo, firmware) được chạy đầu tiên khi hệ thống khởi động. Chức năng chính của BIOS/MaskROM là chuẩn bị để các chương trình phần mềm (như boot loader) được lưu trữ trên các thiết bị lưu trữ (chẳng hạn như ổ cứng, ổ USB, eMMC, NAND, v.v…) có thể được nạp, thực thi và điều khiển hệ thống.
Quá trình này gọi là khởi động. Trên máy tính, khi BIOS khởi động sẽ đọc MBR (Masterboot record) của các thiết bị lưu trữ (512 byte đầu tiên) theo thứ tự ưu tiên do người dùng qui định (Ví dụ: ổ USB, ổ DVD, ổ cứng,…) Nếu BR nào được đánh dấu là boot được, BIOS sẽ thực thi đoạn lệnh được cài trong MBR (446 byte đầu trong MBR) để nạp boot loader lên. Trang 5 Luận văn ngành Khoa học máy tính – Khóa 2009 Hình 2.2 Cấu trúc của MBR [3] Boot loader trên hệ thống nhúng thường gồm có 2 phần, phần đầu tiên được gọi là first-stage boot loader dùng để nạp phần còn lại của boot loader do MaskROM bị giới hạn về dung lượng nạp chương trình (do nhà sản xuất hệ thống qui định). Phần thứ 2 là second-stage boot loader và đây mới là chương trình boot loader thực sự.
Ví dụ tiêu biểu về 2 phần này của boot loader chính là hệ thống của OMAP.3 Minh họa về boot loader của hệ thống OMAP Trang 6 Luận văn ngành Khoa học máy tính – Khóa 2009 U-boot là boot loader thật sự của các hệ thống OMAP, tuy nhiên do kích thức tập tin u-boot.bin vượt quá sự dung lượng hỗ trợ của BIOS, nên cần phải có X-loader (thực chất là một bản U-boot đ được tinh gọn), BIOS sẽ nạp và chạy X-loader, sau đó tới lược X-loader nạp và chạy U-boot. Sau khi được boot loader nạp lên, đầu tiên nhân Linux sẽ tìm cách gán (mount) hệ thống file system (thư mục root /) với một thiết bị lưu trữ cụ thể được định nghĩa trong tham số boot (được truyền bởi boot loader: ví dụ root=/dev/ram0), nếu thành công tiến trình đầu tiên sẽ được chạy. Tiến trình này là tiến trình init đầu tiên của nhân Linux, nó được thực thi bằng một tập lệnh chứa trong file mặc định là /sbin/init hoặc /etc/init nếu file đầu không tìm thấy (hoặc được định nghĩa bởi tham số boot: ví dụ init=linuxrc) Tiếp theo nhân Linux (Linux kernel) xử lý tất cả các hoạt động của hệ điều hành, chẳng hạn như quản lý bộ nhớ, định thời, I/O, liên lạc giữa các luồng xử lý, và kiểm soát toàn bộ hệ thống. Boot loader cần chuẩn bị sẵn môi trường cần thiết để nhân Linux có thể hoạt động được.
Nội dung của đề tài sẽ không đào sâu vào hoạt động của nhân Linux mà sẽ tập trung vào những gì mà boot loader cần chuẩn bị cho nhân Linux hoạt động sau này. Trang 7 Luận văn ngành Khoa học máy tính – Khóa 2009 2. Cơ sở lý thuyết Barebox là một chương trình boot loader hỗ trợ cho những hệ điều hành dòng Linux (Ubuntu, Android,…), còn được gọi là U-boot-v2 do nó là sự kết hợp của U-boot và nhân hệ điều hành Linux: sự tinh gọn của U-boot và hệ thống makefile, mô hình driver model và hệ thống quản lý file của nhân Linux. Nhờ đó với những người dùng đ quen với U-boot hay Linux, sẽ dễ dàng làm quen với Barebox.
Barebox là một phần mềm mã nguồn mở với giấy phép GPLv2 nên người lập trình có thể lấy được mã nguồn mới nhất cũng như những tài liệu về Barebox dễ dàng trên trang chủ của nó. Các kết quả nghiên cứu liên quan Ở Việt Nam, vào đầu thế kỷ 21 này, do lĩnh vực phần mềm nhúng còn sơ khai, việc nghiên cứu về boot loader chủ yếu được thực hiện trong các trường đại học như nhóm BKIT Hardware club và phần lớn là hiện thực Uboot trên các hệ thống nhúng trên nền ARM như mini2440. Hiện tại những chương trình boot loader mã nguồn mở vẫn tiếp tục được nâng cấp. Sau đây là những boot loader phổ biến dành cho hệ điều hành họ Linux: - Uboot: boot loader mã nguồn mở được sử dụng rộng rãi trên hệ thống nhúng do ưu điểm chính của Uboot là nhanh và ổn định.
- GRUB: boot loader mã nguồn mở, hỗ trợ tốt cho dòng Linux BSD, hỗ trợ nhiều hệ điều hành, nhiều hệ thống tập tin, cung cấp giao diện dòng lệnh lẫn menu. - LILO (Linux Loader): phần mềm mã nguồn mở không bị ràng buộc bởi GPL, chỉ hỗ trợ nền tảng x86.