2013-05-23 35 views
11

Đây là câu hỏi cơ bản liên quan đến khởi động u.u-boot: Di dời

Tại sao mã khởi động u tự di chuyển? Ok, nó có ý nghĩa nếu u-boot đang thực thi từ không gian NOR-flash hoặc boot ROM nhưng nếu nó chạy từ SDRAM thì tại sao nó lại phải di chuyển một lần nữa?

+1

Điều này không nên bị đóng. –

+0

Tại sao điều này đóng? Đây không phải là một câu hỏi liên quan? –

+0

Cần thêm một phiếu bầu nữa để mở lại. –

Trả lời

5

Câu hỏi này xuất hiện thường xuyên. Good answers đôi khi quá.

Tôi đồng ý việc tải bản dựng lên SDRAM trong quá trình phát triển rất thuận tiện. Điều đó phù hợp với tôi, tôi luôn làm thế. Tôi có một số mã khởi động đặc biệt trong flash mà không cho phép MMU/cache. Đối với các khởi động u-boot của tôi, tôi chuyển CONFIG_SYS_TEXT_BASE giữa các bản dựng flash và ram. Tôi chạy phát triển của tôi xây dựng theo cách đó thường xuyên.

Như một vấn đề thực tế, xử lý việc khởi tạo lại MMU/bộ nhớ cache sẽ là vấn đề không quan trọng. Và U-Boot lợi ích IMO từ sự đơn giản, kết quả của việc loại bỏ những thứ như thế.

Trưởng nhóm công nghệ tại Denx đã trình bày opinion của anh ấy. IIRC các bài viết khác của anh mạnh mẽ hơn so với bài viết đó. Tôi có ấn tượng rằng anh ấy không muốn lặp lại chính mình.

cập nhật: lý do tại sao di chuyển. Truy cập bộ nhớ nhanh hơn RAM so với ROM, điều này đặc biệt quan trọng nếu mục tiêu không có bộ nhớ cache lệnh. Thực thi từ RAM cho phép lập trình lại flash; cũng (nhỏ hơn) nó cho phép các điểm ngắt phần mềm với các lệnh "bẫy"; nó cũng giống như chế độ hoạt động bình thường của mục tiêu, vì vậy nếu ví dụ burst đọc từ RAM là iffy sự thất bại sẽ được nhìn thấy lúc khởi động sớm.

+1

Liên kết không thực sự là câu trả lời cho câu hỏi, nhưng với những gì bạn cho là giả định là động lực đằng sau câu hỏi. Về chủ đề đó, bình luận khởi tạo lại MMU của bạn là thú vị mặc dù - nền tảng mà tôi đã tải u-boot * từ * u-boot mà không gặp khó khăn đáng kể không có một MMU thực sự. –

+0

[lòng bàn tay tát vào trán] Bạn nói đúng. Câu trả lời được cập nhật. –

1

Khởi động U phải đặt trước 3 vùng trong bộ nhớ lưu trữ: 1) tự khởi động u, 2) uImage (hạt nhân nén) và 3) hạt nhân không nén. 3 khu vực này phải được đặt cẩn thận trong u-boot để tránh xung đột.

Tuy nhiên, trình tải khởi động giai đoạn trước, (BL2 hoặc BL1) mang u-boot vào bộ nhớ DRAM không biết lập kế hoạch khởi động của u trên 3 vùng này. Vì vậy, nó chỉ có thể tải u-boot vào một địa chỉ thấp hơn trong bộ nhớ DRAM và nhảy đến nó. Sau đó, sau khi khởi động u thực hiện một số khởi tạo cơ bản và phát hiện máy tính hiện tại không ở vị trí được hoạch định, chức năng di chuyển cuộc gọi u-boot di chuyển u-boot đến vị trí đã lên kế hoạch và chuyển đến nó.

0

Mã NOR flash phải khởi tạo SDRAM, sau đó mã sao chép từ Nor Flash sang SDRAM, Quá trình sẽ tự sao chép, vì bạn có thể bật MMU, chúng tôi sẽ bắt đầu ánh xạ địa chỉ ảo.

Các vấn đề liên quan