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:

Kconfig Language

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

Ngôn ngữ Kconfig

Giới thiệu

Cơ sở dữ liệu cấu hình là tập hợp các tùy chọn cấu hình được tổ chức theo cấu trúc cây:

+- Tùy chọn mức độ trưởng thành của mã
+- Nhắc nhở phát triển và/hoặc mã/trình điều khiển chưa hoàn chỉnh

+- Thiết lập chung | +- Hỗ trợ mạng | +- Hệ thống V IPC | +- BSD Kế toán quy trình | +- Hỗ trợ hệ thống +- Hỗ trợ mô-đun có thể tải | +- Kích hoạt hỗ trợ mô-đun có thể tải | +- Đặt thông tin phiên bản trên tất cả các ký hiệu mô-đun | +- Trình tải mô-đun hạt nhân +- ...

Mỗi mục có sự phụ thuộc riêng của nó. Những phụ thuộc này được sử dụng để xác định khả năng hiển thị của một mục. Bất kỳ mục nhập con nào chỉ hiển thị nếu mục cha mẹ của nó cũng hiển thị.

Mục menu

Hầu hết các mục đều xác định tùy chọn cấu hình; tất cả các mục khác giúp tổ chức họ. Một tùy chọn cấu hình duy nhất được xác định như sau:

cấu hình MODVERSIONS

bool “Đặt thông tin phiên bản trên tất cả các ký hiệu mô-đun” phụ thuộc vào MODULES giúp đỡ

Thông thường, các mô-đun phải được biên dịch lại bất cứ khi nào bạn chuyển sang một mô-đun mới. hạt nhân. ...

Mỗi dòng bắt đầu bằng một từ khóa và có thể được theo sau bởi nhiều từ khóa lý lẽ. “config” bắt đầu một mục cấu hình mới. Những dòng sau xác định các thuộc tính cho tùy chọn cấu hình này. Các thuộc tính có thể là loại tùy chọn cấu hình, lời nhắc đầu vào, phần phụ thuộc, văn bản trợ giúp và mặc định các giá trị. Một tùy chọn cấu hình có thể được xác định nhiều lần với cùng một tên, nhưng mọi định nghĩa chỉ có thể có một dấu nhắc đầu vào duy nhất và loại không được xung đột.

Thuộc tính thực đơn

Một mục menu có thể có một số thuộc tính. Không phải tất cả trong số họ là áp dụng ở mọi nơi (xem cú pháp).

  • định nghĩa kiểu: “bool”/”tristate”/”string”/”hex”/”int”

Mỗi tùy chọn cấu hình phải có một loại. Chỉ có hai loại cơ bản:

tristate và chuỗi; các loại khác dựa trên hai loại này. Loại định nghĩa tùy ý chấp nhận lời nhắc đầu vào, vì vậy hai ví dụ này tương đương:

bool “Hỗ trợ mạng”

Và:

bool

nhắc “Hỗ trợ mạng”

  • dấu nhắc đầu vào: “prompt” <prompt> [“if” <expr>]

Mỗi mục menu có thể có nhiều nhất một dấu nhắc, được sử dụng để hiển thị

tới người dùng. Tùy chọn chỉ có thể thêm phần phụ thuộc cho lời nhắc này với “nếu”. Nếu không có lời nhắc, tùy chọn cấu hình sẽ không hiển thị ký hiệu, nghĩa là người dùng không thể trực tiếp thay đổi giá trị của nó (chẳng hạn như thay đổi giá trị trong ZZ0000ZZ) và tùy chọn sẽ không xuất hiện trong bất kỳ menu cấu hình. Giá trị của nó chỉ có thể được đặt thông qua “mặc định” và “chọn” (xem bên dưới).

  • giá trị mặc định: “mặc định” <expr> [“if” <expr>]

Tùy chọn cấu hình có thể có bất kỳ số lượng giá trị mặc định nào. Nếu nhiều

