Vietnamese (machine translation)

Lưu ý

Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.

Bản gốc:

drm/vkms Virtual Kernel Modesetting

Người dịch:

Google Translate (machine translation)

Phiên bản gốc:

8541d8f725c6

Cảnh báo

Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.

drm/vkms Cài đặt chế độ hạt nhân ảo

Cài đặt

Trình điều khiển VKMS có thể được thiết lập theo các bước sau:

Để kiểm tra xem VKMS đã được tải chưa, hãy chạy:

lsmod | grep vkm

Điều này sẽ liệt kê trình điều khiển VKMS. Nếu không thu được đầu ra thì bạn cần kích hoạt và/hoặc tải trình điều khiển VKMS. Đảm bảo rằng trình điều khiển VKMS đã được đặt làm mô-đun có thể tải trong tập tin cấu hình kernel. LÀM:

tạo nconfig

Đi đến ZZ0000ZZ

Kích hoạt ZZ0000ZZ

Biên dịch và xây dựng kernel để những thay đổi được phản ánh. Bây giờ, để tải trình điều khiển, hãy sử dụng:

sudo modprobe vkms

Khi chạy lệnh lsmod bây giờ, trình điều khiển VKMS sẽ xuất hiện trong danh sách. Bạn cũng có thể quan sát trình điều khiển đang được tải trong nhật ký dmesg.

Trình điều khiển VKMS có các tính năng tùy chọn để mô phỏng các loại phần cứng khác nhau, được hiển thị dưới dạng tùy chọn mô-đun. Bạn có thể sử dụng lệnh ZZ0000ZZ để xem các tùy chọn mô-đun cho vkms:

modinfo vkms

Tùy chọn mô-đun rất hữu ích khi thử nghiệm và kích hoạt mô-đun có thể được thực hiện trong khi tải vkms. Ví dụ: để tải vkm khi bật con trỏ, sử dụng:

Sudo modprobe vkms Enable_cursor=1

Để tắt trình điều khiển, hãy sử dụng

sudo modprobe -r vkms

Định cấu hình bằng Configfs

Có thể tạo và định cấu hình nhiều phiên bản VKMS thông qua configfs.

Bắt đầu bằng cách gắn configfs và tải VKMS:

sudo mount -t configfs none/config

sudo modprobe vkms

Khi VKMS được tải, ZZ0000ZZ sẽ được tạo tự động. Mỗi thư mục trong ZZ0001ZZ đại diện cho một phiên bản VKMS, hãy tạo một phiên bản mới:

sudo mkdir /config/vkms/my-vkms

Theo mặc định, phiên bản bị tắt:

mèo /config/vkms/my-vkms/enabled

0

Và các thư mục được tạo cho từng mục có thể định cấu hình của đường dẫn hiển thị

cây /config/vkms/my-vkms

├── đầu nối ├── crtcs ├── đã bật ├── bộ mã hóa └── máy bay

Để thêm các mục vào đường dẫn hiển thị, hãy tạo một hoặc nhiều thư mục trong những con đường có sẵn.

Bắt đầu bằng cách tạo một hoặc nhiều mặt phẳng:

sudo mkdir /config/vkms/my-vkms/planes/plane0

Máy bay có 1 thuộc tính có thể cấu hình:

  • loại: Loại mặt phẳng: 0 lớp phủ, 1 chính, 2 con trỏ (cùng giá trị với các giá trị đó được hiển thị bởi thuộc tính “loại” của mặt phẳng)

Tiếp tục bằng cách tạo một hoặc nhiều CRTC:

sudo mkdir /config/vkms/my-vkms/crtcs/crtc0

CRTC có 1 thuộc tính có thể định cấu hình:

  • writeback: Bật hoặc tắt hỗ trợ trình kết nối ghi lại bằng cách viết 1 hoặc 0

Tiếp theo, tạo một hoặc nhiều bộ mã hóa:

Sudo mkdir /config/vkms/my-vkms/bộ mã hóa/bộ mã hóa0

Cuối cùng nhưng không kém phần quan trọng, hãy tạo một hoặc nhiều trình kết nối:

sudo mkdir /config/vkms/my-vkms/connectors/connector0

Trình kết nối có 1 thuộc tính có thể định cấu hình:

  • trạng thái: Trạng thái kết nối: 1 đã kết nối, 2 đã ngắt kết nối, 3 không xác định (cùng giá trị như những thuộc tính được hiển thị bởi thuộc tính “trạng thái” của trình kết nối)

