Học phát triển trình điều khiển Linux với Raspberry Pi


13

Tôi muốn viết trình điều khiển thiết bị Linux cho một số thiết bị phần cứng thực sự. Thiết bị ngoại vi Raspberry Pi nào phù hợp? Về cơ bản tôi cần những điều sau đây:

  1. Nó phải đủ nhỏ cho người mới bắt đầu (nhiều nhất là vài tháng, tốt hơn vài tuần).

  2. Bảng dữ liệu phải có sẵn. Lúc đầu tôi đã nghĩ về bộ chuyển đổi USB-Ethernet, nhưng có vẻ như nó có bảng dữ liệu rất hạn chế.

Có ý kiến ​​gì không? Có thể là một cái gì đó giống như làm cho giao diện điều khiển nối tiếp hoạt động trên GPIO?


2
Trình điều khiển Linux là các mô-đun hạt nhân và về mặt kỹ thuật, chúng không phải liên quan gì đến phần cứng, vì vậy điều đầu tiên bạn muốn thử có lẽ là giao diện thiết bị char - tức là, thứ gì đó cung cấp tệp thiết bị char có thể được đọc từ và / hoặc được viết cho (giống như những thứ trong Proc) cho một số mục đích tầm thường.
goldilocks

Tôi đã làm tất cả điều đó, hoàn thành các hướng dẫn và viết các mô-đun hạt nhân cho các thiết bị giả, cùng với việc đọc sách về phát triển kernel / trình điều khiển. Điều này là tốt, nhưng bây giờ tôi muốn làm việc với phần cứng thực sự ..
ivan

Greg KH đã viết điều này một thời gian trước (nó có thể hơi lỗi thời ở một số khía cạnh): linuxjournal.com/article/7353 Vì vậy, có các thiết bị USB với các bảng dữ liệu công cộng xung quanh. Anh ta có một số mẹo kỹ thuật đảo ngược ở đó (tôi sẽ không muốn làm điều đó với bất cứ điều gì quá phức tạp tho). Công cụ cho các chân GPIO tôi đoán là thường hoạt động bằng cách sử dụng trình điều khiển I2C, v.v., nhưng bạn có thể bỏ qua điều đó và tự mình làm một cái gì đó.
goldilocks

Câu trả lời:


4

Có thể khó học trình điều khiển bằng văn bản khi giao tiếp với các thiết bị phức tạp và / hoặc xe buýt phức tạp. Do đó, tôi khuyên bạn nên sử dụng một số thiết bị đơn giản và nổi tiếng (bỏ qua việc triển khai trình điều khiển hiện có trong kernel) như các thiết bị I²C / SPI thường được sử dụng với vi điều khiển. Ví dụ, bạn có thể tìm thấy bất kỳ thiết bị nào được "hỗ trợ" bởi cộng đồng Arduino (có nghĩa là có thư viện / tài liệu cho nó) và thử sử dụng nó với RaspberryPi.

Nếu điều đó là không đủ hoặc bạn không muốn mua quá nhiều phần cứng, bạn có thể tự tạo một cái. Chỉ cần lấy một số vi điều khiển (như atmega hoặc một cái gì đó), tạo một chương trình để nó trở thành một thiết bị nào đó và sau đó thử giao tiếp với nó bằng trình điều khiển Linux. Bằng cách này, bạn có thể dễ dàng tạo các chương trình sẽ mô phỏng các lớp thiết bị khác nhau. Và vì bạn sẽ tự viết "phần sụn" cho mình, nó sẽ giúp bạn gỡ lỗi.

Bạn cần một số kỹ năng lập trình vi điều khiển cho việc đó nhưng không khó để học lập trình với Arduino và tôi tin rằng dù sao nó cũng là kiến ​​thức hữu ích cho lập trình viên trình điều khiển.


Làm thế nào về việc thực hiện giao tiếp nối tiếp trong phần mềm thông qua các chân GPIO? Ví dụ: kết nối nối tiếp với PC và cố gắng ít nhất xuất một cái gì đó ra bàn điều khiển. Có khả thi không?
ivan

@ivan: Tôi không chắc là tôi có hiểu đúng không. Nếu, theo nối tiếp, bạn có nghĩa là UART / rs232 và bằng phần mềm, bạn có nghĩa là bitbanging nó, thì điều đó là không thể vì những hạn chế về thời gian. Mặt khác, nếu bạn muốn (tái) triển khai thiết bị nối tiếp Linux bằng phần cứng RaspberryPi UART, thì tất nhiên là có thể thực hiện được. Tôi tin rằng tất cả các thông tin cần thiết về phần cứng này có thể được tìm thấy trong BCM2835 ARM Peripheralstài liệu. Nhưng hãy nhớ rằng để sử dụng nó, trước tiên bạn phải vô hiệu hóa trình điều khiển hiện có trong kernel.
Krzysztof Adamski

