Skip to content

Linux Device Driver Overview

Tài liệu này mô tả các khái niệm chung về Linux Device Driver. Cần có các bài tìm hiểu chuyên sâu về các mục trong phần này.

Original note

Linux System Overview

userspace-kernelspace

Linux overview

Linux Device Model

Các thiết bị kết nối đến CPU được gọi là Device. Mỗi device này cung cấp các tài nguyên khác nhau đến người dùng, Linux kernel thông qua device driver để giao tiếp đến device và sử dụng các tài nguyên của device đó.

Các device kết nối đến CPU bằng một bus. Nó có thể là các bus giao tiếp với thiết bị ngoại vi như SPI, I2C, hoặc cũng có thể là system bus của hệ thống. Lưu ý rằng Linux Kernel cũng nhìn bus giống như một device và tất nhiên device thì cần phải được khai báo. Do đó Linux Kernel cũng cung cấp các quy trình để đăng ký một bus với hệ thống.

Trong quá trình khởi động, dựa vào thông tin mà device-tree cung cấp về các device trong hệ thống, Linux Kernel gọi đến các device driver tương ứng để dò tìm và thêm thiết bị vào hệ thống.

Platform device là các device đầu tiên được dò tìm và thêm vào hệ thống, được quản lý trực tiếp trong vùng nhớ của CPU qua platform bus. Chi tiết xem tại Platform Device.

linux device model

Figure. An example about device model

Kernel Module

Kernel Module là đoạn mã có thể cài đặt hoặc gỡ khỏi kernel theo yêu cầu mà không cần khởi động lại hệ thống; Device Driver là một loại kernel module. Chi tiết về định nghĩa, module_init/module_exit, in log, cài đặt (LKM) và build module xem tại Kernel Module.

Character Device Driver

Device Driver là một kernel module giao tiếp trực tiếp với phần cứng và cung cấp giao diện cho user space. Trong LDD3, driver chia làm 3 loại: char, block và network module. Chi tiết về character device (device file, major/minor, cdev, file_operations, mutex, mmap, ioctl) xem tại Character Device Driver.

Giao tiếp với phần cứng

Việc giao tiếp với phần cứng trong hệ nhúng phụ thuộc vào loại thiết bị. Với platform_device (struct resource, platform_get_resource...) xem tại Platform Device.