Cách tốt nhất để vào lập trình Kernel?


8

Không hỏi nhiều về những cuốn sách nào (mặc dù nếu bạn biết bất kỳ hướng dẫn / hướng dẫn nào hữu ích) nhưng cách tốt nhất để bắt đầu lập trình kernel là gì và có phân phối cụ thể nào tốt nhất để học không?

Tôi hầu như quan tâm đến phần Trình điều khiển thiết bị, nhưng tôi muốn tìm hiểu cách Kernel được thiết lập (Mô-đun và như vậy) Tôi có khoảng 4-5 năm Kinh nghiệm với C / C ++ nhưng chủ yếu là kiến ​​thức từ Đại học (vì vậy nó không như 4-5 năm kinh nghiệm làm việc, nếu bạn hiểu ý tôi)


4
Để bắt đầu, nó đánh vần kernel với một e.
Caleb

Ya tôi nhận thấy rằng khi tôi đang gắn thẻ lol.

4
Lần sau hãy dành thời gian để sửa nó. Đó là một cách tốt để tôn trọng cộng đồng ở đây đang dành thời gian để giúp bạn. Ngoài ra nếu bạn muốn mã cho kernel, bạn sẽ phải nghiêm ngặt về các chi tiết như thế!
Caleb

@Caleb, sẽ làm được!

Cảm ơn bạn đã hỏi câu hỏi này, tôi đã luôn tự hỏi chính mình
Mike Pennington

Câu trả lời:


11

Thứ nhất:

Đối với các giai đoạn bé, viết các biến thể khác nhau cho các mô-đun "hello world" và trình điều khiển phần cứng ảo, là cách tốt nhất để bắt đầu (phần cứng thực sự giới thiệu các vấn đề trong thế giới thực phải đối mặt tốt nhất khi bạn có nhiều ý tưởng về những gì bạn đang làm).

"Trình điều khiển thiết bị Linux" là một cuốn sách tuyệt vời và rất đáng để bắt đầu với: http://lwn.net/Kernel/LDD3/

LDD (ít nhất là trước đây) có các bài tập mà bạn đã viết trình điều khiển ảo, ví dụ như đĩa RAM và các thiết bị mạng ảo.

Thứ hai:

đăng ký https://lkml.org/ hoặc vào danh sách gửi thư của một hệ thống phụ mà bạn sẽ hack. Lurk một chút, quét qua các chủ đề, đọc đánh giá mã (trả lời các bản vá) để xem mọi người đang làm gì vấp ngã hoặc nhặt lên.

Xem bạn có thể có được phần cứng (giá rẻ) cho một thiết bị chưa được hỗ trợ hay chưa được hỗ trợ tốt. Các ứng cử viên tốt là các USB USB giá rẻ hoặc các thiết bị ngoại vi USB tương tự, chi phí thấp. Một cái gì đó với trình điều khiển đã lỗi thời hoặc lỗi thời, có lẽ là do nhà cung cấp viết, có lẽ cho 2.4.x, là lý tưởng, vì bạn có thể bắt đầu với một cái gì đó hoạt động (sắp xếp) và dần dần điều chỉnh / viết lại nó, thử nghiệm khi bạn đi. Nỗ lực trình điều khiển đầu tiên của tôi là cho một USB USB Davicom DM9601. Có một trình điều khiển kernel được viết bởi nhà cung cấp 2,4-series mà tôi dần dần thích nghi với 2.6. (Lưu ý: trình điều khiển trong dòng chính không phải là trình điều khiển của tôi, cuối cùng người khác đã viết một từ đầu).

Một cách tốt khác là xem trang web Kernel Newbies, cụ thể là "công cụ nhân kernel" cần làm: http: // kernelnewbies.org/KernelJanitor/Todo Đây là danh sách các nhiệm vụ mà người mới bắt đầu có thể giải quyết.


4
Câu trả lời hay cho Linux, chỉ thiếu một tài nguyên: LXR để duyệt nguồn kernel.
Gilles 'SO- ngừng trở nên xấu xa'

8

Có nhiều hạt nhân tồn tại.

Linuxkhông phải là trò chơi duy nhất ngoài đó, nhưng nó được sử dụng rộng rãi nhất. Một số người đề xuất minixkernel để hiểu các khái niệm hệ điều hành. Tôi sẽ đi với loạt Linux 2.6.x vì nó là phổ biến nhất và nó sẽ không bị lãng phí cho một cái gì đó (gần như) không ai sử dụng. Solaris, XNU (Mac), FreeBSD và Dragonfly là đáng chú ý. 1

Tìm một cái gì đó siêu đơn giản (cổng nối tiếp, usb, v.v.) và làm cho nó làm một cái gì đó khác. Đối với một thách thức bổ sung, hãy thử viết một mô-đun hạt nhân cho một cái gì đó chưa có. (Hãy chắc chắn để google nghi ngờ bằng pci sudo lspci -nnvà / hoặc usb id sudo lsusbtrước.)

Cập nhật: Đừng làm điều này trực tiếp trên hệ thống chính của bạn, hãy sử dụng máy ảo (VM) (máy tính trong máy tính) như đã đề cập. VirtualBox có thể cung cấp cái này và nó miễn phí. Ngoài ra, tôi không muốn nó có vẻ quá tải, nhưng hãy thử chụp nhanh VM để bạn có thể quay lại trong trường hợp có thứ gì đó phá vỡ chính VM.

Cập nhật 2 : Lưu ý về Git (DVCSes incururial, fossil, bazaar, darcs) là một ý tưởng tốt, chủ yếu cho mã và các tệp nhỏ, quan trọng. Cố gắng không sử dụng Git để sao lưu nhạc, video và những thứ tương tự trừ khi bạn biết hàm ý này. ;)


6

Tìm một mô-đun hoặc trình điều khiển bạn muốn sửa đổi hoặc bắt đầu với loại mô-đun thế giới null / hello và xây dựng từ đó. Cụ thể làm việc với một mô-đun vì nó sẽ cho phép bạn tải, giải nén, biên dịch lại và tải lại mã vào một kernel đang chạy. Sau này bạn có thể vào các bit lõi, nhưng về cơ bản các mô-đun có tất cả các loại và bạn có thể làm khá nhiều thứ bạn thích.

Thứ hai, sử dụng VM. Thiết lập một máy khách trong VirtualBox hoặc một số qua VM và thực hiện kiểm tra kernel của bạn trong đó một lúc. Bằng cách đó, bạn sẽ không giết hệ thống chính của mình khi bạn phá vỡ thứ gì đó và khởi động lại, quay lại ảnh chụp nhanh, v.v. thực sự dễ dàng.

Thứ ba, học hỏi git.


1

Ai đó đã đề cập đến cuốn sách "Trình điều khiển thiết bị Linux" - đây là một tài nguyên tuyệt vời và tôi cũng rất khuyến khích sử dụng nó.

Mặc dù câu hỏi đề cập đến người khởi tạo không hỏi cụ thể về sách, nhưng phiên bản mới nhất của cuốn sách "Tìm hiểu về nhân Linux" ( http://oreilly.com/catalog/9780596005658/ ) nói chung là vô giá khi tìm hiểu về nhân Linux nói chung và cũng chứa một phần trên trình điều khiển thiết bị Linux.

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.