2015-01-24 23 views
10

Tôi đang cố gắng hiểu các nguyên tắc Linux được nhúng và không thể tìm ra địa chỉ ở đầu ra u-boot.Tìm hiểu địa chỉ tải Linux cho quá trình U-Boot

Ví dụ, tôi có UDOO bảng dựa trên bộ vi xử lý quad i.MX6 và tôi đã nhận ra sau đây từ U-Boot:

U-Boot 2013.10-rc3 (Jan 20 2014 - 13:33:34) 

CPU: Freescale i.MX6Q rev1.2 at 792 MHz 
Reset cause: POR 
Board: UDOO 
DRAM: 1 GiB 
MMC: FSL_SDHC: 0 
No panel detected: default to LDB-WVGA 
Display: LDB-WVGA (800x480) 
In: serial 
Out: serial 
Err: serial 
Net: using phy at 6 
FEC [PRIME] 
Warning: FEC MAC addresses don't match: 
Address in SROM is   00:c0:08:88:a5:e6 
Address in environment is 00:c0:08:88:9c:ce 

Hit any key to stop autoboot: 0 
Booting from mmc ... 
4788388 bytes read in 303 ms (15.1 MiB/s) 
## Booting kernel from Legacy Image at 12000000 ... 
    Image Name: Linux-3.0.35 
    Image Type: ARM Linux Kernel Image (uncompressed) 
    Data Size: 4788324 Bytes = 4.6 MiB 
    Load Address: 10008000 
    Entry Point: 10008000 
    Verifying Checksum ... OK 
    Loading Kernel Image ... OK 

Starting kernel ... 

Tôi không hiểu được giá trị của địa chỉ tải 0x10008000. Theo tài liệu cho bộ xử lý cụ thể này, tại địa chỉ 0x10000000 - 0xffffffff được ánh xạ bộ nhớ chính. Nhưng bù trừ 0x8000 là bao nhiêu? Tôi không thể tìm ra lý do cho giá trị này.

Tôi cũng không hiểu địa chỉ 0x12000000, nơi hình ảnh hạt nhân được tải từ đó. Có vùng bộ nhớ được ánh xạ cho thẻ SD không?

Xin vui lòng, bạn có thể cho tôi một số giải thích cho những địa chỉ này hoặc thậm chí tốt hơn, một số tham chiếu đến tài nguyên về chủ đề này. Mục tiêu của tôi là tìm hiểu làm thế nào để port u-boot và nhân Linux vào một bo mạch khác.

Cảm ơn bạn!

+1

Yêu cầu khởi động hạt nhân được ghi lại trong [Documentation/arm/Booting] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/Booting) . Tôi không thể nhớ chính xác một cách chính xác _why_ TEXT_OFFSET là một điều, nhưng nó là. – Notlikethat

+1

Điển hình là bắt đầu của RAM + 0x8000 là 'ATAGS' được lưu trữ ở địa chỉ thấp nhất. Tải xuống hướng dẫn tham khảo iMX6 từ Freescale và tất cả các địa chỉ sẽ nằm trong một vài chương đầu tiên. –

+1

* "Tôi cũng không hiểu địa chỉ 0x12000000, nơi hình ảnh hạt nhân được tải từ." * - U-Boot sử dụng biến ** loadaddr ** để lưu trữ giá trị này. Đó là một giá trị hơi tùy ý trong bộ nhớ trên, nhưng vẫn thấp hơn nơi mà U-Boot đang thực thi. Địa chỉ này là nơi tệp uImage hoặc zImage hạt nhân tạm thời được lưu trữ trong bộ nhớ chính khi đọc từ bộ nhớ không biến đổi (ví dụ: NAND hoặc SDcard) hoặc được tải từ mạng. ** Loadaddr ** này cho uImage hoặc zImage phải khác với "địa chỉ tải" của hạt nhân thực tế là 0x10008000 để cho phép giải nén ảnh hạt nhân. – sawdust

Trả lời

1

kiểm tra thư mục/configs. Nó chứa tất cả các định nghĩa ban

i.MX uboot include/configs

Để cổng uboot khác cảng, căn cứ vào một bảng rất giống nhau và thay đổi từ đó.

+1

alex: Liên kết vẫn hoạt động? –

6

Nếu bạn kiểm tra biến môi trường của khởi động u, bạn sẽ tìm thấy hình ảnh hạt nhân được sao chép từ thiết bị khởi động đến vị trí RAM (Ở đây, 12000000) thông qua lệnh như fatload.

Hiện tại, đây không phải là LOADADDRESS. Bạn cung cấp cho LOADADDRESS để dòng lệnh trong khi biên dịch hạt nhân, Địa chỉ này chủ yếu là ở 32K bù đắp từ đầu RAM trong không gian địa chỉ vật lý của bộ vi xử lý.

RAM của bạn được ánh xạ tại 10000000 và hạt nhân LOADADDRESS10008000 (bù 32K). bootm lệnh giải nén hình ảnh hạt nhân từ địa chỉ 12000000 đến 10008000 và sau đó gọi số kernel entry point.

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