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:

Kernel Mode Setting (KMS)

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/.

Cài đặt chế độ hạt nhân (KMS)

Trình điều khiển phải khởi tạo lõi cài đặt chế độ bằng cách gọi drmm_mode_config_init() trên thiết bị DRM. chức năng khởi tạo ZZ0000ZZ trường mode_config và không bao giờ bị lỗi. Sau khi thực hiện xong, cấu hình chế độ phải được thiết lập bằng cách khởi tạo các trường sau.

  • int min_width, min_height; int max_width, max_height;

    Chiều rộng và chiều cao tối thiểu và tối đa của vùng đệm khung tính bằng pixel đơn vị.

  • struct drm_mode_config_funcs *funcs;

    Chức năng cài đặt chế độ.

Tổng quan

KMS Display Pipeline

KMS Display Pipeline Overview

Cấu trúc đối tượng cơ bản mà KMS trình bày cho không gian người dùng khá đơn giản. Bộ đệm khung (đại diện bởi ZZ0000ZZ, xem ZZ0003ZZ) đưa vào mặt phẳng. Các mặt phẳng được biểu diễn bởi ZZ0001ZZ, xem ZZ0004ZZ để biết thêm chi tiết. Một hoặc nhiều (hoặc thậm chí không có) mặt phẳng nào cung cấp dữ liệu pixel của chúng vào CRTC (đại diện bởi ZZ0002ZZ, xem ZZ0005ZZ) để pha trộn. Bước trộn chính xác được giải thích chi tiết hơn trong ZZ0006ZZ và các chương liên quan.

Để định tuyến đầu ra, bước đầu tiên là bộ mã hóa (được biểu thị bằng ZZ0000ZZ, xem ZZ0001ZZ). Những cái đó thực sự chỉ là tạo phẩm nội bộ của các thư viện trợ giúp được sử dụng để triển khai KMS trình điều khiển. Ngoài ra, chúng còn khiến không gian người dùng trở nên phức tạp hơn một cách không cần thiết. để tìm ra những kết nối nào có thể thực hiện được giữa CRTC và đầu nối và loại nhân bản nào được hỗ trợ, chúng không phục vụ mục đích nào trong không gian người dùng API. Rất tiếc, bộ mã hóa đã tiếp xúc với không gian người dùng nên không thể xóa chúng vào thời điểm này. Hơn nữa, các hạn chế được đưa ra thường được đặt sai bởi trình điều khiển và trong nhiều trường hợp không đủ mạnh để thể hiện những hạn chế thực sự. CRTC có thể được kết nối với nhiều bộ mã hóa và đối với CRTC đang hoạt động thì phải có có ít nhất một bộ mã hóa.

Điểm cuối thực và cuối cùng trong chuỗi hiển thị là đầu nối (được biểu thị bởi ZZ0000ZZ, xem ZZ0001ZZ). Các trình kết nối có thể có các bộ mã hóa khác nhau, nhưng hạt nhân trình điều khiển chọn bộ mã hóa sẽ sử dụng cho mỗi đầu nối. Trường hợp sử dụng là DVI, có thể chuyển đổi giữa bộ mã hóa analog và kỹ thuật số. Bộ mã hóa cũng có thể điều khiển nhiều đầu nối khác nhau. Có chính xác một trình kết nối hoạt động cho mọi bộ mã hóa đang hoạt động.

Quy trình đầu ra bên trong phức tạp hơn một chút và phù hợp với quy trình ngày nay phần cứng chặt chẽ hơn:

KMS Output Pipeline

KMS Output Pipeline

Bên trong có hai đối tượng trợ giúp bổ sung phát huy tác dụng. Đầu tiên, để có thể chia sẻ mã cho bộ mã hóa (đôi khi trên cùng một SoC, đôi khi ngoài chip) một hoặc thêm ZZ0000ZZ (đại diện là ZZ0001ZZ) có thể được liên kết với bộ mã hóa. Liên kết này là tĩnh và không thể đã thay đổi, có nghĩa là thanh ngang (nếu có) cần được ánh xạ giữa CRTC và bất kỳ bộ mã hóa nào. Thường đối với những người lái xe có cầu thì không còn mã ở cấp độ bộ mã hóa. Trình điều khiển nguyên tử có thể loại bỏ tất cả lệnh gọi lại bộ mã hóa thành về cơ bản chỉ để lại một đối tượng định tuyến giả phía sau, điều này cần thiết cho khả năng tương thích ngược vì bộ mã hóa được tiếp xúc với không gian người dùng.

