2012-06-27 54 views
27

Tôi muốn tìm hiểu lập trình trình điều khiển thiết bị hạt nhân Linux. Vì vậy, bất cứ ai có thể xin vui lòng đăng bài hướng dẫn trang hoặc liên kết ở đây. Tôi mới vào môi trường hạt nhân Linux. Tôi đã tìm kiếm nó nhưng tôi không biết bắt đầu như thế nào và cái nào để đọc cho những điều cơ bản về sự hiểu biết dễ hiểu. Cảm ơn trước.Lập trình trình điều khiển thiết bị hạt nhân Linux

+0

Điều này cũng giúp một chút http://linuxseekernel.blogspot.ie/2015/08/linux-kernel-module-programming.html – Jeyaram

+0

Minimal tự động qemu + Buildroot + BusyBox mô-đun hạt nhân thiết lập: https: // github.com/cirosantilli/linux-kernel-module-cheat –

Trả lời

40

Phụ thuộc vào kỹ năng hiện tại của bạn. Nếu bạn là thực sự mới đối với Linux, có lẽ bạn nên bắt đầu lập trình hệ thống không gian người dùng với Advanced Linux Programming. Bạn sẽ nhận được kiến ​​thức tốt về các cuộc gọi hệ thống Unix và các khái niệm khác như tín hiệu, quy trình/luồng và vv với tài nguyên miễn phí này. Điều này là phải (hiểu được không gian người dùng API) nếu bạn đang phát triển ở phía hạt nhân vì vai trò của hạt nhân đang cung cấp dịch vụ cho người dùng một cách an toàn.

Nếu không, một sách thường được trích dẫn là Linux Device Drivers, Third Edition (LDD3). Hãy nhớ rằng phiên bản này đã được viết tại thời điểm Linux 2.6.10 và một số điều đã thay đổi kể từ đó. This article cho thấy sự khác biệt như 2.6 tiến hóa (cho đến 2.6.31, nghĩa là, vì vậy không hữu ích lắm). Tôi nên đề cập đến martinezjavier/ldd3, trong đó có trình điều khiển ví dụ về LDD3 được cập nhật cho các hạt nhân gần đây hơn (nhờ 42n4 để chỉ ra điều đó).

Một cuốn sách thú vị khác không được trích dẫn thường là Essential Linux Device Drivers. Bạn sẽ không tìm thấy phiên bản miễn phí này, nhưng nó vẫn có một cách tiếp cận thú vị. Những gì tôi thích về điều này là nó bao gồm rất nhiều loại thiết bị khác nhau và được cập nhật là 2.6.24, tốt hơn một chút so với LDD.

Cuối cùng, một cuốn sách tuyệt vời về bản thân hạt nhân (không dành riêng cho trình điều khiển) là Understanding the Linux Kernel, 3rd Edition. Điều này bao gồm các cơ sở hạt nhân chuyên sâu và các cơ chế nội bộ. Nó được cập nhật là 2.6.11.

Đối với hướng dẫn trực tuyến, tôi thấy this post on Pete's Blog là một ví dụ thực sự tuyệt vời. Nó không chỉ cho thấy cách tạo một thiết bị nhân vật (loại trình điều khiển hạt nhân dễ dàng nhất, tức là cái bạn nên bắt đầu), nó sử dụng các tính năng hạt nhân Linux hiện đại theo cách dễ hiểu, bao gồm:

  • use của udev
  • sử dụng một cấu trúc dữ liệu hạt nhân (FIFO)
  • sử dụng đồng bộ hóa hạt nhân (mutex)
  • sử dụng sysfs với thuộc tính tuỳ chỉnh
  • tùy chọn mô-đun cho insmod

Plus: nó nhắm vào Linux 3.0, có nghĩa là nó cập nhật hơn so với các tài nguyên khác. Bạn cũng có thể thích this post về cách tạo các mục Sysfs theo cách thủ công, mặc dù mô hình thiết bị Linux sẽ chăm sóc đăng ký thiết bị của bạn dưới dạng mục nhập Sysfs nếu bạn không cần các nút hoặc thuộc tính bổ sung.

Chỉnh sửa: Tôi nên thêm rằng cách tốt nhất để học lập trình trình điều khiển thiết bị Linux thực là xem xét các trình điều khiển thực tế. Có hàng nghìn tài xế trong số drivers. Bắt đầu đọc và hiểu khái niệm về những cái đơn giản như drivers/leds và bạn sẽ thấy cách thưởng này.

0

cuốn sách tốt nhất cho việc học lập trình điều khiển thiết bị là
"LDD"

1

Bạn có thể quan tâm mới được phát hành Linux Driver Templates. Như tên cho thấy, nó cung cấp các khuôn mẫu và trình diễn các cơ sở Linux thường được sử dụng để bắt đầu một cách nhanh chóng.

+0

Hey bạn có thể giải thích làm thế nào để đi qua LDT ?? – const

1

Tôi hiểu đó là phản hồi bị trì hoãn !!

Bạn có thể chọn bất kỳ cuốn sách nào, đó là những cuốn sách thực sự tuyệt vời được đề xuất ở trên.

Nhưng bạn cần thực sự làm việc thiết thực. Cố gắng tham gia vào Kernel càng nhiều càng tốt.

