Bộ nạp khởi tạo (Boot-loader)

Một phần của tài liệu 525 đề cương bài giảng hệ thống nhúng bùi trung thành, 119 trang (Trang 73 - 76)

B – 1: So sánh đặc điểm của CISC và RISC

4.2 Bộ nạp khởi tạo (Boot-loader)

Thuật ngữ “bootstrap” bắt nguồn từ cách diễn đạt cổ xưa có nghĩa là tự mình vươn lên bằng chính nỗ lực của bản thân “pulling yourself up by your own bootstraps”. Nó đã được sử dụng như một thuật ngữ rất phổ biến để gọi tên một phần mềm thực thi việc khởi tạo chương trình thực thi trên các nền vi điện tử khả trình nói chung. Chương trình này thường rất nhỏ gọn và đảm nhiệm chức năng tiền hoạt động của hệ điều hành. Cũng rất phổ biến hiện nay người ta cũng thường dùng thuật ngữ “boot loader◻ ” (bộ nạp khởi tạo) thay vì “bootstrap”. Bộ nạp khởi tạo thực chất là một chương trình nhỏ thực hiện trong hệ thống và đảm nhiệm chức năng cần thiết để đưa hệ điều hành vào hoạt động. Trong các hệ nhúng, các lệnh được thực hiện đầu tiên thường nằm trong các vùng nhớ ROM và thường thuộc loại chậm. Dó đó, một trong những tác vụ phổ biến của bộ nạp khởi tạo là sao chép chương trình ứng dụng chính (main program) vào trong vùng bộ nhớ nhanh trước khi chúng được thực hiện. Bộ nạp khởi tạo cũng có nhiệm vụ khởi tạo vùng nhớ dữ liệu và các thanh ghi hệ thống trước khi nhảy tới chương trình ứng dụng chính. Cũng có rất nhiều dạng khác nhau của bộ nạp khởi tạo, từ dạng đơn giản đến phức tạp. Dạng đơn giản nhất có thể chỉ là một lệnh nhảy tới chương trình ứng dụng chính ngay sau khi reset mà không thực hiện bất kỳ một tác vụ khởi tạo hay nạp chương trình gì. Chương trình ứng dụng chính sẽ phải tự thiết lập để thực thi tác vụ

của mình. Các bộ nạp khởi tạo phức tạp hơn có thể thực hiện nhiệm vụ chuẩn đoán bộ nhớ và khởi tạo hệ thống, kiểm tra chương trình và nạp chúng trước khi cho bộ xử lý nhảy tới thực hiện chương trình ứng dụng chính.

Sau đây chúng ta sẽ tìm hiểu về một môi trường phát triển khá điển hình và thảo luận về một số các thuộc tính nguyên lý cơ bản của bộ nạp khởi tạo.

Hình 4-2: nguyên lý thực hiện của bộ nạp khởi tạo boot- loader

Trong môi trường phát triển hệ nhúng điển hình, nền phần cứng đích cần phát triển được kết nối với trạm chủ (host) thông qua một giao diện truyền thông. Một môi trường phát triển bao gồm một chương trình gỡ rối (debugger) ví dụ như

Code Composer Studio của Texas Instrument, để cho phép người phát triển chương trình nạp và thực hiện thử nghiệm các chương trình trên phần cứng đích. Một số các công cụ hỗ trợ ví dụ như để thiết lập các điểm dừng (breakpoint)…và các nhiệm vụ phụ trợ khác để bám sát trạng thái quá trình thực thi thời gian thực của chương trình thử nghiệm. Điều này rất có ý nghĩa và tạo nên một sự dễ dàng hơn trong quá trình phát triển và gỡ rối một chương trình ứng dụng mới cho nền phần cứng đích.

Thông thường các ứng dụng được phát triển trong môi trường ngôn ngữ C thì chương trình ứng dụng chính được thực thi và nằm trong phạm vi hàm main() phần khởi tạo chương trình và nạp tiền thực hiện chương trình chính thường không tường

minh hoặc bị ẩn đi. Thực chất điều này chỉ đúng đối với những người phát triển mã chương trình ứng dụng chính bằng ngôn ngữ bậc cao (đặc biệt cho các ứng dụng không phải cho hệ nhúng) mà không cần phải quan tâm nhiều đến các tác vụ cơ sở đảm nhiệm việc khởi tạo các thanh ghi hệ thống, ngăn xếp và dữ liệu…Điều này cũng rất có ý nghĩa để tạo ra một cảm giác và môi trường phát triển thân thiện cho người phát triển chương trình và chỉ cần tập trung phần thực hiện chức năng chính của hệ thống. Tuy nhiên trong môi trường phát triển hệ thống nhúng việc thực thi chương trình thường bắt đầu tại địa chỉ chương trình nơi bắt đầu tác vụ khởi tạo hệ thống trước khi nhảy tới thực hiện chương trình chính main(). Quá trình này được bắt đầu thực chất là thực thi một tác vụ ngắt kích hoạt bởi sự kiện reset.

Boot-loader cũng có nhiều dạng khác nhau. Hình 4-2 mô tả một bộ nạp khởi tạo cho một ứng dụng C nhúng. Trong ví dụ này vector RESET trỏ tới thủ tục c_int00 thực hiện tác vụ khởi tạo. Ngoài việc khởi tạo các thanh ghi, ngăn xếp… các biến C cũng cần được khởi tạo trước khi được thực thi. Quá trình này sẽ sao chép từ phần .cinit và viết vào các địa chỉ dữ liệu tương ứng của chúng trong phần .bss. Sau khi hoàn thành chương trình chính main() mới được gọi và bắt đầu thực thi. Trong ví dụ đơn giản này bộ nạp khởi tạo tổ hợp vector RESET cùng với hàm khởi tạo c_int00 và giả thiết rằng cả chương trình bộ nạp khởi tạo và chương trình ứng dụng chính đều nằm cùng trong vùng nhớ vật lý non- volatile. Trong các trường hợp hệ thống phức tạp hơn, bộ nạp khởi tạo có thể bao hàm cả tác vụ sao chép chương trình chính vào trong vùng nhớ fast volatile trước khi nó được gọi và thực thi. Bộ nạp khởi tạo cũng có thể đảm nhiệm cả chức năng chuẩn đoán, gỡ rối và nâng cấp hệ thống nếu có. Chức năng chuẩn đoán có thể chỉ là kiểm tra bộ nhớ, ngoại vi và độ tương thích tích hợp trong hệ thống. Chức năng gỡ rối cũng có thể là một giao diện giám sát cung cấp thông tin và trạng thái thời gian thực về hệ thống mà người ta vẫn thường biết tới với tên gọi là chương trình monitoring. Việc nâng cấp hoặc thay đổi chương trình bộ nạp khởi tạo cũng có thể được thực thi nhờ khả năng lập trình FLASH in-circuit và nạp từ bộ nhớ ngoài thông qua giao diện với trạm chủ hoặc chức năng tương tự.

Hình4-3: Cấu trúc bộ nạp khởi tạo boot-loader

Một phần của tài liệu 525 đề cương bài giảng hệ thống nhúng bùi trung thành, 119 trang (Trang 73 - 76)

Tải bản đầy đủ (DOCX)

(120 trang)
w