Môi trường hack hạt nhân


22

Tôi đã làm việc trong các hệ điều hành nhúng như uCOS, ThreadX. Trong khi tôi đã mã hóa các ứng dụng trong Linux, bây giờ tôi đang có kế hoạch bắt đầu học Linux Kernel. Tôi có một vài câu hỏi liên quan đến môi trường.

  1. Cái nào là distro tốt nhất, công cụ nào dễ sử dụng để phát triển kernel? (cho đến nay tôi đã sử dụng RHEL và Fedora. Mặc dù tôi cảm thấy thoải mái với những thứ này, nhưng có vẻ như Ubuntu có các tập lệnh được xây dựng để biên dịch kernel dễ dàng như make_kpkg, v.v.)

  2. Bạn có thể mô tả các thiết lập tốt nhất để gỡ lỗi kernel? Trong khi gỡ lỗi các hệ điều hành nhúng khác, tôi đã sử dụng cổng nối tiếp để kết xuất tiến trình, JTAG, v.v. Loại nhân phát triển Linux nào sử dụng? .

  3. Công cụ nào là tốt nhất để gỡ lỗi và truy tìm mã hạt nhân? Như đã đề cập trước đó, giao diện điều khiển nối tiếp là cách duy nhất? Hoặc bất kỳ loại giao diện IDE / JTAG nào tồn tại cho PC?


3
Đối với # 1, Linus sử dụng Fedora, do đó có thể nói điều gì đó. Tôi không biết đủ về chủ đề này để thực sự đưa ra câu trả lời, nhưng tôi quan tâm đến những gì người khác nói.
jonescb

1
make_kpkg đến từ Debian, Ubuntu dựa trên và bản phân phối fav của tôi;)
Tài khoản đã bị xóa

Câu trả lời:


14

Hương vị cá nhân của tôi để phát triển Linux Kernel là Debian. Bây giờ cho điểm của bạn:

  1. Như bạn có thể đoán Ubuntu không mang lại bất kỳ điều gì mới cho kernel để giảm bớt sự phát triển, ngoài những gì đã có trong Debian. Ví dụ: make_kpkg là một tính năng Debian chứ không phải Ubuntu. Dưới đây là một số liên kết để giúp bạn bắt đầu với các tác vụ phát triển Linux Kernel phổ biến trong Debian:

  2. Cách dễ nhất để thực hiện gỡ lỗi kernel là sử dụng QEMU và GDB. Một số liên kết để giúp bạn bắt đầu:

    Mặc dù vậy, bạn nên lưu ý rằng phương pháp này không khả thi đối với một số trường hợp nhất định như gỡ lỗi các vấn đề phần cứng cụ thể và do đó, bạn nên sử dụng gỡ lỗi nối tiếp vật lý và phần cứng thực. Đối với điều này, bạn có thể sử dụng KGDB (nó cũng hoạt động bằng ethernet). KDB cũng là một lựa chọn tốt. Ồ, và nhân tiện, cả KGDB và KDB đã được hợp nhất vào Hạt nhân Linux. Thêm về hai người ở đây . Một phương pháp tuyệt vời khác, hoạt động tuyệt vời cho các vấn đề không liên quan đến phần cứng, là sử dụng Hạt nhân Linux ở chế độ Người dùng . Chạy Kernel ở chế độ người dùng như bất kỳ quy trình nào khác cho phép bạn gỡ lỗi nó giống như bất kỳ chương trình nào khác ( ví dụ ). Thông tin thêm về Linux chế độ người dùngở đây . UML là một phần của Linux Kernel kể từ 2.6.0, do đó bạn có thể xây dựng bất kỳ phiên bản kernel chính thức nào ở trên thành chế độ UML bằng cách làm theo các bước sau .

  3. Xem mục 2. Thật không may, không có phương pháp tốt nhất cuối cùng ở đây, vì mỗi công cụ / phương pháp đều có pro và con của nó.


Cảm ơn! để trả lời chi tiết. BTW tôi được giới thiệu trong fs và hệ thống con sinh học trong kernel. loại thiết lập nào là tốt nhất cho tôi?
rajaganesh87 17/03/2016

UML và QEMU có lẽ là con đường để đi, vì bạn có thể dễ dàng chơi với các hệ thống tệp mà không mất phí.
Shinnok

Liên kết rất tốt, chỉ một điều. Yêu thích của tôi là debian quá, nhưng Kernel Development có thể được thực hiện với bất kỳ bản phân phối nào. Có lẽ chùng là cách tốt nhất nếu bạn thuần túy vì nó sử dụng hạt nhân vani, nhưng cấu hình không phải là thứ xấu, bạn sẽ tìm thấy thứ tốt nhất của mình.
D4RIO

Tìm thấy một vài liên kết hữu ích khác: [Liên kết 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [Liên kết 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index. html )
rajaganesh87

6

Nếu bạn đang phát triển cho một nền tảng nhúng không dựa trên phần cứng i386, bạn sẽ cần phải biên dịch chéo. Các Emdebian dự án cung cấp dãy công cụ để phát triển cho nhiều kiến trúc (ARM, m68k, MIPS và nhiều hơn nữa) trên máy tính (i386 hoặc amd64). Điều đó có nghĩa là trong Debian, bạn chỉ cần thêm kho lưu trữ và apt-get cài đặt chuỗi công cụ cho (các) mục tiêu bạn chọn.


3

Các đầu dò JTAG tồn tại, nhưng chúng khá đắt (và các công ty xây dựng chúng có hợp đồng độc quyền). Cách tốt nhất để gỡ lỗi mã hạt nhân là khởi động nó trong kvm hoặc qemu với gdbserver bên trong mô phỏng.


Thậm chí tốt hơn, sử dụng Chế độ người dùng Linux. Linux là một quá trình người dùng thông thường.
vonbrand

0

Về cơ bản, bất kỳ phân phối chính tuyến nào cũng hoạt động tốt cho việc này (họ sử dụng phân phối của riêng họ để hack trên đó). Sử dụng bất cứ điều gì cảm thấy dễ vỡ hơn.

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.