Các công cụ hay phương pháp tốt để hiểu cấu trúc của bootloader?


9

Gần đây tôi đã tìm ra nguyên nhân của một lỗi khó chịu mà tôi đang làm việc với Atmel AT91SAM9G20 SBC chạy U-boot , một bộ tải khởi động nguồn mở. Cốt lõi của vấn đề là U-boot dự kiến ​​phần cứng sẽ được cấu hình khác với tôi đã xây dựng nên một số thanh ghi thiết bị bị cấu hình sai.

Bây giờ tôi đã tìm ra vấn đề, tôi cần phải điều chỉnh U-boot để cấu hình các thanh ghi một cách chính xác. Tôi có thể làm điều này một cách mù quáng bằng cách thêm một vài dòng mã vào cuối chương trình, nhưng điều đó rất lộn xộn.

Điều này đưa tôi đến câu hỏi của mình: làm thế nào tôi có thể tìm ra cách U-boot hoạt động hiệu quả hơn so với bắt đầu tại main () và đọc tất cả các đường dẫn mã có thể trên tất cả các tệp? Tôi đã thử grepping trong các tập tin và xem mã gần các định danh liên quan. Điều này đã tỏ ra không hiệu quả; có vẻ như hầu hết các mã là trình điều khiển cho các hệ thống con mà tôi không quan tâm. Tôi thực sự hiểu làm thế nào bộ tải khởi động hoạt động khá tốt, nhưng tôi hy vọng có một phương pháp tốt hơn phương pháp ngây thơ của tôi.


Bạn đã thử hỏi về danh sách gửi thư của các nhà phát triển uboot chưa?
sybreon

Câu trả lời:


6

Có một số công cụ / chiến lược có thể giúp:

  • Các công cụ tốt hơn để hiểu ý nghĩa của mã nguồn:

    • cscope là một công cụ để khám phá mã C, nó giống như grep nhưng hiểu cú pháp
    • Gọi trình tạo đồ thị để vẽ một hình ảnh của cấu trúc gọi hàm
    • Fenris trông thú vị mặc dù tôi đã không thử nó
  • Phân tích thời gian chạy

    • Bước qua các phần thú vị với trình gỡ lỗi và phân tích những gì đang diễn ra
    • Sử dụng các tính năng thiết bị của gcc để gọi một đoạn tốt khi vào / ra của mọi chức năng. ví dụ. http://ndevilla.free.fr/etrace/
  • Viết bộ tải khởi động nhỏ của riêng bạn

    • Tôi thường thấy rằng cách tốt nhất để hiểu một cái gì đó là tự tái tạo nó

Thật không may, không có công thức ma thuật nào phù hợp với mọi thứ.


Phân tích @R.78 - Không khả thi trên một hệ thống nhúng riêng biệt, đặc biệt khi không có hệ điều hành cơ bản nào chạy cùng lúc, ví dụ, bộ tải khởi động, đây là bộ tải khởi động.
Sói Connor

Bạn vẫn có thể bước qua nó với trình gỡ lỗi như Joby gợi ý. Tùy thuộc vào sự phức tạp, nó có thể hoặc không hữu ích.
Nick T

Cscope là loại điều tôi đang tưởng tượng. Tôi đã hy vọng cho một cái gì đó sáng bóng hơn một chút, nhưng đó là một khởi đầu tốt. Cảm ơn.
pingswept

2

Làm thế nào bạn định cấu hình nó để xây dựng cho AT91?

Cây mã dường như được thiết kế sao cho mọi thứ cụ thể về kiến ​​trúc đều nằm trong cây 'arch / (lớp cpu) / (kiểu cpu) / ...'. Tôi tìm thấy mã AT91 trong arch / arm / cpu / arm926ejs / at91 ... là những thứ cụ thể biến thể mà bạn đang tìm cách thay đổi không nằm ở đó? Không có quá nhiều thứ để xem qua trong thư mục đó, đặc biệt là vì gần một nửa các tệp là riêng biệt biến thể AT91.

Xin lỗi nếu điều này là hiển nhiên ... nhưng bạn đã không đề cập đến việc kiểm tra điều này.

Tôi chưa nhìn vào cây mã uBoot, nhưng bài đăng của bạn làm tôi sợ như vậy. Một dự án ghi lại của tôi liên quan đến việc cuối cùng sử dụng uBoot và Linux trên một iMX233 PCB tùy chỉnh. Tôi rất quan tâm đến việc nhận được loại phản hồi này về việc kiến ​​trúc uBoot và các công cụ dành riêng cho biến thể được cách ly tốt như thế nào và nỗi đau sẽ lớn đến mức nào.


Vâng, tôi đã dành thời gian chất lượng với arch / arm / cpu / arm926ejs / at91 / *, nhưng cảm ơn vì lời đề nghị. Hóa ra mã mà tôi đang tìm kiếm thực sự nằm trong ROM khởi động của bộ xử lý, mà chỉ Atmel mới có thể truy cập. Các chi tiết chính ở đây: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pingswept

1
Nói chung, tôi đã rất ấn tượng với U-boot. Đối với số lượng lớn bo mạch và CPU mà nó hỗ trợ, nó được tổ chức khá tốt. Các tài liệu rất thưa thớt, nhưng đó dường như là ngang bằng với khóa học cho bộ tải khởi động.
pingswept

@pingswept: này, Linux trên 4 lớp. Đẹp. Có lẽ tôi nên nhìn vào con chip đó thay vì iMX233. Tôi đã có một thời gian cố gắng để có được chip ARM + hai chip SDRAM của mình trên 4 lớp và tạm gác nó để làm việc trên các dự án khác. Tôi cũng là người dùng Altium.
darron

9G20 và iMX233 khá gần nhau. Tôi đã chọn 9G20 vì Ethernet MAC được tích hợp và chip rẻ hơn một chút với số lượng thấp, nhưng iMX233 là một ứng cử viên gần gũi.
pingswept

Ngoài ra, hãy xem Chumby Hacker Board-- có thể là một nơi tốt để bắt đầu nếu bạn quyết định xây dựng một hệ thống xung quanh iMX233. Các tệp Altium có trên trang wiki này: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.