Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

  • 開發流程
  • 提交補丁
  • 行為準則
  • 維護者手冊
  • 所有開發流程文件
  • 核心 API
  • 驅動程式 API
  • 子系統
  • 鎖
  • 許可規則
  • 編寫文件
  • 開發工具
  • 測試指南
  • Hacking 指南
  • 跟蹤
  • 故障注入
  • 熱補丁
  • Rust
  • 管理
  • 構建系統
  • 報告問題
  • 使用者空間工具
  • 使用者空間 API
    • 系統呼叫
    • 安全相關介面
    • 裝置與 I/O
    • 其他
      • Linux 特有的 ELF 怪癖
      • Netlink 手冊
      • 平臺配置檔案選擇 (例如 /sys/firmware/acpi/platform_profile)
      • VDUSE - “使用者空間 vDPA 裝置”
      • futex2
      • Perf 環形緩衝區
      • NT 同步原語驅動程式
  • 韌體
  • 韌體和裝置樹
  • CPU 架構
  • 未分類文件
  • 翻譯

本頁

  • 顯示源

Netlink 規範 C 程式碼生成¶

本文件描述了 Netlink 規範如何用於生成 C 程式碼(包括 uAPI、策略等)。它還定義了在舊家族中由 genetlink-c 協議級別允許的額外屬性,以控制命名。

為簡潔起見,本文件透過物件型別來指代各種物件的 name 屬性。例如,$attr 是屬性中 name 的值,而 $family 是家族的名稱(全域性 name 屬性)。

大寫字母用於表示字面值,例如 $family-CMD 表示 $family、一個破折號字元和字面值 CMD 的連線。

#define 和列舉值的名稱總是轉換為大寫,並且將破折號 (-) 替換為下劃線 (_)。

如果構造的名稱是 C 關鍵字,則會附加一個額外的下劃線(do -> do_)。

全域性設定¶

c-family-name 控制家族名稱的 #define 名稱,預設為 $family-FAMILY-NAME。

c-version-name 控制家族版本的 #define 名稱,預設為 $family-FAMILY-VERSION。

max-by-define 選擇列舉的最大值是定義為 #define 還是在列舉內部定義。

定義¶

常量¶

每個常量都以 #define 的形式生成。常量的名稱為 $family-$constant,其值根據規範中的型別呈現為字串或整數。

列舉和標誌¶

列舉被命名為 $family-$enum。完整名稱可以直接設定,也可以透過指定 enum-name 屬性來抑制。預設條目名稱為 $family-$enum-$entry。如果指定了 name-prefix,它將替換條目名稱中 $family-$enum 的部分。

布林值 render-max 控制最大值的建立(對於屬性列舉預設啟用)。這些最大值被命名為 __$pfx-MAX 和 $pfx-MAX。第一個值的名稱可以透過 enum-cnt-name 屬性覆蓋。

屬性¶

每個屬性集(不包括分數集)都以列舉形式生成。

屬性列舉在 netlink 標頭檔案中傳統上是無名的。如果需要命名,可以使用 enum-name 來指定名稱。

如果集的名稱與家族的名稱相同,預設屬性名稱字首為 $family-A;如果名稱不同,則為 $family-A-$set。該字首可以透過集的 name-prefix 屬性覆蓋。本節其餘部分將該字首稱為 $pfx。

屬性被命名為 $pfx-$attribute。

屬性列舉以兩個特殊值 __$pfx-MAX 和 $pfx-MAX 結尾,這些值用於確定屬性表的大小。這兩個名稱可以直接透過 attr-cnt-name 和 attr-max-name 屬性分別指定。

如果在全域性級別將 max-by-define 設定為 true,則 attr-max-name 將被指定為 #define 而非列舉值。

操作¶

操作被命名為 $family-CMD-$operation。如果指定了 name-prefix,它將替換名稱中 $family-CMD 的部分。

與屬性列舉類似,操作列舉以特殊的計數和最大值屬性結尾。對於操作,這些屬性可以使用 cmd-cnt-name 和 cmd-max-name 進行重新命名。如果 max-by-define 為 true,則最大值將是一個 define。

多播組¶

每個多播組都會在核心 uAPI 標頭檔案中生成一個 define。該 define 的名稱為 $family-MCGRP-$group,可以透過 c-define-name 屬性覆蓋。

程式碼生成¶

uAPI 標頭檔案假定來自預設標頭檔案搜尋路徑中的 <linux/$family.h>。可以透過 uapi-header 全域性屬性進行更改。

© 核心開發社群。| 由 Sphinx 5.3.0 和 Alabaster 0.7.16 提供支援 | 頁面源