Đối tượng thứ hai dành cho các bảng, được biểu thị bằng ZZ0000ZZ, xem ZZ0001ZZ. Các tấm không có ràng buộc cố định điểm, nhưng thường được liên kết với cấu trúc riêng của trình điều khiển nhúng ZZ0002ZZ.

Lưu ý rằng hiện tại việc kết nối cầu nối và tương tác với các đầu nối và các bảng vẫn đang thay đổi và chưa thực sự được sắp xếp đầy đủ.

Cấu trúc và chức năng cốt lõi của KMS

Trừu tượng hóa đối tượng cơ sở Modeset

Mode Objects and Properties

Mode Objects and Properties

Cấu trúc cơ sở cho tất cả các đối tượng KMS là ZZ0000ZZ. Một trong những dịch vụ cơ bản mà nó cung cấp là theo dõi các thuộc tính, điều này đặc biệt quan trọng đối với IOCTL nguyên tử (xem ZZ0002ZZ). Phần đáng ngạc nhiên ở đây là các thuộc tính không được khởi tạo trực tiếp trên từng đối tượng, nhưng bản thân các đối tượng ở chế độ độc lập, được đại diện bởi ZZ0001ZZ, chỉ xác định loại và phạm vi giá trị của một thuộc tính. Bất kỳ thuộc tính nào cũng có thể được đính kèm nhiều lần tới các đối tượng khác nhau bằng cách sử dụng drm_object_attach_property().

Cài đặt chế độ nguyên tử

Mode Objects and Properties

Mode Objects and Properties

Atomic cung cấp các cập nhật về chế độ giao dịch (bao gồm cả mặt phẳng), nhưng một hơi khác so với cách tiếp cận giao dịch thông thường của cam kết thử và quay lại:

  • Thứ nhất, không được phép thay đổi phần cứng khi cam kết không thành công. Cái này cho phép chúng tôi triển khai chế độ DRM_MODE_ATOMIC_TEST_ONLY, cho phép không gian người dùng để khám phá xem một số cấu hình nhất định có hoạt động hay không.

  • Điều này vẫn sẽ cho phép cài đặt và khôi phục trạng thái phần mềm, đơn giản hóa việc chuyển đổi các trình điều khiển hiện có. Nhưng việc kiểm tra trình điều khiển cho tính chính xác của mã Atomic_check trở nên thực sự khó khăn với điều đó: Cán khó có thể thực hiện đúng những thay đổi trong cấu trúc dữ liệu ở khắp mọi nơi.

  • Cuối cùng, để tương thích ngược và hỗ trợ tất cả các trường hợp sử dụng, nguyên tử các bản cập nhật cần phải tăng dần và có thể thực hiện song song. Phần cứng không phải lúc nào cũng cho phép, nhưng nếu có thể, hãy cập nhật máy bay trên các CRTC khác nhau không nên can thiệp và không bị đình trệ do định tuyến đầu ra thay đổi CRTC khác nhau.

Tổng hợp tất cả lại, có hai hệ quả đối với thiết kế nguyên tử:

  • Trạng thái tổng thể được chia thành các cấu trúc trạng thái theo từng đối tượng: ZZ0000ZZ cho mặt phẳng, ZZ0001ZZ cho CRTC và ZZ0002ZZ cho đầu nối. Đây là những thứ duy nhất các đối tượng có trạng thái có thể nhìn thấy và có thể cài đặt trong không gian người dùng. Đối với trình điều khiển trạng thái nội bộ có thể phân lớp các cấu trúc này thông qua việc nhúng hoặc thêm trạng thái hoàn toàn mới cấu trúc cho các chức năng phần cứng được chia sẻ toàn cầu của họ, xem ZZ0003ZZ.

  • Một bản cập nhật nguyên tử được tập hợp và xác nhận dưới dạng một đống hoàn toàn độc lập của các cấu trúc trong ZZ0000ZZ thùng chứa. Cấu trúc trạng thái riêng của trình điều khiển cũng được theo dõi trong cùng kết cấu; xem chương tiếp theo. Chỉ khi một trạng thái được cam kết thì nó mới được áp dụng tới các đối tượng trình điều khiển và chế độ. Bằng cách này, việc khôi phục bản cập nhật sẽ hoàn tất để giải phóng bộ nhớ và các đối tượng không tham chiếu như bộ đệm khung.

