phandle全方位介紹

一、phandle翻譯

phandle翻譯成中文為「指針句柄」,其實就是一個用於唯一標識設備或節點的句柄,它在設備樹中被廣泛應用。在設備樹中,每個節點都有一個phandle字段,通過phandle可以找到節點的詳細信息。

二、handy與handle的不同

在英語中,handy和handle都表示「手柄」之意,那麼在Linux中,它們和phandle有什麼不同呢?

handy是一種用於處理指向內核對象的句柄,如file結構體,以及內核中的其他通用句柄類型。而handle通常指特定類型的句柄,如fd句柄、struct file *句柄、struct inode *句柄等。

與handy和handle不同,phandle是使用在設備樹中的一種特殊的句柄,其用於標識一個節點。雖然它們有相似的含義,但在Linux內核中具體使用的情況是有所不同的。

三、phandle的使用場景

phandle主要被應用於Linux內核中的設備樹機制,通過phandle可以在設備樹中數據結構中唯一標識一個節點,主要有以下應用場景:

1、設備樹節點的父子關係和兄弟關係的獲取;

2、對設備節點進行操作,通過phandle查找設備節點。

四、在設備樹節點中使用phandle

在設備樹節點中的使用方法如下:

struct acpi_device_id usb_hid_device_ids[] = {
    {"USBC0001", 0},
    {""},
};
MODULE_DEVICE_TABLE(acpi, usb_hid_device_ids);

static struct acpi_driver usb_hid_driver = {
    .name = "usb_hid_acpi",
    .class = "hid",
    .ids = usb_hid_device_ids,
    .ops = &usb_hid_acpi_ops,
    .owner = THIS_MODULE,
};

static int __init usb_hid_acpi_init(void)
{
    return acpi_bus_register_driver(&usb_hid_driver);
}
module_init(usb_hid_acpi_init);

static void __exit usb_hid_acpi_exit(void)
{
    acpi_bus_unregister_driver(&usb_hid_driver);
}
module_exit(usb_hid_acpi_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Ingo Molnar ");
MODULE_DESCRIPTION("ACPI driver for USB HID devices");

五、phandle與DTS

Device Tree Source (DTS)是一種以文本文件形式表示硬件信息的數據結構,而phandle在DTB中用於標識某個節點。因此,我們可以在DTS中使用phandle來確定節點關係。例如:

/ {
    clock-frequency = ;
    compatible = "simple-bus";
    #address-cells = ;
    #size-cells = ;
    child-node@0 {
        phandle = ;
        clock-frequency = ;
        compatible = "my,device";
        reg = ;
    };

六、總結

本文介紹了phandle的定義、handy和handle的不同之處,以及在Linux內核中使用phandle的場景和在DTS中使用phandle的方法。隨着設備樹機制的不斷完善,phandle將會在更多的領域得到應用。

原創文章,作者:TVNVG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329062.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TVNVG的頭像TVNVG
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

發表回復

登錄後才能評論