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
cứng ở cấp thấp.
Trên cơ sở các nhiệm vụ của bộ nạp khởi động đã được đơn giản hóa ở
trên,chúng ra nhận thấy rằng,nếu như Bios cung cấp các thiết lập cấu hình
mang tính cố định thì các bộ nạp khởi động của hệ thống nhúng lại mang tính
tùy biến,nghĩa là tùy vào nền tảng (platform) của hệ thống nhúng mà chức
năng của bộ nạp khởi động sẽ do chính người xây dựng hệ thống đó cung cấp.
• Vai trò của một Boot loader:
Ngay khi bật nguồn một board xử lý, nhiều yếu tố phần cứng phải được khởi
tạo trước khi ngay cả những chương trình đơn giản nhất có thể chạy.Mỗi kiến
trúc và một bộ vi xử lý có một tập hợp các hành động được xác định trước và
cấu hình,trong đó bao gồm việc lấy một số mã khởi tạo từ một thiết bị lưu trữ
trên board (thường là bộ nhớ Flash). Mã khởi tạo này là một phần của boot
loader và chịu trách nhiệm “thổi hơi thở” cho bộ vi xử lý và các thành phần
phần cứng liên quan. Hầu hết các bộ vi xử lý có một địa chỉ mặc định mà từ
1
đó các byte đầu tiên của mã được lấy khi vừa mới bật nguồn hoặc reset. Người
thiết kế phần cứng cần phải dựa vào thông tin này để sắp xếp bố trí vị trí bộ
nhớ Flash trên board và chọn phạm vi địa chỉ bộ nhớ đáp ứng yêu cầu. Với
cách này,khi hệ thống vừa được cấp nguồn,mã được lấy từ một địa chỉ quen
thuộc và có thể tiên đoán được, và phần mềm điều khiển được thiết lập. Boot
loader cung cấp các mã khởi tạo này và chịu trách nhiệm khởi tạo board để
các chương trình khác có thể chạy.Các mã khởi tạo này hầu như luôn luôn
được viết bằng ngôn ngữ Assembly. Sau khi boot loader thực hiện khởi tạo
nền tảng và bộ xử lý cơ bản thì nó đã thực hiện xong chức năng cơ bản của
nó,ngoài ra boot loader còn có thêm một số tính năng nâng cao như khả năng
xác nhận một ảnh hệ điều hành,khả năng tự nâng cấp cho nó hoặc cho ảnh hệ
điều hành. Không giống như mô hình Bios PC truyền thống,khi hệ điều hành
nắm quyền kiểm soát thì Boot loader đã bị ghi đè và không còn tồn tại nữa.
• So sánh giữa máy tính và hệ thống nhúng:
- Trong một hệ thống nhúng vai trò của Bootloader phức tạp hơn vì các hệ
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 :
2
- Khởi tạo các thành phần phần cứng cần thiết cho giai đoạn này
- Kiểm tra bản đồ ô nhớ
- Copy kernel và tập tin ảnh gốc hệ thống vào bộ nhớ
- Thiết lập các thông số
- Khởi động kernel
2. Các khối chức năng của Bootloader :
- Khối chức năng chính ( main function module )
- Khối điều khiển các kênh I/O ( I/O channel driver module )
- Khối điều khiển các thiết bị nhớ,lưu trữ (memory device driver module )
Khối chức năng chính : có các nhiệm vụ :khởi tạo CPU và thiết lập
xung nhịp, đánh dấu toàn bộ các ngắt, thiết lập con trỏ ngăn xếp,
cho phép quản lý nguồn, tải ảnh Linux kernel vào bộ nhớ RAM hệ
thống sau đó thực thi kernel, có khả năng ghi dữ liệu vào bộ nhớ
flash để hỗ trợ tải các tính năng như tự tải Kernel về và nâng cấp.
Khối điều khiển các kênh I/O : có nhiệm vụ cung cấp giao diện để
gửi lệnh đến board đầu cuối hoặc để thông báo cho người dùng
trạng thái của board đầu cuối, khởi tạo các cổng I/O ( ví dụ cổng nối
tiếp hoặc Ethernet)
Khối điều khiển thiết bị nhớ : có nhiệm vụ khởi tạo bộ nhớ,bao gồm
các thiết bị nhớ,các thanh ghi.
- Cài đặt : tất cả các phần mềm hệ thống và dữ liệu được lưu trữ trong các
loại bộ nhớ không bay hơi như Flash, ROM.
NAND Flash
- Là công nghệ Flash mới, có nhiều cải tiến so với công nghệ NOR Flash cũ
như cho phép kích thước mỗi Block nhỏ hơn, tốc độ đọc, ghi tốt hơn cũng
như hiệu quả hơn trong việc sử dụng các mảng bộ nhớ.
- NOR Flash kết nối tới Vi xử lí bằng các bus dữ liệu/địa chỉ song song.
Ngược lại, NAND Flash được truy xuất nối tiếp.
- Thiết kế một hệ thống nhúng ta có thể có nhiều tùy chọn trong việc phân
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
Downloading Mode : sử dụng khi tải các thành phần phần mềm vào
hệ thống nhúng lần đầu tiên,được thiết kế dành cho các nhà phát
triển.
Trình tự khởi động:
Một giai đoạn (single stage) hay nhiều giai đoạn ( multi-stage).Bộ
nạp khởi động nhiều giai đoạn cung cấp nhiều chức năng phức tạp
hơn và khả năng di động tốt hơn.
4
Bộ nạp khởi động lưu trữ trong bộ nhớ không bay hơi thường trải
qua 2 giai đoạn sau :
+ Giai đoạn đầu tiên : 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,sau đó
copy chương trình này vào bộ nhớ,thiết lập con trỏ SP sau đó nhảy
đến điểm bắt đầu của chương trình ở giai đoạn thứ 2.
+ Giai đoạn thứ hai :khởi tạo các thành phần phần cứng cần thiết
cho giai đoạn này,sau đó kiểm tra tổ chức bộ nhớ,copy kernel và
ảnh của file root hệ thống vào trong bộ nhớ, tiến hành thiết lập các
thông số và khởi động kernel.
III. Tìm hiểu boot loader cho kit KM926X
KM926x là board nhúng trên nền vi điều khiển ARM9. Board có kích
thước nhỏ gọn và có tính năng mạnh, sử dụng dòng vi điều khiển
AT91SAM9 của ATMEL cho phép hệ thống chạy với các hệ điều hành
nhúng Linux, WinCE và µC/OS-II RTOS. Hoặc có thể chạy chương trình
ứng dụng standalone như các hệ thống vi điều khiển thông thường.
Các chức năng chính của board km9260:
• Bộ xử lý ARM 9260EJ-S, 8Kbyte bộ nhớ đệm lệnh, 8Kbyte bộ nhớ
đệm dữ liệu.
• Bus giao tiếp bộ nhớ ngoài 32 bit hỗ trợ 4 bank SDRAM/LPSDR, static
memory, CompactFlash, NAND Flash với EEC.
• 4Kbyte bộ nhớ SRAM nội, 32 Kbyte bộ nhớ ROM nội để chứa
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
U-boot (universal bootLoader) là một tập mã nguồn mở, hổ trợ
bootLoader cho nhiều kiến trúc nền khác nhau. U-boot hổ trợ các lệnh tương
tác, các biến môi trường, các lệnh thực thi và boot hệ thống từ các thiệt bị
bên ngoài. U-boot hỗ trợ nhiều lọai CPU và các họ CPU thông dụng hiện
nay. U-boot hỗ trợ các board phát triển trên nền các vi xử lý thông dụng hiện
nay.
U-boot thực hiện cấu hình các khối phần cứng trong một board và đặt
chúng vào trạng thái hoạt động. Nó có thể tải và thực thi hệ điều hành một
cách tự động (auto-boot) hoặc ngược lại nó cho phép người dùng khởi động
hệ điều hành thông qua các lệnh giao tiếp mà u-boot hổ trợ. Tập lệnh chuẩn
của u-boot cung cấp khả năng cho phép người sử dụng thao tác trên bộ nhớ,
mạng và nhiều thao tác khác khi hệ thống khởi động.
Thông thường u-boot được đặt trong phân vùng đầu tiên của Flash, bắt
đầu từ sector hay block nào được định nghĩa bởi vi xử lý. U-boot khởi tạo
CPU và một vài phần cứng trên board, tạo một vài cấu trúc dữ liệu để cho
kernel sử dụng và tải nó lên phân vùng đầu tiên của bộ nhớ.
Khi quyền điều khiển được chuyển đến cho u-boot, nó sẽ khởi tạo các
ngắt và các thiết bị ngoại vi. Sau đó u-boot chờ nhập các lệnh từ người dùng.
Nếu u-boot nhận được lệnh boot ảnh của kernel hoặc nếu nó được sử dụng
để boot kernel trực tiếp thì u-boot sẽ giải nén ảnh của kernel, tải kernel lên
bộ nhớ và chuyển điều khiển đến kernel. Kernel sẽ thực thi mà không có sự
tương tác với u-boot.
U-boot cung cấp các hàm chuẩn để hiệu chỉnh qúa trình khơi động và
khởi tạo kernel. Thường thì nó cung cấp các thao tác dưới dạng các lệnh
(command-line).
Cấu trúc thư mục của U-boot.
HÌNH 4.10 : Cấu trúc thư mục U-boot
1.3 Kernel
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
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
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. Các thư mục được liệt kê chi tiết tại chương 2.
8
Hình 4.11 : Cấu trúc file system
2. Quá trình boot trên Board KM926x
Khi cấp nguồn, AT926x chạy chương trình boot bên trong ROM (được xây
dựng sẵn trong quá trình sản xuất chíp). Hình sau thể hiện lưu đồ ROM boot
của AT91SAM926x:
9
Trình tự boot của MPU AT91SAM926x
1
B1> Chương trình chạy với bộ dao động nội, hoặc với bộ dao động thạch anh.
B2> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong SPI serial
dataflash device (NPCS0), nếu tồn tại, MPU thực hiện chép mã thực thi của
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 B3 sau đây.
B3> Kiểm tra sự tồn tại của chương trình AT91BootStrap trong SPI serial
dataflash device (NPCS1), nếu tồn tại, MPU thực hiện chép mã thực thi của
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
AT91Bootstrap, các biến môi trường (U-Boot’s Environment Variables),
U-Boot được lưu trữ trong serial dataflash. Các phân vùng chứa các
bootloader được thể hiện bởi bảng sau:
BẢNG 4.2 : Phân vùng memory map của NAND Flash.
1
THAM KHẢO
CÀI ĐẶT CHƯƠNG TRÌNH CHO HỆ THỐNG
Hướng dẫn Cài đặt SAMBA
Vào thư mục DVD\SW\SAMBA trên đĩa chọn Install AT91-ISP v1.13.exe để cài
đặt.
• Sau khi cài đặt xong, chép thư mục “ATMEL Corporation” chép đè lên thư
mục cài đặt mặc định: C:\Program Files\
• Quá trình cài đặt SAMBA thành công.
Nạp Bootloader vào board bằng SAM-BA.
Gồm các bước sau:
1. Mở jumper S7 và S8 sau đó gắn cáp nguồn cho board (USB-B hoặc 5VDC)
2. Tháo Jumper S5 trên board AT91SAM9 (gần IC AT45DB041D-SU).
3. Đóng S8 cấp nguồn cho board bằng USB-B hoặc S7 nếu cấp nguồn 5VDC ngoài.
4. Gắn cable USB-B kết nối board AT91SAM9 và máy vi tính (nếu dùng nguồn
5VDC) Nếu kết nối lần đầu cần cài driver cho chip AT91 tại thư mục ở phần cài
SAMBA.
5. Sau khi máy tính nhận dạng được thiết bị USB ta đóng Jumper S5 vào board
AT91SAM9. Nếu nhận thiết bị tốt sẽ hiện driver như sau
Hình 4.12 : Máy windows kết nối KM9260 qua Samba.
6. Khởi động chương trình SAMBA trên máy vi tính và thực hiện các bước
sau:
Bước 1: Chọn tên board và kiểu kết nối ấn nút Connect.
Hình 4.13 : Giao diện chọn kết nối Samba.
Tại scripts chọn :Send Boot File:
Tại Address chọn:0x0 địa chỉ offset của Bootstrap
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
U-Boot> setenv serverip 192.168.1.34
Chú ý: Số serverip này phải trùng với ip của máy PC chứa file cần
download .
U-Boot> setenv ethaddr 00:11:22:33:44:55
U-Boot> setenv netmask 255.255.255.0
Lưu lại bằng lệnh
U-Boot> save
Mục đích: để bootup tự động load kernel và rootfs.
4.6 XÂY DỰNG VÀ PHÁT TRIỂN HỆ THỐNG
4.6.1 Bootstrap
Bootstrap do nhà sản xuất hổ trợ, download bootstrap.bin tại trang
của atmel.com .
4.6.2 U-boot
Uboot có nhiều phiên bản, tuy nhiên từ phiên bản 1.3.4 trở đi thì mới
hỗ trợ board AT91SAM9260,ở đây ta doawload u-boot phiên bản 2009.
Sau khi download u-boot về, chép nó vào một thư
mục nào đó trong máy tính cài hệ điều hành linux.
Việc chép vào máy tính linux có thể được thực hiện
thông qua nhiều cách, ví dụ bạn có thể tải trực tiếp trên máy tính Linux có
nối mạng internet, hoặc từ máy tính Windows XP sau đó chép sang máy
tính Linux thống qua dịch vụ truyền file của SSH server – client, hoặc có
thể chép bằng các thiết bị lưu trữ như USB.
Biên dịch uboot cho arm không sử dụng trình biên
dịch gcc có sẵn trên máy tính cài linux. Trước hết bạn cần cài gói phần
mềm biên dịch arm-linux-gcc.
Gói phần mềm biên dịch bạn có thể tải về từ trên
mạng. Sau khi tải ta được file arm-2009q3-67-arm-none-linux-
gnueabi tar về và giải nén vào thư mục gốc của máy tính.
Trước khi biên dịch, cần thiết lập biến môi trường về đường dẫn cho
trình biên dịch, ví dụ như sau:
$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:
$export PATH=$PATH:/home/project/compiler/arm-2011q3/bin/ là
đường dẫn tới compiler
Sau khi chọn xong tiến hành biên dịch uImage.
Make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
uImage
Sau khi biên dịch thành công,tập tin ảnh của nhân hệ điều hành được
tạo ra trong thư mục /arch/arm/boot.
HÌNH 4.19 :Máy linux sau khi biên dịch xong uImage