Khóa cấu trúc trạng thái nguyên tử được sử dụng nội bộ bằng ZZ0000ZZ. Theo nguyên tắc chung, không nên khóa tiếp xúc với người lái xe, thay vào đó, các khóa phù hợp sẽ được tự động lấy bằng cách bất kỳ chức năng nào sao chép hoặc nhìn vào một trạng thái, chẳng hạn như drm_atomic_get_crtc_state(). Khóa chỉ bảo vệ dữ liệu phần mềm cấu trúc, thứ tự cam kết thay đổi trạng thái đối với phần cứng được sắp xếp theo trình tự bằng cách sử dụng ZZ0001ZZ.

Đọc tiếp trong chương này và cả trong ZZ0000ZZ để biết thêm chi tiết bao quát các chủ đề cụ thể.

Xử lý trạng thái riêng của tài xế

Tham khảo chức năng cài đặt chế độ nguyên tử

Cài đặt chế độ nguyên tử Chức năng IOCTL và UAPI

Trừu tượng CRTC

Tham khảo chức năng CRTC

Tham khảo chức năng quản lý màu

Trừu tượng bộ đệm khung

Tham khảo chức năng bộ đệm khung

Xử lý định dạng DRM

Tham khảo hàm định dạng

Đối tượng đệm câm

Trừu tượng mặt phẳng

Tham khảo hàm mặt phẳng

Tham chiếu hàm thành phần mặt phẳng

Tham khảo chức năng theo dõi hư hỏng máy bay

Tính năng hoảng loạn máy bay

Tài liệu tham khảo về chức năng hoảng loạn của máy bay

Trừu tượng màu

Tham khảo chức năng Colorop

Chế độ hiển thị Chức năng Tham khảo

Trừu tượng hóa trình kết nối

Tham khảo chức năng kết nối

Trình kết nối ghi lại

Trừu tượng bộ mã hóa

Tham khảo chức năng bộ mã hóa

Khóa KMS

Thuộc tính KMS

Phần tài liệu này chủ yếu nhắm đến các nhà phát triển không gian người dùng. Đối với API trình điều khiển, hãy xem các phần khác.

Yêu cầu

Trình điều khiển KMS có thể cần thêm các thuộc tính bổ sung để hỗ trợ các tính năng mới. Mỗi Thuộc tính mới được giới thiệu trong trình điều khiển cần phải đáp ứng một số yêu cầu, trong ngoài cái đã đề cập ở trên:

  • Phải được chuẩn hóa, ghi chép:

  • Chuỗi tên đầy đủ, chính xác; * Nếu thuộc tính là enum, tất cả các chuỗi tên giá trị hợp lệ; * Những giá trị nào được chấp nhận và những giá trị này có ý nghĩa gì; * Tài sản có tác dụng gì và có thể sử dụng tài sản đó như thế nào; * Làm thế nào tài sản có thể tương tác với các tài sản hiện có khác.

  • Nó phải cung cấp một trình trợ giúp chung trong mã lõi để đăng ký thuộc tính trên đối tượng mà nó gắn vào.

  • Nội dung của nó phải được giải mã bởi lõi và cung cấp trong đối tượng cấu trúc trạng thái liên quan Điều đó bao gồm mọi thứ mà người lái xe có thể muốn để tính toán trước, như struct drm_clip_ect cho mặt phẳng.

  • Trạng thái ban đầu của nó phải khớp với hành vi trước thuộc tính giới thiệu. Đây có thể là một giá trị cố định phù hợp với những gì phần cứng có, hoặc nó có thể được kế thừa từ trạng thái phần sụn còn lại hệ thống trong khi khởi động.

  • Phải gửi bài kiểm tra IGT nếu hợp lý.

Vì lý do lịch sử, tồn tại các thuộc tính không chuẩn, dành riêng cho trình điều khiển. Nếu là KMS driver muốn thêm hỗ trợ cho một trong những thuộc tính đó, các yêu cầu đối với các thuộc tính mới được áp dụng nếu có thể. Ngoài ra, hành vi được ghi lại phải khớp với ngữ nghĩa thực tế của thuộc tính hiện có để đảm bảo tính tương thích. Các nhà phát triển trình điều khiển đã thêm thuộc tính lần đầu tiên sẽ trợ giúp những vấn đề đó nhiệm vụ và phải ACK hành vi được ghi lại nếu có thể.