Chủ yếu là bạn cần phải xem xét chính mã nguồn của hạt nhân.

Và tài liệu thú vị nhất bạn có thể tìm thấy trong thư mục Tài liệu dưới cây Kernel.

0

Kiến trúc hạt nhân Linux chuyên nghiệp cũng tốt.

8

Các trang web có liên hệ rất quan trọng: http://elinux.org/Device_drivers

lớn hướng dẫn với các ví dụ thực tế (kết thúc với một usbpen định dạng với hệ thống tập tin riêng của chúng tôi - tìm kiếm tác giả thêm bài viết):

  1. http://www.linuxforu.com/tag/linux-device-drivers-series/
  2. http://sysplay.in/index.php?pagefile=lfy_articles

Mã nguồn của LDD3 nổi tiếng Cuốn sách chuyển đến hạt nhân mới nhất: https://github.com/martinezjavier/ldd3/

Video:

  1. https://www.youtube.com/playlist?list=PL16941B715F5507C5

cources lẽ khác:

  1. http://www.skilledup.com/courses?keyword=linux+kernel&price_filter=0..0

Một số ví dụ:

  1. http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
  2. http://www.freesoftwaremagazine.com/articles/drivers_linux
  3. http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
  4. http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/

Sách (không đề cập trong chủ đề này LDD3):

  1. http://www.coopj.com/ với một mã nguồn được cập nhật http://www.coopj.com/LPD/

KernelHacking: http://kernelnewbies.org/KernelHacking

trực quan bản đồ của hạt nhân Linux: http://www.makelinux.net/kernel_map/

Linux và kernel sách cho người mới bắt đầu:

  1. http://www.kroah.com/lkn/
  2. http://swift.siphos.be/linux_sea/
+0

+1, mặc dù lưu ý những câu hỏi cũ của loại này là - theo nguyên tắc ngăn xếp ngăn xếp hiện đại - chủ đề không chính xác, vì nó được coi là quá rộng. – halfer

0

Nguồn tốt nhất là trang người dùng Linux nhưng chúng hơi quan trọng để hiểu cho người mới bắt đầu, Trình điều khiển thiết bị trực tiếp lập trình không phải là một nhiệm vụ dễ dàng. Tôi khuyên bạn nên bạn phải đi qua con trỏ và cấu trúc thông qua cuốn sách sau

Basic C Sách 1. Lập trình C - Byron Gottfried 2. C Programming Language - Dennis Ritchie

Intermediate Sách 1. Con trỏ trên C Kenneth Reek 2.Chuyên gia Lập trình C Bí mật sâu - Linden

Đến với trình điều khiển thiết bị Tôi đã tải tài liệu Nguồn hạt nhân theo định dạng pdf https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing Bạn có thể tải xuống từ liên kết này.

Device Drivers Khái niệm cơ bản (User mode Programming)

Linux Lập trình giao diện - Michael Kerrisk Beginning Linux Programming Wrox Publishers điều khiển thiết bị (Kernel Deleopment) 1. Linux Kernel Phát triển - Robert Tình yêu 2. Kernel Internals Linux - m beck

Device Drivers (trình điều khiển lập trình) 1. trình điều khiển thiết bị Linux - Third Edition (Free Download hiện có sẵn cho 2,6 Kernel) 2. Essential Linux Device Drivers - Venkateswaran

đối với điều khiển cơ bản Kiến thức Fol thấp trang web này http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html

Kinh nghiệm của tôi là trước hết chúng ta phải có kiến ​​thức âm thanh về lập trình C, chủ yếu là cấu trúc và con trỏ trước khi đi qua lập trình trình điều khiển nếu không sẽ hơi cồng kềnh để hiểu lập trình trình điều khiển.

đến để Startup: -

  1. tài khoản không gian lập trình Khái niệm cơ bản của tạo gcc proprocessed, lắp ráp và phản đối các file sử dụng lệnh gcc phân tích các tập tin đối tượng sử dụng công cụ đối tượng khác nhau, lập trình cơ bản trong linux, chủ đề (khóa , kỹ thuật đồng bộ hóa), tín hiệu, quy trình (fork, exec), bộ hẹn giờ (Posix). Điều này sẽ giúp bạn hiểu nhiều về khái niệm hạt nhân.

  2. Lập trình hạt nhân Hiểu cây nguồn hạt nhân, các nhánh khác nhau và tầm quan trọng của chúng, sử dụng ctags và cscope để duyệt mã nguồn hạt nhân, điều này sẽ giúp bạn duyệt nguồn hạt nhân.

  3. Lập trình trình điều khiển Trước hết Tìm hiểu các lớp trình điều khiển khác nhau, char, block, v.v. Tiếp theo tìm hiểu giao thức thiết bị, truyền và nhận, hướng dẫn sử dụng sản phẩm là nguồn tốt nhất để thực hiện việc này. Sau đó bắt đầu viết trình điều khiển char đơn giản ví dụ RTC (thiết bị được ánh xạ cổng), IOAPIC (Thiết bị được ánh xạ bộ nhớ), sau đó truy cập USB, PCI, Mạng, I2C, SPI, v.v. nếu bạn muốn trợ giúp, bạn có thể tìm thấy mã bộ xương cho tất cả điều này trong cây nguồn hạt nhân.

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