Tìm hiểu về cấp phát tĩnh Device Number và cấp phát động Device Number

Bài học trước đã trình bày các bước khởi tạo char driver. Một trong những bước mà chúng ta cần thực hiện đó là yêu cầu kernel cấp phát device number. Có 2 phương pháp cấp phát device number: cấp phát động và cấp phát tĩnh. Thông thường, lập trình viên sẽ tạo ra char

Bài học trước đã trình bày các bước khởi tạo char driver. Một trong những bước mà chúng ta cần thực hiện đó là yêu cầu kernel cấp phát device number. Có 2 phương pháp cấp phát device number: cấp phát động và cấp phát tĩnh.

Thông thường, lập trình viên sẽ tạo ra char driver trên một máy tính, và char driver đó sẽ được sử dụng trên nhiều máy tính khác. Nếu lựa chọn phương pháp cấp phát tĩnh device number, thì device number đó có thể đã được sử dụng trên những máy tính khác, dẫn tới char driver không hoạt động được trên các máy tính ấy. Để giải quyết vấn đề này, lập trình viên nên sử dụng phương pháp cấp phát động device number.

1. Biểu diễn device number.

Linux kernel sử dụng cấu trúc devt để biểu diễn device number. Cấu trúc này có kích thước 32 bit, trong đó major number chiếm 12 bits, minor number chiếm 20 bits. Linux kernel cũng có các hàm hoặc macro để hỗ trợ chúng ta làm việc với biến kiểu devt. Chúng bao gồm:

2. Cấp phát tĩnh

Các bước làm như sau:

  1. Bước 1: chọn một số không có trong /proc/devices làm major number. Cột đầu tiên chứa các major number đã được sử dụng bởi các driver khác. Vì thế, ta không chọn những số này. Ngoại trừ những số này, ta có thể chọn bất cứ số nào trong khoảng từ 0 đến (2^12 – 1) làm major number.
  2. Bước 2: sử dụng macro MKDEV để tạo ra số device number.
  3. Bước 3: gọi hàm register_chrdev_region để đăng ký số device number với kernel.

    Khi tháo char driver ra khỏi kernel, thì device number gắn với driver đó không còn được sử dụng nữa. Do đó, ta cần gọi hàm unregister_chrdev_region để giải phóng device number đó. Ta nên đặt hàm unregister_chrdev_region bên trong hàm kết thúc của char driver.

3. Cấp phát động

Trong phương pháp này, Linux kernel cung cấp một hàm là alloc_chrdev_region. Nhiệm vụ của hàm này là tìm ra một giá trị có thể dùng làm device number. Ta thường gọi hàm này trong hàm khởi tạo của char driver.

Trong quá trình viết char driver, lập trình viên nên sử dụng phương pháp cấp phát động device number. Mục đích là để char driver đó có thể chạy được trên nhiều máy tính khác nhau. Để thực hiện cấp phát động device number, ta sẽ gọi hàm alloc_chrdev_region bên trong hàm khởi tạo của char driver.

Tham khảo:

  • https://vimentor.com/vi/lesson/cap-phat-device-number
    
  • https://vimentor.com/vi/lesson/cap-phat-dong-device-number-1
    

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