Các loại thuộc tính và hỗ trợ thuộc tính Blob

Thuộc tính kết nối tiêu chuẩn

Thuộc tính kết nối cụ thể của HDMI

Thuộc tính kết nối cụ thể của TV analog

Thuộc tính CRTC tiêu chuẩn

Thuộc tính mặt phẳng tiêu chuẩn

Thuộc tính thành phần mặt phẳng

Thuộc tính theo dõi thiệt hại

Thuộc tính quản lý màu

Thuộc tính nhóm ngói

Thuộc tính hàng rào rõ ràng

Thuộc tính làm mới biến

Thuộc tính điểm phát sóng con trỏ

Thuộc tính KMS hiện có

Bảng sau đây mô tả các thuộc tính drm được thể hiện bằng nhiều mô-đun/trình điều khiển. Vì bảng này rất khó sử dụng nên đừng thêm bất kỳ cái gì mới tài sản ở đây. Thay vào đó hãy ghi lại chúng trong phần trên.

Owner Module/Drivers

Group

Property Name

Type

Property Values

Object attached

Description/Restrictions

DVI-I

“subconnector”

ENUM

{ “Unknown”, “DVI-D”, “DVI-A” }

Connector

TBD

“select subconnector”

ENUM

{ “Automatic”, “DVI-D”, “DVI-A” }

Connector

TBD

TV

“subconnector”

ENUM

{ “Unknown”, “Composite”, “SVIDEO”, “Component”, “SCART” }

Connector

TBD

“select subconnector”

ENUM

{ “Automatic”, “Composite”, “SVIDEO”, “Component”, “SCART” }

Connector

TBD

“mode”

ENUM

{ “NTSC_M”, “NTSC_J”, “NTSC_443”, “PAL_B” } etc.

Connector

TBD

“left margin”

RANGE

Min=0, Max=100

Connector

TBD

“right margin”

RANGE

Min=0, Max=100

Connector

TBD

“top margin”

RANGE

Min=0, Max=100

Connector

TBD

“bottom margin”

RANGE

Min=0, Max=100

Connector

TBD

“brightness”

RANGE

Min=0, Max=100

Connector

TBD

“contrast”

RANGE

Min=0, Max=100

Connector

TBD

“flicker reduction”

RANGE

Min=0, Max=100

Connector

TBD

“overscan”

RANGE

Min=0, Max=100

Connector

TBD

“saturation”

RANGE

Min=0, Max=100

Connector

TBD

“hue”

RANGE

Min=0, Max=100

Connector

TBD

Virtual GPU

“suggested X”

RANGE

Min=0, Max=0xffffffff

Connector

property to suggest an X offset for a connector

“suggested Y”

RANGE

Min=0, Max=0xffffffff

Connector

property to suggest an Y offset for a connector

Optional

“aspect ratio”

ENUM

{ “None”, “4:3”, “16:9” }

Connector

TDB

“audio”

ENUM

{ “force-dvi”, “off”, “auto”, “on” }

Connector

TBD

SDVO-TV

“mode”

ENUM

{ “NTSC_M”, “NTSC_J”, “NTSC_443”, “PAL_B” } etc.

Connector

TBD

“left_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“right_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“top_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“bottom_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“hpos”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“vpos”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“contrast”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“saturation”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“hue”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“sharpness”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter_adaptive”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter_2d”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“tv_chroma_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“tv_luma_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“dot_crawl”

RANGE

Min=0, Max=1

Connector

TBD

SDVO-TV/LVDS

“brightness”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

CDV gma-500

Generic

“Broadcast RGB”

ENUM

{ “Full”, “Limited 16:235” }

Connector

TBD

Poulsbo

Generic

“backlight”

RANGE

Min=0, Max=100

Connector

TBD

SDVO-TV

“mode”

ENUM

{ “NTSC_M”, “NTSC_J”, “NTSC_443”, “PAL_B” } etc.

Connector

TBD

“left_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“right_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“top_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“bottom_margin”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“hpos”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“vpos”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“contrast”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“saturation”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“hue”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“sharpness”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter_adaptive”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“flicker_filter_2d”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“tv_chroma_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“tv_luma_filter”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

“dot_crawl”

RANGE

Min=0, Max=1

Connector

TBD

SDVO-TV/LVDS

“brightness”

RANGE

Min=0, Max= SDVO dependent

Connector

