CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này nói ngắn gọn về việc phát triển trình điều khiển Windows. Được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm tới bài viết này thì nhớ like nhé.
1. Lời nói đầu
Gần đây tôi đang nghiên cứu phát triển trình điều khiển Windows, hãy nói ngắn gọn.
- So với trình điều khiển Linux và Windows, cho dù đó là sách, video, cộng đồng, bài đăng trên blog hay chủ tài khoản trên thị trường, có rất ít người viết chúng, khiến quá trình học tập tăng vọt.
- Thậm chí còn có ít người hành nghề lái xe Windows hơn.
- Triển khai môi trường phát triển là rắc rối.
- Việc cài đặt và phát hành trình điều khiển rất rắc rối và cần có chữ ký số. Nếu nó được xuất bản lên thư viện cập nhật windows thì cũng cần phải có chứng nhận nhãn vi mô.
Tại sao lại viết lại? Vì trong quá trình tìm hiểu, tôi nhận thấy nhiều thứ vẫn như cũ. Nếu bạn đang tham gia phát triển Linux, có thể bạn sẽ có một số cảm hứng. Nếu bạn đang cần phát triển trình điều khiển Windows, bạn có thể cung cấp một số ý kiến. những đề nghị non nớt.
Tiếp theo, hãy bắt đầu văn bản bằng phần giới thiệu ngắn gọn về trình điều khiển Windows.
2. kiến trúc cửa sổ
2.1 Hệ điều hành và ứng dụng
Trong nhiều hệ điều hành hiện đại, các ứng dụng và hệ điều hành được tách biệt với nhau. Mã lõi của hệ điều hành chạy ở chế độ đặc quyền, được gọi là chế độ kernel. Ứng dụng chạy ở chế độ không có đặc quyền, tức là chế độ người dùng.
Mối quan tâm giữa hệ điều hành và ứng dụng cũng tương tự như mối quan hệ giữa máy chủ và máy khách, điều này thậm chí còn nổi bật hơn trong nền tảng Windows:
Một vài khái niệm:
- Quy trình hệ thống: Bản thân hệ điều hành Windows sẽ khởi động một quy trình hệ thống (tải kernel32.dll), tương tự như quy trình init trong Linux. Các chi tiết cụ thể sẽ không được mở rộng.
- FDO (Đối tượng trình điều khiển chức năng): trình điều khiển chức năng thiết bị
- FiDO (Filter Driver Object): trình điều khiển bộ lọc
- PDO (Đối tượng trình điều khiển vật lý): Trình điều khiển thiết bị vật lý, nơi phần cứng thực sự được truy cập.
- IRP (Gói yêu cầu I/O), nếu một ứng dụng muốn truy cập dữ liệu kernel thì nó phải được chuyển qua IRP. Còn được gọi là yêu cầu IRP, khi ứng dụng tương tác với trình điều khiển, nó sẽ gửi yêu cầu IRP và IRP sẽ được truyền và chuyển tiếp qua lại giữa các trình điều khiển thiết bị ở mỗi lớp.
2.2 Phân lớp hệ điều hành
Ý tưởng thiết kế của Windows là thiết kế kernel càng nhỏ càng tốt và áp dụng cấu trúc "máy khách-máy chủ". Mỗi thành phần hoặc mô-đun của hệ điều hành giao tiếp thông qua các tin nhắn.
- Hệ thống con Win32: Đây là hệ thống Windows thuần túy nhất. Các hệ thống con khác được triển khai thông qua giao diện của hệ thống con win32 và thường hiếm khi được sử dụng.
- API Natvie: Thêm tiền tố Nt dựa trên api win32, dựa trên các cân nhắc về tính tương thích của phiên bản
- Dịch vụ hệ thống: API gốc chuyển sang chế độ kernel từ chế độ người dùng và gọi các dịch vụ hệ thống. (Được thực hiện bằng ngắt mềm, bị mắc kẹt trong kernel)
- Thành phần thực thi: Một tập hợp các chức năng dịch vụ ở chế độ kernel.
- Chương trình quản lý đối tượng: Hầu như tất cả các dịch vụ do hệ điều hành Windows cung cấp đều tồn tại dưới dạng đối tượng. Các đối tượng ở đây tương tự như việc giới thiệu đối tượng trong các ngôn ngữ hướng đối tượng. Chẳng hạn như quản lý đối tượng trình điều khiển, đối tượng thiết bị, v.v.
- Trình quản lý quy trình: Chịu trách nhiệm tạo và kết thúc các tiến trình được xử lý bởi kernel. Trình quản lý quy trình phụ thuộc vào các thành phần thực thi khác.
- Trình quản lý bộ nhớ ảo: Với sự hỗ trợ của đơn vị quản lý bộ nhớ (MMU) của CPU, nó liên kết bộ nhớ vật lý và bộ nhớ ảo thông qua một số loại ánh xạ.
- Người quản lý I/O: Chịu trách nhiệm khởi tạo các yêu cầu I/O và quản lý các yêu cầu. Nó bao gồm một loạt các quy trình ở chế độ kernel cung cấp giao diện hợp nhất cho các quy trình ở chế độ người dùng. Mục tiêu của trình quản lý I/O là thực hiện các yêu cầu I/O từ chế độ người dùng độc lập với thiết bị.
- Chương trình quản lý cấu hình: Chương trình quản lý cấu hình ghi lại thông tin cấu hình của tất cả phần mềm và phần cứng máy tính. Nó sử dụng cơ sở dữ liệu được gọi là sổ đăng ký để lưu trữ dữ liệu này. Trình điều khiển thiết bị được tải dựa trên thông tin trong sổ đăng ký
- Trình điều khiển: Sau khi nhận được ứng dụng, trình quản lý I/O tạo IRP tương ứng và gửi cho trình điều khiển để xử lý:
- Theo yêu cầu IRP, trực tiếp vận hành phần cứng, sau đó hoàn thành IRP này và trả lại
- Theo yêu cầu IRP, nó được chuyển tiếp đến trình điều khiển cấp thấp hơn và chờ trình điều khiển cấp thấp hơn quay trở lại.
- Sau khi nhận được driver IRP, đừng vội hoàn thành nó. Thay vào đó hãy phân bổ số đại biểu IRP mới cho các trình điều khiển khác và chờ đợi sự trở lại.
- Kernel: Kernel được coi là trái tim của hệ điều hành Windows. Nhân của Windows được tách biệt khỏi các thành phần thực thi. So với các thành phần thực thi, kernel rất nhỏ:
- Hỗ trợ các đối tượng kernel.
- Lên lịch chủ đề
- Hỗ trợ đồng bộ hóa đa bộ xử lý.
- Hỗ trợ chức năng xử lý ngắt.
- Hỗ trợ bẫy ngoại lệ.
- Hỗ trợ các tính năng đặc biệt khác của phần cứng.
- Lớp trừu tượng phần cứng: Các nền tảng phần cứng khác nhau cung cấp các lớp trừu tượng phần cứng khác nhau và cung cấp giao diện thống nhất để vận hành phần cứng cho lớp trên.
2.3 Ứng dụng và trình điều khiển
3. khung trình điều khiển windows
3.1 Mô hình trình điều khiển:
Trình điều khiển Windows được chia thành các loại sau:
- trình điều khiển chức năng: trình điều khiển chức năng thiết bị
- trình điều khiển bộ lọc: trình điều khiển phụ trợ thiết bị
- trình điều khiển phần mềm: trình điều khiển mô-đun phần mềm
- tài xế xe buýt: trình điều khiển thiết bị xe buýt
3.2 Thúc đẩy sự phát triển
- Model NT: Trước năm 2000, PNP (thiết bị Plug and Play) không được hỗ trợ
- Mô hình WDM: Dựa trên NT, hỗ trợ PNP
- WDF: Đóng gói lại WDM
- KMDF: chế độ kernel (sys)
- UMDF: chế độ người dùng (dll)
- win7 x64, hệ điều hành tạo nên kỷ nguyên, khởi động chữ ký số
- win10: Chữ ký xác thực kép, nghĩa là yêu cầu bảo mật đối với driver cao hơn.
3.3 Điều khiển hệ thống phân cấp dọc
- Theo thứ tự tạo thiết bị, PDO dưới cùng được tạo trước, sau đó tạo FDO cấp cao, nghĩa là từ thiết bị dưới cùng đến thiết bị cấp cao.
- Có thể có nhiều trình điều khiển bộ lọc khác nhau giữa PDO và FDO. Mỗi lớp đối tượng thiết bị được tạo bởi một trình điều khiển khác nhau hoặc mỗi lớp thiết bị tương ứng với một trình điều khiển khác nhau.
- Đối tượng thiết bị cơ bản tìm kiếm đối tượng thiết bị của lớp trên bằng cách dựa vào AttachedDevice của đối tượng thiết bị cơ bản.
3.4 Ổ đĩa phân cấp theo chiều ngang
Mối quan hệ giữa các đối tượng thiết bị được tạo bởi cùng một trình điều khiển được gọi là mối quan hệ phân cấp theo chiều ngang.
Mỗi thiết bị có thể tìm thấy đối tượng thiết bị tiếp theo trong hệ thống phân cấp ngang thông qua NextDevice.
3.5 Cấu trúc trình điều khiển phức tạp
4. Thiết lập môi trường phát triển windows
4.1 Triển khai môi trường phát triển
Lấy win10 làm ví dụ, những thứ cần cài đặt sẽ được liệt kê. Quá trình chi tiết sẽ được cập nhật sau do giới hạn về dung lượng.
- Cài đặt VS2019
- Cài đặt Windows SDK: Nhân tiện đã cài đặt VS 2019
- Cài đặt WDK
- Cài đặt hệ thống ảo VMware + Win10
4.2 Các công cụ gỡ lỗi phổ biến
- Windbg: Gỡ lỗi kernel. WDK đi kèm với nó và có thể được sử dụng với cổng nối tiếp hoặc mạng để gỡ lỗi nhân Windows.
- DebugViewer: Xem bản in kernel
- driverMonitor: cài đặt trình điều khiển
- PCHunter_free: Buộc phải gỡ cài đặt driver và phiên bản 2004 không được hỗ trợ.
- devicetree: liệt kê thiết bị
- winobj: Xem các liên kết tượng trưng
5. Gợi ý học driver Windows
Có rất ít sách, bài đăng trên blog và hướng dẫn về phát triển trình điều khiển Windows. Nếu bạn có nhu cầu về vấn đề này, tôi có thể cung cấp cho bạn những gợi ý sau:
- Thiết lập môi trường: win7 32 + vs2013 là đủ. Không nên dùng win10 + vs2019. Nó còn khá mới và rất khó giải quyết vấn đề khi gặp phải chúng. Thứ hai, một số công cụ gỡ lỗi sớm có thể không được phiên bản win10 mới nhất hỗ trợ.
- Bỏ qua chữ ký số: Trước tiên hãy sử dụng chế độ kiểm tra và cài đặt trình điều khiển. Còn không thì chỉ cần cài đặt và triển khai là đủ rắc rối rồi.
- Mức đầu vào sử dụng mô hình trình điều khiển WDM. Có tương đối nhiều sách và tài liệu về WDM trên thị trường, và nói một cách tương đối thì có rất nhiều tài liệu phát triển WDF.
Đọc thêm sách. Có rất nhiều thông tin về trình điều khiển Windows và Linux. Nếu bạn gặp điều gì đó không hiểu, hãy tham gia nhóm kỹ thuật và đọc sách.
Liên kết gốc: https://mp.weixin.qq.com/s/eN2PolmYGHeh_Y2MYEW3Xg.
Cuối cùng, bài viết này thảo luận ngắn gọn về việc phát triển trình điều khiển Windows. Bài viết này kết thúc tại đây Nếu bạn muốn biết thêm về phát triển trình điều khiển Windows, bạn có biết không? Về nội dung, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!