các giá trị mặc định được hiển thị, chỉ giá trị được xác định đầu tiên mới hoạt động. Giá trị mặc định không bị giới hạn ở mục menu nơi chúng tồn tại được xác định. Điều này có nghĩa là mặc định có thể được xác định ở một nơi khác hoặc bị ghi đè bởi định nghĩa trước đó. Giá trị mặc định chỉ được gán cho ký hiệu cấu hình nếu không có ký hiệu nào khác giá trị do người dùng đặt (thông qua lời nhắc nhập ở trên). Nếu một đầu vào lời nhắc hiển thị, giá trị mặc định được hiển thị cho người dùng và có thể bị anh ta lấn át. Theo tùy chọn, chỉ có thể thêm các phụ thuộc cho giá trị mặc định này bằng “nếu”.

Giá trị mặc định được cố tình đặt mặc định là ‘n’ để tránh làm phồng lên

xây dựng. Với một số ngoại lệ, các tùy chọn cấu hình mới sẽ không thay đổi điều này. các mục đích là để “tạo cấu hình cũ” để thêm ít nhất có thể vào cấu hình từ thả ra để thả ra.

Lưu ý:

Những điều đáng được coi là “mặc định” bao gồm:

  1. Tùy chọn Kconfig mới cho thứ luôn được xây dựng

    phải là “mặc định y”.

  2. Tùy chọn Kconfig gác cổng mới giúp ẩn/hiển thị Kconfig khác

    tùy chọn (nhưng không tạo ra bất kỳ mã nào của riêng nó), phải là “mặc định y” để mọi người sẽ thấy các tùy chọn khác đó.

  3. Hành vi của người lái xe phụ hoặc các tùy chọn tương tự dành cho người lái xe

    “mặc định n”. Điều này cho phép bạn cung cấp các giá trị mặc định hợp lý.

  4. Phần cứng hoặc cơ sở hạ tầng mà mọi người mong đợi, chẳng hạn như CONFIG_NET

    hoặc CONFIG_BLOCK. Đây là những trường hợp ngoại lệ hiếm hoi.

  • định nghĩa kiểu + giá trị mặc định:

“def_bool”/”def_tristate” <expr> [“if” <expr>]

Đây là ký hiệu viết tắt cho định nghĩa kiểu cộng với một giá trị.

Các phần phụ thuộc tùy chọn cho giá trị mặc định này có thể được thêm bằng “if”.

  • phụ thuộc: “phụ thuộc vào” <expr> [“if” <expr>]

Điều này xác định sự phụ thuộc cho mục menu này. Nếu nhiều

các phụ thuộc được xác định, chúng được kết nối với ‘&&’. phụ thuộc được áp dụng cho tất cả các tùy chọn khác trong mục menu này (cũng chấp nhận biểu thức “if”), vì vậy hai ví dụ này tương đương nhau:

bool “foo” nếu BAR

mặc định y nếu BAR

Và:

phụ thuộc vào BAR

bool “foo” mặc định y

Bản thân định nghĩa phụ thuộc có thể có điều kiện bằng cách thêm “if”

theo sau là một biểu thức. Ví dụ:

cấu hình FOO

ba bang phụ thuộc vào BAR nếu BAZ

nghĩa là FOO bị ràng buộc bởi giá trị của BAR chỉ khi BAZ là

cũng được thiết lập.

  • phụ thuộc ngược lại: “select” <symbol> [“if” <expr>]

Trong khi các phụ thuộc thông thường làm giảm giới hạn trên của ký hiệu (xem

bên dưới), các phụ thuộc ngược có thể được sử dụng để buộc giới hạn thấp hơn của một biểu tượng khác. Giá trị của biểu tượng menu hiện tại được sử dụng làm giá trị tối thiểu <biểu tượng> có thể được đặt thành. Nếu <ký hiệu> được chọn nhiều lần, giới hạn được đặt thành lựa chọn lớn nhất. Phụ thuộc ngược chỉ có thể được sử dụng với boolean hoặc tristate biểu tượng.

Lưu ý:

select nên được sử dụng cẩn thận. chọn sẽ buộc một biểu tượng thành một giá trị mà không cần truy cập các phần phụ thuộc. Bằng cách lạm dụng chọn, bạn thậm chí có thể chọn biểu tượng FOO nếu FOO phụ thuộc vào BAR thì chưa được đặt. Nói chung chỉ sử dụng chọn những biểu tượng không nhìn thấy được (không có lời nhắc ở bất cứ đâu) và cho các ký hiệu không có phụ thuộc. Điều đó sẽ hạn chế tính hữu ích nhưng mặt khác tránh được các cấu hình bất hợp pháp trên tất cả.