TBD

armada

CRTC

“CSC_YUV”

ENUM

{ “Auto” , “CCIR601”, “CCIR709” }

CRTC

TBD

“CSC_RGB”

ENUM

{ “Auto”, “Computer system”, “Studio” }

CRTC

TBD

Overlay

“colorkey”

RANGE

Min=0, Max=0xffffff

Plane

TBD

“colorkey_min”

RANGE

Min=0, Max=0xffffff

Plane

TBD

“colorkey_max”

RANGE

Min=0, Max=0xffffff

Plane

TBD

“colorkey_val”

RANGE

Min=0, Max=0xffffff

Plane

TBD

“colorkey_alpha”

RANGE

Min=0, Max=0xffffff

Plane

TBD

“colorkey_mode”

ENUM

{ “disabled”, “Y component”, “U component” , “V component”, “RGB”, “R component”, “G component”, “B component” }

Plane

TBD

“brightness”

RANGE

Min=0, Max=256 + 255

Plane

TBD

“contrast”

RANGE

Min=0, Max=0x7fff

Plane

TBD

“saturation”

RANGE

Min=0, Max=0x7fff

Plane

TBD

exynos

CRTC

“mode”

ENUM

{ “normal”, “blank” }

CRTC

TBD

i2c/ch7006_drv

Generic

“scale”

RANGE

Min=0, Max=2

Connector

TBD

TV

“mode”

ENUM

{ “PAL”, “PAL-M”,”PAL-N”}, ”PAL-Nc” , “PAL-60”, “NTSC-M”, “NTSC-J” }

Connector

TBD

nouveau

NV10 Overlay

“colorkey”

RANGE

Min=0, Max=0x01ffffff

Plane

TBD

“contrast”

RANGE

Min=0, Max=8192-1

Plane

TBD

“brightness”

RANGE

Min=0, Max=1024

Plane

TBD

“hue”

RANGE

Min=0, Max=359

Plane

TBD

“saturation”

RANGE

Min=0, Max=8192-1

Plane

TBD

“iturbt_709”

RANGE

Min=0, Max=1

Plane

TBD

Nv04 Overlay

“colorkey”

RANGE

Min=0, Max=0x01ffffff

Plane

TBD

“brightness”

RANGE

Min=0, Max=1024

Plane

TBD

Display

“dithering mode”

ENUM

{ “auto”, “off”, “on” }

Connector

TBD

“dithering depth”

ENUM

{ “auto”, “off”, “on”, “static 2x2”, “dynamic 2x2”, “temporal” }

Connector

TBD

“underscan”

ENUM

{ “auto”, “6 bpc”, “8 bpc” }

Connector

TBD

“underscan hborder”

RANGE

Min=0, Max=128

Connector

TBD

“underscan vborder”

RANGE

Min=0, Max=128

Connector

TBD

“vibrant hue”

RANGE

Min=0, Max=180

Connector

TBD

“color vibrance”

RANGE

Min=0, Max=200

Connector

TBD

omap

Generic

“zorder”

RANGE

Min=0, Max=3

CRTC, Plane

TBD

qxl

Generic

“hotplug_mode_update”

RANGE

Min=0, Max=1

Connector

TBD

radeon

DVI-I

“coherent”

RANGE

Min=0, Max=1

Connector

TBD

DAC enable load detect

“load detection”

RANGE

Min=0, Max=1

Connector

TBD

TV Standard

“tv standard”

ENUM

{ “ntsc”, “pal”, “pal-m”, “pal-60”, “ntsc-j” , “scart-pal”, “pal-cn”, “secam” }

Connector

TBD

legacy TMDS PLL detect

“tmds_pll”

ENUM

{ “driver”, “bios” }

TBD

Underscan

“underscan”

ENUM

{ “off”, “on”, “auto” }

Connector

TBD

“underscan hborder”

RANGE

Min=0, Max=128

Connector

TBD

“underscan vborder”

RANGE

Min=0, Max=128

Connector

TBD

Audio

“audio”

ENUM

{ “off”, “on”, “auto” }

Connector

TBD

FMT Dithering

“dither”

ENUM

{ “off”, “on” }

Connector

TBD

“colorkey”

RANGE

Min=0, Max=0x01ffffff

Plane

TBD

Dọc trống

Tham khảo chức năng xử lý ngắt và xóa dọc

Công việc trống dọc

Tham khảo chức năng làm việc trống dọc