2010-04-21 35 views
21

Gần đây, tôi bắt đầu phát triển trình điều khiển thiết bị nhúng chạy Linux.Mới đối với nhân Linux/Phát triển trình điều khiển

Cho đến bây giờ tôi chỉ có đọc về nội bộ của linux.
Không có kinh nghiệm nào trước đó trong việc phát triển trình điều khiển, tôi thấy khó có thể hạ cánh bước đầu tiên của tôi.

  • Tôi đã tải xuống mã nguồn hạt nhân (v2.6.32).
  • Tôi đã đọc (skimped) Trình điều khiển thiết bị Linux (3e)
  • Tôi đã đọc một vài bài đăng có liên quan ở đây trên StackOverflow.
  • Tôi hiểu rằng linux có phương pháp "nguyên khối".
  • Tôi đã xây dựng hạt nhân (bao gồm trình điều khiển hiện có trong menuconfig, v.v.)
  • Tôi biết những điều cơ bản về tệp kconfig và makefile do đó không phải là vấn đề.

Ai đó có thể mô tả cấu trúc (ví dụ: liên liên kết)
các thư mục khác nhau trong các mã hạt nhân nguồn.

Nói cách khác, cho một tập tin mã nguồn,
mà các file khác nó sẽ tham khảo cho mã liên quan

(The "#include" -s cung cấp một ý tưởng một phần)

Ai đó có thể giúp tôi trong việc có được một ý tưởng tốt hơn?
Bất kỳ trợ giúp nào sẽ được đánh giá rất cao

Cảm ơn bạn.

+0

Điều này sẽ xóa nó. http://www.youtube.com/watch?v=ENNKtfR2PYc –

+0

Viết mô-đun đơn giản Hello World cho hạt nhân. Sau đó, khi bạn đã hiểu Mô-đun hạt nhân Hello World hãy viết http://www.freesoftwaremagazine.com/articles/drivers_linux và kiểm tra nó.Theo liên kết ở trên cho đến khi bạn không hiểu. và cũng có thể đọc hai bài đăng của tôi ở đây http://mail.nl.linux.org/kernelnewbies/2010-09/ Tôi đã chiến đấu trên diễn đàn để hiểu cách thức hoạt động của bài đăng này. Vì vậy, bạn phải làm tương tự.Tất cả những gì bất kỳ ai nói chiến đấu cho đến khi bạn không hiểu. Cách tốt nhất để tìm hiểu là nhận một dự án và bắt đầu làm việc ở cuối bạn sẽ nhận được rất nhiều.Ví dụ: quyết định sửa chữa một –

+0

lỗi cho một trình điều khiển không dây trong kernel.I biết ở giai đoạn này nó nghe có vẻ mệt mỏi nhưng đuổi theo nó cho đến khi bạn làm điều đó. Cuối cùng bạn sẽ có thể làm điều đó. –

Trả lời

18

Với tệp C, bạn phải xem các hàm mà nó gọi và cấu trúc dữ liệu mà nó sử dụng, thay vì lo lắng về các tệp cụ thể.

Có hai tuyến đường cơ bản để phát triển điều khiển thiết bị của riêng bạn:

  • Hãy lái xe đó là tương tự như của bạn; loại bỏ mã không thể áp dụng cho thiết bị của bạn và điền mã mới cho thiết bị của bạn.
  • Bắt đầu với các phần cơ bản của trình điều khiển thiết bị và thêm từng phần một cho đến khi thiết bị của bạn bắt đầu hoạt động.

Các tệp tạo trình điều khiển của bạn sẽ có ý nghĩa hơn khi bạn hoàn thành quá trình này. Hãy xem xét những gì thuộc về mỗi tập tin, nhưng ở một mức độ nào đó, việc phân chia một trình điều khiển giữa các tập tin là một nghệ thuật hơn là một khoa học. Trình điều khiển nhỏ hơn thường chỉ phù hợp với một hoặc hai tệp.

Một chút thiết kế cũng có thể tốt. Hãy xem xét những gì bạn thiết bị làm, và những gì trình điều khiển của bạn sẽ cần phải làm. Dựa trên đó, bạn sẽ có thể vạch ra những chức năng mà một trình điều khiển thiết bị sẽ cần phải có.

Tôi cũng tin rằng Linux Device Drivers, Third Edition có thể giúp bạn bắt đầu phát triển trình điều khiển.

Bản thân các tệp Linux bao gồm các tệp dựa trên những gì chúng làm, lớp nào và lớp nào chúng truy cập vào ngăn xếp cuộc gọi. The Big Picture thực sự thông báo cách mỗi tệp có liên quan đến tệp tiếp theo.

+0

+1 trên đề xuất Trình điều khiển thiết bị Linux – ctuffli

+0

Cảm ơn bạn đã đề xuất. sẽ đi qua cuốn sách một cách cẩn thận tối nay. Còn gì nữa ?? Một chuyên gia thực tế? ... – TheCodeArtist

+1

Phải mất một chuyên gia thực sự hơn một vài trang để đi qua hạt nhân ... trên hết, nhiều phần của hạt nhân thay đổi nhanh chóng, do đó, nó hết dữ liệu khi nó được viết . Đặt cược tốt nhất của bạn là đọc và hiểu các hệ thống phụ mà bạn quan tâm. – WhirlWind

7

Tôi phải sửa trình điều khiển hạt nhân một lần. Mẹo lớn nhất của tôi (nếu bạn sử dụng vim) là thiết lập nó bằng ctags để bạn có thể nhảy xung quanh nguồn kernel với ctrl-] mỗi khi bạn thấy một hàm bạn không hiểu.

+2

... đã thực hiện việc này trong một thời gian! Và nó thực sự hữu ích! – TheCodeArtist

+0

@frankster - lời khuyên tuyệt vời cảm ơn – artm

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