Nếu “select” <symbol> được theo sau bởi “if” <expr>, <symbol> sẽ là

được chọn bởi AND logic của giá trị của biểu tượng menu hiện tại và <expr>. Điều này có nghĩa là giới hạn dưới có thể bị hạ cấp do sự hiện diện của “nếu” <expr>. Hành vi này có vẻ kỳ lạ nhưng chúng tôi dựa vào nó. (Tương lai của hành vi này vẫn chưa được quyết định.)

  • phụ thuộc ngược yếu: “ngụ ý” <symbol> [“if” <expr>]

Điều này tương tự như “chọn” vì nó thực thi giới hạn thấp hơn trên một

ký hiệu ngoại trừ giá trị của ký hiệu “ngụ ý” vẫn có thể được đặt thành n từ phần phụ thuộc trực tiếp hoặc bằng lời nhắc hiển thị.

Cho ví dụ sau:

cấu hình FOO

ba chữ “foo” ngụ ý BAZ

cấu hình BAZ

tristate “baz” phụ thuộc vào BAR

Có thể có các giá trị sau:

cam kết sửa lỗi

06b718c01208 chọn A -> phụ thuộc vào A c22eacfe82f9 phụ thuộc vào A -> phụ thuộc vào B 6a91e854442c chọn A -> phụ thuộc vào A 118c565a8f2e chọn A -> chọn B f004e5594705 chọn A -> phụ thuộc vào A c7861f37b4c6 phụ thuộc vào A -> (null) 80c69915e5fb chọn A -> (null) (1) c2218e26c0d0 chọn A -> phụ thuộc vào A (1) d6ae99d04e1c chọn A -> phụ thuộc vào A 95ca19cf8cbf chọn A -> phụ thuộc vào A 8f057d7bca54 phụ thuộc vào A -> (null) 8f057d7bca54 phụ thuộc vào A -> chọn A a0701f04846e chọn A -> phụ thuộc vào A 0c8b92f7f259 phụ thuộc vào A -> (null) e4e9e0540928 chọn A -> phụ thuộc vào A (2) 7453ea886e87 phụ thuộc vào A > (null) (1) 7b1fff7e4fdf chọn A -> phụ thuộc vào A 86c747d2a4f0 chọn A -> phụ thuộc vào A d9f9ab51e55e chọn A -> phụ thuộc vào A 0c51a4d8abd6 phụ thuộc vào A -> chọn A (3) e98062ed6dc4 chọn A -> phụ thuộc vào A (3) 91e5d284a7f1 chọn A -> (null) ===================================================

  1. Trích dẫn một phần (hoặc không) lỗi.

  2. Đó dường như là ý chính của cách khắc phục đó.

  3. Lỗi tương tự.

Công việc kconfig trong tương lai

Công việc trên kconfig được hoan nghênh trên cả hai lĩnh vực làm rõ ngữ nghĩa và đánh giá việc sử dụng bộ giải SAT đầy đủ cho nó. Một bộ giải SAT đầy đủ có thể mong muốn kích hoạt các ánh xạ và/hoặc truy vấn phụ thuộc phức tạp hơn, ví dụ, một trường hợp sử dụng có thể có cho bộ giải SAT có thể là trường hợp xử lý các vấn đề phụ thuộc đệ quy đã biết hiện nay. Người ta không biết liệu điều này có giải quyết các vấn đề như vậy nhưng đánh giá như vậy là mong muốn. Nếu hỗ trợ đầy đủ SAT bộ giải tỏ ra quá phức tạp hoặc nó không thể giải quyết các vấn đề phụ thuộc đệ quy Kconfig ít nhất phải có ngữ nghĩa rõ ràng và được xác định rõ ràng. địa chỉ và các hạn chế hoặc yêu cầu về tài liệu, chẳng hạn như những yêu cầu liên quan đến với sự phụ thuộc đệ quy.

