2013-04-08 33 views
9

tôi insmod một module kernel trên nền tảng ARM và tôi nhận được một hoảng loạn hạt nhân gây ra này ba lỗi được in vào màn hìnhcác lỗi hoảng loạn hạt nhân này có nghĩa là gì?

  1. Unhandled fault: external abort on non-linefetch (0x008)
  2. Unhandled fault: imprecise external abort (0xc06)
  3. Kernel panic - not syncing: Fatal exception in interrupt

    • là gì những giá trị đó trong dấu ngoặc đơn?
    • Điều gì có nghĩa là 3 có nghĩa là âm thanh như lập kế hoạch trong khi nguyên tử nhưng có không có điều gì trong mô-đun hạt nhân.?

Trả lời

12

Các giá trị trong ngoặc là ifsr (instruction fault status) đăng ký. Có nhiều nguyên nhân cho việc hủy bỏ và những nguyên nhân này gây ra một nguyên nhân cụ thể. Có một số bảng trong hạt nhân xử lý các nguyên nhân lỗi cụ thể và một số khác có trình xử lý thực hiện printk và hủy một nhiệm vụ hoặc có thể panic() hạt nhân. Xem: arm/mm/fault.c. Giá trị có thể không có giá trị trừ khi bạn đang phát triển một trình xử lý lỗi. Mặc dù nó có thể cung cấp cho một ý tưởng về những gì lỗi là về, nó là tốt hơn chỉ để có được PC và nhìn vào mã tại địa chỉ đó (mà tôi nghĩ đã được in?).

Các lỗi này có thể xảy ra ở mọi nơi; trong tác vụ người dùng, tác vụ hạt nhân hoặc trình xử lý interrupt, v.v. Vì trình xử lý interrupt của bạn đã bị lỗi, Linux quyết định dừng mọi thứ và không bận tâm đến việc xử lý. Nếu không, bạn có thể làm hỏng đĩa (thậm chí nhiều hơn), v.v.

Lưu ý: Mỗi fault status register có một tệp abort.S khác với CPU ARM cụ thể. Ví dụ: xem abort-ev7.Sv7_early_abort. Điều này được đặt trong một processor table được khớp vào lúc khởi động.

  1. Unhandled lỗi - cố gắng để đọc bộ nhớ mà không được ánh xạ (thông qua MMU).
  2. Kernel hoảng loạn - một lỗi không được xử lý xảy ra trong mã được coi là không thể khôi phục.
+0

Rất tiếc, các bảng gần đây đã được di chuyển để tách các tệp 'C'. Xem: [fsr-2level.c] (https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/fsr-2level.c) và [fsr-3level.c] (https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/fsr-3level.c) cho các bảng ánh xạ 'ifsr' thành các kiểu hàm. Ít nhất trong 2.6.36, các bảng này nằm trong 'fault.c'. Tôi cho rằng một số mã FSR có thể chỉ ra lỗi 'phần cứng' so với trang * không được ánh xạ *; đây là CPU (tức là ARMV5, ARMV8, vv) phụ thuộc. –

+0

Bạn có thể thiết lập bản đồ thiết bị đúng cách. Một trường hợp phổ biến là nơi mà các đồng hồ cho một thiết bị ngoại vi không được kích hoạt và thiết bị không đáp ứng yêu cầu bus; đặc biệt là * các thông báo loại bỏ bên ngoài * có thể do thiếu 'clk_prepare_enable()'. –

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