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!
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
Đ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. –
* "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