Công việc tiếp theo trên cả hai lĩnh vực này đều được hoan nghênh trên Kconfig. Chúng tôi xây dựng về cả hai điều này trong hai tiểu mục tiếp theo.

Ngữ nghĩa của Kconfig

Việc sử dụng Kconfig rất rộng, Linux hiện chỉ là một trong những người dùng của Kconfig: một nghiên cứu đã hoàn thành phân tích rộng rãi về việc sử dụng Kconfig trong 12 dự án [0]. Mặc dù được sử dụng rộng rãi và mặc dù tài liệu này thực hiện công việc hợp lý trong việc ghi lại cú pháp Kconfig cơ bản, định nghĩa chính xác hơn về Kconfig ngữ nghĩa được hoan nghênh. Một dự án đã suy luận ngữ nghĩa Kconfig thông qua việc sử dụng bộ cấu hình xconfig [1]. Công việc nên được thực hiện để xác nhận nếu ngữ nghĩa được suy luận phù hợp với mục tiêu thiết kế Kconfig dự định của chúng tôi. Một dự án khác đã chính thức hóa ngữ nghĩa biểu thị của một tập hợp con cốt lõi của ngôn ngữ Kconfig [10].

Việc xác định rõ ngữ nghĩa có thể hữu ích cho các công cụ thực hành đánh giá sự phụ thuộc, ví dụ một trường hợp như vậy là làm việc để thể hiện dưới dạng trừu tượng boolean của ngữ nghĩa được suy ra của Kconfig thành dịch logic Kconfig thành các công thức boolean và chạy bộ giải SAT trên này để tìm thấy mã/tính năng chết (luôn không hoạt động), tìm thấy 114 tính năng chết trong Linux sử dụng phương pháp này [1] (Phần 8: Các mối đe dọa đối với tính hợp lệ). Công cụ kimet, dựa trên ngữ nghĩa trong [10], tìm ra sự lạm dụng đảo ngược phụ thuộc và đã dẫn đến hàng tá bản sửa lỗi được cam kết cho các tệp Linux Kconfig [11].

Việc xác nhận điều này có thể hữu ích vì Kconfig là một trong những công ty hàng đầu ngôn ngữ lập mô hình biến đổi công nghiệp [1] [2]. Nghiên cứu của nó sẽ giúp đánh giá việc sử dụng thực tế của các ngôn ngữ đó, việc sử dụng chúng chỉ mang tính lý thuyết và các yêu cầu của thế giới thực không được hiểu rõ. Mặc dù vậy chỉ có các kỹ thuật đảo ngược được sử dụng để suy ra ngữ nghĩa từ ngôn ngữ lập mô hình biến thiên như Kconfig [3].

Bộ giải SAT đầy đủ cho Kconfig

Mặc dù bộ giải SAT [4] vẫn chưa được Kconfig sử dụng trực tiếp, như đã lưu ý Tuy nhiên, trong tiểu mục trước, công việc đã được thực hiện để thể hiện bằng boolean trừu tượng hóa ngữ nghĩa được suy ra của Kconfig để dịch logic Kconfig sang công thức boolean và chạy bộ giải SAT trên đó [5]. Một dự án liên quan khác được biết đến là CADOS [6] (trước đây là VAMOS [7]) và các công cụ, chủ yếu là người đảm nhận [8], mà đã được giới thiệu đầu tiên với [9]. Khái niệm cơ bản của người đảm nhận là trích xuất các mô hình biến thiên từ Kconfig và ghép chúng lại với nhau bằng một công thức mệnh đề được trích xuất từ CPP #ifdefs và xây dựng các quy tắc thành SAT bộ giải để tìm mã chết, tập tin chết và biểu tượng chết. Nếu sử dụng SAT bộ giải được mong muốn trên Kconfig, một cách tiếp cận sẽ là đánh giá việc tái sử dụng những nỗ lực như vậy bằng cách nào đó trên Kconfig. Có đủ sự quan tâm từ các cố vấn của các dự án hiện tại không chỉ giúp tư vấn cách tích hợp công việc này ngược dòng mà còn giúp duy trì nó lâu dài. Các nhà phát triển quan tâm nên truy cập:

ZZ0000ZZ