BÁO CÁO CHUYÊN ĐỀ CÔNG NGHỆ MỚI
GVHD : Thầy Phạm Văn Khoa
Nhóm 5 : -Phạm Hữu Ái MSSV:09901014
-Nguyễn Thành Quang Đức MSSV:09901024
Đề tài : Bios và Boot Loader
I. Tổng quan về boot loader
Trong các máy tính cá nhân (PC), ngay khi bật nguồn,một chương trình phần
mềm gọi là Bios ngay lập tức kiểm soát hoạt động xử lý. Bios được viết tắt từ
Basic Input/Output Software,nghĩa là phần mềm nhập/xuất cơ bản. Bios được
lưu trữ trong bộ nhớ Flash,tạo điều kiện cho việc nâng cấp cho chính nó.Hay
nói cách khác, Bios là một tập hợp các chương trình phần mềm cấu hình hệ
thống,mô tả kiến trúc phần cứng ở cấp độ thấp. Hầu hết chúng ta không nhận
thức được phạm vi của Bios cũng như các chức năng của nó,nhưng nó lại là
thành phần rất quan trọng của các máy tính PC. Nhiệm vụ chính của nó là để
khởi tạo phần cứng,đặc biệt là hệ thống bộ nhớ,và tải hệ điều hành từ ổ cứng
máy tính.
Trong một hệ thống nhúng điển hình (không dựa trên nền tảng phần cứng máy
tính tiêu chuẩn công nghiệp X86),một bộ nạp khởi động (boot loader) là một
chương trình phần mềm thực hiện các chức năng tương tự như Bios. Tuy
nhiên,có một số nhiệm vụ quan trọng hơn mà bộ nạp khởi động thực hiện sau
khi mở nguồn,đó là :
Khởi tạo các thành phần phần cứng quan trọng,chẳng hạn như bộ
điều khiển SDRAM, bộ điều khiển I/O,bộ điều khiển đồ họa…
Khởi tạo bộ nhớ hệ thống để chuẩn bị cho việc điều khiển của hệ
điều hành.
Cấp phát tài nguyên hệ thống như bộ nhớ,mạch ngắt để điều khiển
thiết bị ngoại vi khi cần.
Cung cấp cơ chế để định vị và tải lên file ảnh hệ điều hành
Thực hiện hoạt động tải và đường điều khiển đến hệ điều hành,qua
bất kỳ thông tin khởi động cần thiết nào,chẳng hạn như tốc độ xung
nhịp của bộ nhớ,tốc độ cổng nối tiếp và các dữ liệu cấu hình phần
thống nhúng không có BIOS để thực hiện cấu hình hệ thống ban đầu.
- Bộ nạp khởi động trong các máy X86 bao gồm 2 thành phần
Bios
Bộ nạp OS (nằm trong MBR-Master Boot Record của đĩa cứng )
Ví dụ : LILO và GRUB
• Các loại Boot loader cho hệ thống nhúng :
- U-Boot ( Universal Boot loader ) : bộ nạp khởi động cho PowerPC, ARM
dựa trên hệ thống nhúng Linux
- RedBoot : ( RedHat eCos Derived ),các máy di động,bộ nạp khởi động
cho các hệ thống nhúng
- Rrload : bộ nạp khởi động cho ARM trên hệ thống nhúng Linux.
- FILO : bộ nạp khởi động tương thích X86
- CRL/OHH : bộ nạp khởi động Flash cho ARM dựa trên hệ thống nhúng
Linux.
- PPCBoot : bộ nạp khởi động cho PowerPC dựa trên hệ thống nhúng
Linux.
- Alios : hợp ngữ dựa trên bộ nạp Linux để khởi tạo các thành phần phần
cứng cơ bản từ ROM hoặc RAM.Mục đích để loại bỏ thành phần Bios ra
khỏi hệ thống nhúng.
II. THIẾT KẾ BOOTLOADER CHO HỆ THỐNG NHÚNG
1. Những khái niệm về thiết kế bộ nạp khởi động:
- Việc thiết kế bộ nạp khởi động tùy vào CPU, board. Các giai đoạn thiết kế
Bootloader :
• Giai đoạn 1 :
- khởi tạo các thành phần phần cứng
- Chuẩn bị không gian bộ nhớ để tải chương trình ở giai đoạn thứ 2
- Copy chương trình ở giai đoạn thứ 2 vào bộ nhớ
- Thiết lập SP ( Stack-Pointer, con trỏ ngăn xếp )
- Nhảy đến điểm bắt đầu của chương trình thứ hai
• Giai đoạn 2 :
vùng các bộ nhớ. Trong hệ thống, các file Binary thực thi có thể lưu vào
Flash device. Khi boot lên file ảnh hệ thống trong Flash được đưa vào
RAM. Đây là thiết kế tối ưu vì dữ liệu trên flash ít khi cần phải cập nhật.
Bất kì thay đổi nhỏ nào đều nhỏ nếu so với kích thước bộ nhớ Ram, và sẽ
dữ liệu này sẽ mất đi khi hệ thống khởi động lại
3
-
- Hình 2.8 : Phân vùng Flash Memory Layout thường thấy
- Bootloader thường nằm trên cùng, hoặc dưới cùng. Theo sau đó là Linux
kernel image, rồi đến bộ nhớ Ram hệ thống- chứa Root file system. Thông
thường, Linux kernel và Ram disk file system image được nén lại, và được
boot loader giải nén trong quá trình khởi động.
- Một phần nhỏ của Flash, hoặc loại bộ nhớ không bay hơi (Non volatile) có
thể dành cho các dữ liệu tạm cần được lưu lại, như các dữ liệu cấu hình
trong các Wireless access point hay Router.
- Flash file system
- Những giới hạn của Flash được han chế bằng Flash File System tương tự
như với đĩa cứng. Một trong những ưu điểm với file system là tính năng
Wear leveling nhằm phân phối đều số lần ghi/xóa dữ liệu trên mỗi block
nhằm kéo dài tuổi thọ của bộ nhớ. Ngoài ra File system còn nhằm hạn chế
sự mất mát dữ liệu khi gặp sự cố về nguồn điện. Một trong những File
system được sử dung phổ biến ngày nay đối với Flash là JFFS2-
Journaling Flash File System 2.
- - /bin – Thư mục này chứa các file chương trình thực thi dạng nhị phân và
các chương trình khởi động của hệ thống. (binary applications),
- - /boot – các tập tin cấu hình cho quá trình khởi động hệ thống (boot
configuration files).
3. Chế độ hoạt động của bộ nạp khởi động :
Boot Loading mode : chế độ nạp khởi động,được thiết kế cho người
dùng đầu cuối
bootstrap.
• Ma trận bus AHB 6 lớp 32 bit với tốc độ 90Mhz.
• 22 kênh DMA.
• Boot từ NAND Flash, SDCard, DataFlash, Serial Data Flash.
• 4 bộ ADC 10 bit.bộ USART, 2 UART.
• 10/100 mbps ethernet.
• Giao tiếp SPI….
1. TỔ CHỨC PHẦN MỀM TRONG HỆ THỐNG NHÚNG KM926x
5
HÌNH 4.9 : Tổ chức phần mềm trong hệ thống nhúng KM9260.
1.1 Bootstrap
BootStrap là một chương trình khởi động được nạp xuống trước tiên
cho các vi điều khiển dòng ARM 9 của Atmel.
BootStrap là một module ứng dụng, nó được sử dụng để thực hiện các
chức năng sau:
• Khởi tạo phần cứng như tần số xung clock, thiết lập các PIO
(programmable Input Output).
• Thiết lập các ngoại vi như PIO, PCM, SDRAM,
• Thực hiện các thực toán truy xuất vật lý các ngoại vi như DataFlash,
NANDFlash, Paralell Flash
• Điều khiển các tập tin hệ thống như JFFS2, FAT
• Thực thi các ứng dụng như ELF, Linux,
BootStrap có thể được đặt trong vùng bootLoader, cụ thể là được đặt
trong vùng DataFlash. BootStrap được chép lên RAM nội bởi trình SAM-
BA Boot. BootLoader thực hiện khởi tạo vi xử lý (PLL, PIO, SDRAMC,
SPI).
BootStrap thực hiện load U-boot từ DataFlash lên SRAM và trỏ đến
thực hiện chương trình U-Boot.
1.2 U-boot
6
đ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
7
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 cho 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ệ đ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 thi
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 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 ) .
Nhân linux được nhiều hãng phân phối đóng gói và phát triển thành
nhiều bản phân phối (Distribution) khác nhau như Ubuntu, Fedora,
OpenSUSE, Redhat mỗi bản phân phối đều được đóng gói với các phần
mềm tiện ích hướng tới nhiều thị trường khác nhau
1.4 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ới root 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
AT91BootStrap từ SPI serial dataflash device vào SRAM nội của MPU, sau đó thực
thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình
AT91BootStrap. Nếu không tồn tại chương trình boostrap trong SPI serial dataflash
device, MPU thực hiện bước B4 sau đây.
B4> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong NAND FLASH
device, nếu tồn tại, MPU thực hiện chép mã thực thi của AT91BootStrap từ NAND
FLASH vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của
SRAM để thực thi chương trình AT91BootStrap. Nếu không tồn tại chương
trình boostrap trong SPI serial dataflash device, MPU thực hiện bước B5 sau đây.
B5> Nếu MPU nhận được ký tự bất kỳ từ bàn phím máy tính (qua cổng
DBGU). Hoặc khi cắm cable USB vào máy tính chương trình sẽ nhảy sang SAM-
BA boot.
Từ lưu đồ trên, ta có thể lưu trữ AT91BootStrap.bin theo 3 cách: SPI serial
dataflash (NPCS0 hay NPCS1) hoặc lưu trữ trên NAND Flash. KM926x sử dụng
SPI serial dataflash (NPCS1) và NAND FLASH.
Trình tự boot Linux của KM926x
Quá trình boot kernel Linux trên KM926x được thực thi qua 3 tầng,như hình
sau :
1
(1) KM926x thực thi ROM boot, load AT91AT91BootStrap.bin từ
AT45DB041D-SU (SPI NPCS1) vào SRAM, thực hiện lệnh nhảy và thực thi
chương trình AT91BootStrap.
(2) KM926x thực hiện khởi động PLL cho system clock, khởi động SDRAM
controller, load u-boot.bin từ AT45DB041D-SU tại offset 0x8400 vào địa chỉ
0x21F00000 của SDRAM. Sau đó thực hiện lệnh nhảy vào vùng SDRAM để chạy
chương trình U-Boot.
(3) U-Boot load kernel Image từ nhiều nguồn khác nhau (TFTP, NAND
FLASH ) chép vào địa chỉ 0x20000000 trên SDRAM, sau đó thực hiện lệnh boot
hệ điều hành Linux.
1
Nhấn nút Excute SW sẽ browse tới bootstrap.bin chọn và nhấn nút open
thì bootstrap code sẽ tự động nạp vào dataflash.
HÌNH 4.14 : Nạp bootstrap
Nạp U-Boot
Tại script chọn Enable NandFlash
Tại Address chọn 0x20000 địa chỉ offset của U-Boot trên NandFlash
Tại Send file name : chọn đường dẫn tới U-boot.bin
HÌNH 4.15 : Nạp U-boot
Nạp kernel
Tại script chọn: Enable NandFlash
Tại Address chọn :0x200000 địa chỉ offset của Kernel trên NandFlash
Tại send file name : chọn đường dẫn tới Kernel :uImage
Nhấn nút send file
HÌNH 4.16 : Nạp kernel
Nạp roots
Tại script chọn: Enable NandFlash
Tại Address chọn 0x500000 địa chỉ offset của Rootfs trên NandFlash
Tại Send file name : chọn đường dẫn tới roort:*.jffs2,*.*
Nhấn nút Send file
HÌNH 4.17 : Nạp roots
Thiết lập biến môi trường cho U-boot lần đầu sử dụng
Sử dụng lệnh printenv để xem tất cả các biến môi trường đã được thiết
lập trong U-boot. Các lệnh được trình bày với định dạng bằng font in đậm,
màu đỏ để dễ phân biệt.
U-Boot> printenv
Thiết lập biến môi trường cho Uboot trong lần đầu sử dụng.
U-Boot> setenv bootcmd ‘nand read 0x20000000 0x20000
0x200000;bootm 0x20000000’
U-Boot> setenv bootargs root=/dev/mtdblock5 rw rootfstype=jffs2
U-Boot> setenv ipaddr 192.168.1.35
$export PATH=$PATH:/home/arm/project/compile/arm-
2009q3/bin/
Trong đó thư mục
PATH=/home/arm/project/compile/arm-2009q3/bin/ chứa các trình biên
dịch như arm-linux-gcc.
Biên dịch uboot cho hệ thống
• Make CROSS_COMPILE=arm-none-linux-gnueabi- distclean: Xóa
hết các cấu hình biên dịch trước đó.
• Make at91sam9260ek_nandflash_config: Khai báo biên dịch uboot cho
hệ thống board at91sam9260ek.
• Make CROSS_COMPPILE= arm-none-linux-gnueabi-
Nếu quá trình biên dịch thành công trong thư mục u-
boot-2009 sẽ tồn tại file u-boot.bin.
Hình 4.18: Máy linux sau khi biên dịch xong u-boot.
4.7 BIÊN DỊCH LINUX KERNEL.
Hệ thống nhúng sử dụng bộ xử lý ARM9 của Atmel
sử dụng hệ điều hành của linux có phiên bản từ 2.6.27. Biên dịch nhân hệ
điều hành cho hệ thống là quá trình thay đổi cấu hình nhân hệ điều hành
Linux sao cho tương thích với hệ thống, quá trình này thông thường một
phần được thực hiện bởi các nhà sản xuất, một phần được thực hiện bởi các
nhà phát triển hệ thống.ở đây ta xài phiên bản Linux-2.6.30, tải phiên bản
Linux-2.6.30 về máy tính dưới dạng mã nguồn linux-2.6.30.tar.bz2.
Chép và giải nén mã nguồn Linux vào máy tính Linux
để thực hiện biên dịch. Trước khi biên dịch, dowload trình biên dịch cross
compile về cài vào máy tính Linux.
Phần mềm arm-2011q3-67-arm-none-linux-gnueabi-i686-pc-linux-
gnu.tar.bz2 chứa các trình biên dịch cần thiết phục vụ cho quá trình biên
dịch nhân hệ điều hành Linux. Chép về và giải nén vào máy tính Linux.
Tiến hành thêm đường dẫn đến trình biên dịch như sau:
Tạo biến môi trường như sau: