Hỏi cách viết SPI Driver trong Linux Kernel

Hi cả nhà,
Em đang làm một bài tập viết driver để giao tiếp Beaglebone Black với một device SPI (LCD Nokia5110) nhưng gặp một số vướng mắc mong mọi người chỉ giúp.
I. Em thấy SPI driver có 2 loại: SPI Controller driver và SPI Protocol driver.

  • Phần controller (Bus driver) sẽ là driver trực tiếp cấu hình module SPI trong con SoC và cung cấp các hàm để truyền nhận data qua hardware SPI.

  • Phần Controller (Device driver) sẽ sử dụng các hàm đã có từ phía Controller để viết ra các hàm thực hiện việc giao tiếp với Device SPI (Nokia 5110). Và em xác định mình cần viết phần này.
    II. Tuy nhiên, trong quá trình tìm hiểu để viết phần SPI Protocol Driver, em thắc mắc làm sao để từ trên tầng user có thể gọi xuống các hàm trong này.

  • Em đọc miết thì thấy nó có /dev/spidev* file, và user đọc ghi xuống device thông qua file này.

  • Nhưng khi mò, e thấy các file /dev/spidev* này được tạo ra, ngay khi boot lên nếu trong Device Tree file có khai báo các devices với compatible = “spidev”.

  • Đồng thời việc đọc ghi vào các file /dev/spidev* này cũng được kernel support các hàm trong driver/spi/spidev.c. Các hàm này gọi trực tiếp các services của phần Controller để ghi data qua SPI bus.

==> Em đang thắc mắc:

  1. Nếu phần đọc ghi qua /dev/spidev* mà gọi thẳng xuống SPI Controller, thì thằng Protocol Driver được dùng khi nào?
  2. Dùng /dev/spidev* files như vậy, chẳng phải trên tầng app sẽ chịu trách nhiệm hoàn toàn trong việc viết các hàm giao tiếp và điều khiển device sao? Vậy thì vai trò của thằng SPI Protocol là gì?
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?