Cảm ơn bạn, nhưng bạn có chắc chắn về sự bất khả thi của UART biting không? Tôi đã tìm thấy liên kết này: ganssle.com/articles/auart.htm để nó có khả năng thực hiện với tốc độ truyền thấp và ít nhất là chỉ thực hiện phần gửi (dễ dàng hơn).
ivan

@ivan: Bài viết này dường như không phải là về các hệ thống có hệ điều hành có mục đích chung như Linux. Trong UART, bạn có các ràng buộc thời gian thực sự nghiêm ngặt rất khó đáp ứng nếu không có hệ điều hành thời gian thực. Điều đó đang được nói, có thể có thể làm như vậy ở tốc độ baud thấp nhưng nó có thể không thực sự đáng tin cậy.
Krzysztof Adamski

Có vẻ như bạn đã đúng: raspberrypi.stackexchange.com/questions/1987/iêu (tuy nhiên có một giải pháp thú vị ở đó). Cảm ơn một lần nữa vì sự giúp đỡ của bạn.
ivan

3

Cá nhân tôi sẽ bắt đầu với một thiết bị rất đơn giản, chẳng hạn như một hoặc nhiều đèn LED được kết nối trực tiếp với chân GPIO.

Bạn có thể mua một thiết bị đã sẵn sàng để cắm hoặc nối dây cho chính mình.

Lý do tôi muốn đề xuất là vì trình điều khiển gỡ lỗi thường khó hơn nhiều so với chương trình bình thường, do đó, một thử thách đơn giản để bắt đầu là hữu ích, sau đó bạn có thể sử dụng mã đó làm phương pháp gỡ lỗi cho các thiết bị phức tạp hơn (trạng thái ra một chân GPIO để gắn vào máy hiện sóng) trong đó thời gian là quan trọng.

Nếu nó đáng quan tâm, có một trình điều khiển hạt nhân cho LedBorg có sẵn ở đây , nguồn phải là một ví dụ đơn giản hợp lý để điều khiển các chân GPIO theo một khoảng thời gian thông thường.


Xin chào @PiBorg. bạn có thể cho tôi biết một số tài nguyên giúp tôi học cách viết mã trình điều khiển đơn giản cho một thiết bị như một hoặc nhiều đèn LED được kết nối trực tiếp với các chân GPIO không?
Sagar

0

"Thiết bị" đơn giản nhất mà bạn có thể viết trình điều khiển phần cứng cho (nếu phát triển trình điều khiển phần cứng là thứ của bạn) cũng có thể đơn giản như đèn LED (Tôi đã thêm dấu ngoặc kép vì về mặt kỹ thuật, đèn LED không phải là thiết bị nhưng nó vẫn là một phần của phần cứng) như @PiBorg đã đề xuất.

Các lựa chọn khác sẽ là một số thiết bị / linh kiện dễ giao tiếp như bộ cảm biến quang, cảm biến hồng ngoại thụ động (ngắn: Pir), cảm biến nhiệt độ, quạt PC (tốt nhất là quạt 4 dây cho phép bạn không chỉ giám sát mà còn điều khiển RPM), ma trận điểm LED và như vậy. Về cơ bản các thiết bị đơn giản như vậy sẽ cho phép bạn có tối thiểu về phần cứng (để bạn có thể nhìn và chạm vào những gì bạn đã thực sự hoàn thành) và đồng thời bạn có thể tìm hiểu về rất nhiều chủ đề được sử dụng cho các thiết bị phức tạp hơn nhiều trong đó sự phức tạp chủ yếu đến từ giao thức họ sử dụng.

Cũng lưu ý rằng bạn không cần phải đi sâu hơn vào các mô-đun hạt nhân. Tất nhiên nếu bạn muốn làm điều đó thì không ai ngăn cản bạn. :)

Dưới đây là một ví dụ về việc kết nối cảm biến hồng ngoại thụ động (Tôi sẽ sớm kiểm tra nó khi Pir của tôi được phân phối: 3). Bạn có thể lấy cái này và bắt đầu đào sâu hơn vào thế giới của hạt nhân Linux để xem làm thế nào bạn có thể tạo một trình điều khiển hạt nhân, hoạt động với Pir.

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.