Để hoàn tất cấu hình, hãy liên kết các mục quy trình khác nhau:

sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs

Sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/bộ mã hóa/bộ mã hóa0/possible_crtcs sudo ln -s /config/vkms/my-vkms/encodes/encode0 /config/vkms/my-vkms/connectors/connector0/possible_encodings

Vì cần có ít nhất một mặt phẳng chính nên hãy đảm bảo đặt đúng loại

tiếng vang “1” | sudo tee /config/vkms/my-vkms/planes/plane0/type

Khi bạn đã hoàn tất việc định cấu hình phiên bản VKMS, hãy kích hoạt nó:

tiếng vang “1” | sudo tee /config/vkms/my-vkms/enabled

Cuối cùng, bạn có thể xóa phiên bản VKMS đang vô hiệu hóa nó:

tiếng vang “0” | sudo tee /config/vkms/my-vkms/enabled

Và xóa thư mục cấp cao nhất và các thư mục con của nó

sudo rm /config/vkms/my-vkms/planes/ZZ0000ZZ

sudo rm /config/vkms/my-vkms/bộ mã hóa/ZZ0001ZZ sudo rm /config/vkms/my-vkms/connectors/ZZ0002ZZ sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* Sudo rmdir /config/vkms/my-vkms/bộ mã hóa/* Sudo rmdir /config/vkms/my-vkms/connectors/* sudo rmdir /config/vkms/my-vkms

Thử nghiệm với IGT

Công cụ IGT GPU là bộ thử nghiệm được sử dụng riêng để gỡ lỗi và phát triển trình điều khiển DRM. Công cụ IGT có thể được cài đặt từ ZZ0000ZZ.

Các bài kiểm tra cần được chạy mà không có bộ tổng hợp, vì vậy bạn cần chuyển sang văn bản chế độ duy nhất. Bạn có thể làm điều này bằng cách:

sudo systemctl cô lập nhiều người dùng.target

Để quay lại chế độ đồ họa, hãy thực hiện:

sudo systemctl cô lập đồ họa.target

Khi ở chế độ chỉ văn bản, bạn có thể chạy thử nghiệm bằng IGT_FORCE_DRIVER biến để chỉ định bộ lọc thiết bị cho trình điều khiển mà chúng tôi muốn kiểm tra. IGT_FORCE_DRIVER cũng có thể được sử dụng với tập lệnh run-tests.sh để chạy kiểm tra cho một trình điều khiển cụ thể:

sudo IGT_FORCE_DRIVER=”vkms” ./build/tests/<tên bài kiểm tra>

sudo IGT_FORCE_DRIVER=”vkms” ./scripts/run-tests.sh -t <tên bài kiểm tra>

Ví dụ: để kiểm tra chức năng của thư viện writeback, chúng ta có thể chạy thử nghiệm kms_writeback:

sudo IGT_FORCE_DRIVER=”vkms” ./build/tests/kms_writeback

sudo IGT_FORCE_DRIVER=”vkms” ./scripts/run-tests.sh -t kms_writeback

Bạn cũng có thể chạy bài kiểm tra phụ nếu bạn không muốn chạy toàn bộ bài kiểm tra:

sudo IGT_FORCE_DRIVER=”vkms” ./build/tests/kms_flip --run-subtest basic-plain-flip

Kiểm tra với KUnit

KUnit (Khung kiểm thử đơn vị hạt nhân) cung cấp một khung chung cho các thử nghiệm đơn vị bên trong nhân Linux. Thông tin thêm trong KUnit - Kiểm tra đơn vị hạt nhân Linux .

Để chạy thử nghiệm VKMS KUnit:

công cụ/kiểm tra/kunit/kunit.py chạy --kunitconfig=drivers/gpu/drm/vkms/tests

TODO

Nếu bạn muốn thực hiện bất kỳ mục nào được liệt kê dưới đây, vui lòng chia sẻ sở thích của bạn với bộ bảo trì VKMS.

IGT hỗ trợ tốt hơn

Gỡ lỗi:

  • kms_plane: một số trường hợp thử nghiệm không thành công do hết thời gian chờ chụp CRC;

Chế độ phần cứng ảo (vblank-less):

  • VKMS đã hỗ trợ vblank được mô phỏng thông qua đồng hồ tính giờ, có thể đã thử nghiệm với thử nghiệm kms_flip; theo một cách nào đó, chúng ta có thể nói rằng VKMS đã bắt chước vblank phần cứng thực sự. Tuy nhiên, chúng tôi cũng có phần cứng ảo có thể không hỗ trợ ngắt vblank và hoàn thành ngay sự kiện page_flip; trong trong trường hợp này, các nhà phát triển bộ tổng hợp có thể sẽ tạo ra một vòng lặp bận rộn trên máy ảo phần cứng. Sẽ rất hữu ích khi hỗ trợ hành vi Phần cứng ảo trong VKMS vì điều này có thể giúp các nhà phát triển bộ tổng hợp kiểm tra các tính năng của họ trong nhiều kịch bản.

Thêm tính năng máy bay

Có rất nhiều tính năng trên máy bay mà chúng tôi có thể thêm hỗ trợ cho:

  • Thêm thuộc tính màu nền KMS [Tốt để bắt đầu].

  • Thu nhỏ.

  • Các định dạng bộ đệm bổ sung. Các định dạng RGB bpp thấp/cao sẽ rất thú vị [Tốt để bắt đầu].

  • Cập nhật không đồng bộ (hiện chỉ có thể thực hiện được trên mặt phẳng con trỏ bằng cách sử dụng phiên bản cũ api con trỏ).

Đối với tất cả những điều này, chúng tôi cũng muốn xem xét phạm vi kiểm tra igt và đảm bảo tất cả các trường hợp thử nghiệm igt có liên quan đều hoạt động trên vkm. Họ là những lựa chọn tốt cho việc thực tập dự án.

Cấu hình thời gian chạy

Chúng tôi muốn có thể cấu hình lại phiên bản vkms mà không cần phải tải lại mô-đun thông qua configfs. Trường hợp sử dụng/thử nghiệm:

  • Đầu nối hotplug/hotremove nhanh chóng (để có thể kiểm tra khả năng xử lý DP MST của các nhà soạn nhạc).

  • Thay đổi cấu hình đầu ra: Cắm/rút màn hình, thay đổi EDID, cho phép thay đổi tốc độ làm mới.

Hỗ trợ viết lại

  • Các hoạt động ghi lại và ghi CRC chia sẻ việc sử dụng Composer_enabled boolean để đảm bảo vblanks. Có lẽ, khi các hoạt động này phối hợp với nhau, Composer_enabled cần đếm lại trạng thái của nhà soạn nhạc để hoạt động phù hợp. [Tốt để bắt đầu]

  • Thêm hỗ trợ cho các đầu ra ghi lại nhân bản và các trường hợp kiểm thử liên quan bằng cách sử dụng đầu ra được nhân bản trong IGT kms_writeback.

  • Là một thiết bị v4l. Điều này rất hữu ích để gỡ lỗi các bộ tổng hợp trên các vkm đặc biệt cấu hình, để các nhà phát triển thấy được điều gì đang thực sự diễn ra.

Tính năng đầu ra

  • Hỗ trợ tốc độ làm mới/freesync thay đổi. Điều này có lẽ cần bộ đệm chính hỗ trợ chia sẻ để chúng tôi có thể sử dụng hàng rào vgem để mô phỏng kết xuất trong thử nghiệm. Cũng cần hỗ trợ để chỉ định EDID.

  • Thêm hỗ trợ cho trạng thái liên kết để các nhà soạn nhạc có thể xác thực thời gian chạy của họ dự phòng khi ví dụ: liên kết Cổng hiển thị bị lỗi.

CRC API Cải tiến

  • Tối ưu hóa tính toán CRC ZZ0000ZZ và trộn mặt phẳng ZZ0001ZZ

Kiểm tra nguyên tử bằng eBPF

Trình điều khiển nguyên tử có rất nhiều hạn chế không được tiếp xúc với không gian người dùng trong bất kỳ hình thức rõ ràng nào thông qua ví dụ: các giá trị thuộc tính có thể có. Không gian người dùng chỉ có thể yêu cầu về các giới hạn này thông qua IOCTL nguyên tử, có thể sử dụng Cờ TEST_ONLY. Đang cố gắng thêm mã có thể định cấu hình cho tất cả các giới hạn này để cho phép các nhà soạn nhạc được thử nghiệm với chúng sẽ là một việc làm vô ích. Thay vào đó chúng tôi có thể thêm hỗ trợ cho eBPF để xác thực bất kỳ loại trạng thái nguyên tử nào và thực hiện một thư viện các hạn chế khác nhau.

Điều này cần một loạt các tính năng (tổng hợp mặt phẳng, nhiều đầu ra, ...) kích hoạt đã có ý nghĩa.