Địa chỉ điểm 2
... và làm thế nào để tôi gặp rắc rối hạt nhân?
Một hoảng loạn hạt nhân chỉ là một sự cố bên trong hạt nhân. Một sự cố gây ra bởi bất kỳ số lỗi phần mềm hoặc phần cứng thông thường.
Gỡ lỗi kernel không khác gì bất kỳ phần mềm nào khác. Một số kết hợp của
- Kiểm tra thông điệp tường trình
- Kiểm tra dấu vết ngăn xếp
- Sử dụng Trình gỡ lỗi với Điểm dừng
- Fault Isolation (tước / vô hiệu hóa các thành phần phần mềm cho đến khi chỉ có phần lỗi vẫn chạy)
Một tùy chọn bổ sung cho hạt nhân
- Theo dõi các cấu trúc giám sát nội bộ bên dưới
/proc/
và /sys/
, điều này có thể giúp bạn, ví dụ, theo dõi các xu hướng (ví dụ: số lượng ngoại lệ tăng trước khi gặp sự cố, tăng đột biến tải CPU, Rất nhiều lần hoán đổi / chuyển đổi ngữ cảnh). Nhưng đây là thông tin gỡ lỗi rất chất lượng và "không phải thời gian thực".
Thật không may, vì kernel chạy hệ thống nên khó gỡ lỗi hơn mã không gian người dùng. Nhật ký tin nhắn là khá nhiều tất cả những gì bạn thực sự có fr
Có thể gỡ lỗi mã hạt nhân của riêng bạn tại chỗ , khi bạn biết nó đang làm gì và sai ở đâu khi sử dụng ghi nhật ký chi tiết và gỡ lỗi log-bassed khác trong mô-đun / kernel tùy chỉnh của bạn, nhưng chẩn đoán sự cố gián đoạn trong một trình biên dịch trước hạt nhân phát hành là khá nhiều ra khỏi câu hỏi. Bạn sẽ không làm gì tốt hơn là đăng nhập mà không cần phần cứng bổ sung
Bạn cần một giao diện phần cứng để chạy gỡ lỗi, trong thế giới nhúng, cái này được gọi là In Circuit Emulation
( ICE ) và thường đạt được bằng cách sử dụng JTAG
giao diện
Cụ thể, bạn sẽ cần sử dụng JTAG
, đó là giao diện gỡ lỗi phần cứng. Điều này cho phép một người đặt điểm dừng và ngắt CPU bằng phần cứng bên ngoài.
Khi được thiết lập chính xác, bạn có thể JTAG
dễ dàng sử dụng với gdb
việc chạy trên PC chủ để gỡ lỗi các nhân linux nhúng. Việc sử dụng giống hệt với việc sử dụng gdb
với bất kỳ ứng dụng nào khác, nhưng giao diện là phần cứng.
Bạn sẽ sử dụng thiết lập này
- "bắt" (phá vỡ) những cơn hoảng loạn hạt nhân này trước khi chúng xảy ra
- Điểm dừng sẽ tạm dừng CPU
- Bước CPU thông qua lệnh sự cố bằng lệnh
- Kiểm tra tất cả bộ nhớ được sửa đổi / thay đổi
- Kiểm tra bộ nhớ và ngăn xếp CPU bằng trình gỡ lỗi của bạn
- Sử dụng thông tin này để xác định nguyên nhân gốc của sự cố
Hướng dẫn tài nguyên tốt: https://www.elinux.org/Debugging_The_Linux_Kernel_Using_Gdb
Lưu ý rằng ngay cả điều này có thể không đủ, có nhiều vấn đề chỉ xảy ra khi mọi thứ đang chạy "ở tốc độ", nghĩa là sự can thiệp của trình gỡ lỗi hoặc thậm chí các thông điệp nhật ký bổ sung có thể thay đổi hệ thống đủ để che giấu hoặc che giấu lỗi.
Nói ngắn gọn
Đó là một nghệ thuật hơn là một khoa học
Nhật ký của bạn thực sự bị cắt ngắn. Tôi nghi ngờ bạn có một lỗi phần cứng gây ra ngoại lệ CPU chưa được xử lý gây ra sự cố / hoảng loạn hạt nhân.
Một tình huống rất phổ biến là bộ nhớ không liên tục / hỏng / hỏng khiến một lệnh không chính xác được nạp vào CPU gây ra ngoại lệ.
rsync
chỉ ra lỗi thẻ SD. Họ có số lượng r / w giới hạn và 1 năm sử dụng nhiều có thể làm điều đó. Ngay cả khi bạn sử dụng ổ đĩa ngoài cho dữ liệu, vẫn có khả năng hỏng / hỏng thẻ SD sẽ gây ra điều này. Các khả năng phần cứng khác là RAM xấu và các lỗi khác.