中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linux驅(qū)動(dòng)中常用的一些接口函數(shù)
userphoto

2023.06.20 湖北

關(guān)注


設(shè)備樹相關(guān)

查找節(jié)點(diǎn)的of函數(shù)

of_find_node_by_name

struct device_node *of_find_node_by_name(struct device_node *from, const char *name);

通過節(jié)點(diǎn)名字查找指定的節(jié)點(diǎn)

  • from:要開始查找的節(jié)點(diǎn)
  • name:節(jié)點(diǎn)名字

of_find_node_by_type

通過 device_type 屬性查找指定的節(jié)點(diǎn),函數(shù)原型如下:

struct device_node *of_find_node_by_type(struct device_node *from,
          const char *type)
;

函數(shù)參數(shù)和返回值含義如下:

  • from: 開始查找的節(jié)點(diǎn),如果為 NULL 表示從根節(jié)點(diǎn)開始查找整個(gè)設(shè)備樹。

  • type: 要查找的節(jié)點(diǎn)對應(yīng)的 type 字符串,也就是 device_type 屬性值。

  • 返回值: 找到的節(jié)點(diǎn),如果為 NULL 表示查找失敗。

of_find_compatible_node

根據(jù) device_type 和 compatible 這兩個(gè)屬性查找指定的節(jié)點(diǎn),函數(shù)原型如下:

struct device_node *of_find_compatible_node(struct device_node *from,
           const char *type,
           const char *compatible)
;

函數(shù)參數(shù)和返回值含義如下:

from: 開始查找的節(jié)點(diǎn),如果為 NULL 表示從根節(jié)點(diǎn)開始查找整個(gè)設(shè)備樹。

type: 要查找的節(jié)點(diǎn)對應(yīng)的 type 字符串,也就是 device_type 屬性值,可以為 NULL,表示忽略掉 device_type 屬性。

compatible: 要查找的節(jié)點(diǎn)所對應(yīng)的 compatible 屬性列表。

返回值: 找到的節(jié)點(diǎn),如果為 NULL 表示查找失敗

of_find_matching_node_and_match

通過 of_device_id 匹配表來查找指定的節(jié)點(diǎn),函數(shù)原型如下:

struct device_node *of_find_matching_node_and_match(struct device_node *from,
             const struct of_device_id *matches,
             const struct of_device_id `match)
;

函數(shù)參數(shù)和返回值含義如下:

  • from: 開始查找的節(jié)點(diǎn),如果為 NULL 表示從根節(jié)點(diǎn)開始查找整個(gè)設(shè)備樹。
  • matches: of_device_id 匹配表,也就是在此匹配表里面查找節(jié)點(diǎn)。
  • match: 找到的匹配的 of_device_id。
  • 返回值: 找到的節(jié)點(diǎn),如果為 NULL 表示查找失敗

of_find_node_by_path

過路徑來查找指定的節(jié)點(diǎn),函數(shù)原型如下:

inline struct device_node *of_find_node_by_path(const char *path);

函數(shù)參數(shù)和返回值含義如下:

  • path: 帶有全路徑的節(jié)點(diǎn)名,可以使用節(jié)點(diǎn)的別名,比如“/backlight”就是 backlight 這個(gè)節(jié)點(diǎn)的全路徑。
  • 返回值: 找到的節(jié)點(diǎn),如果為 NULL 表示查找失敗

查找父子節(jié)點(diǎn)的函數(shù)

of_get_parent

用于獲取指定節(jié)點(diǎn)的父節(jié)點(diǎn),原型如下:

struct device_node *of_get_parent(const struct device_node *node);

函數(shù)參數(shù)和返回值含義如下:

  • node: 需要查找父節(jié)點(diǎn)的子節(jié)點(diǎn);
  • 返回值: 返回父節(jié)點(diǎn);

of_get_next_child

用迭代的查找子節(jié)點(diǎn),函數(shù)原型如下:

struct device_node *of_get_next_child(const struct device_node *node,
         struct device_node *prev)
;

函數(shù)參數(shù)和返回值含義如下:

  • node: 父節(jié)點(diǎn);
  • prev: 前一個(gè)子節(jié)點(diǎn),也就是從哪一個(gè)子節(jié)點(diǎn)開始迭代的查找下一個(gè)子節(jié)點(diǎn)。可以設(shè)置為NULL,表示從第一個(gè)子節(jié)點(diǎn)開始。
  • 返回值: 找到的下一個(gè)子節(jié)點(diǎn)。

提取屬性的of函數(shù)

of_find_property

用于查找指定的屬性,函數(shù)原型如下:

property *of_find_property(const struct device_node *np,
       const char *name,
       int *lenp)
;

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn);
  • name: 屬性名字;
  • lenp: 屬性值的字節(jié)數(shù);

返回值: 找到的屬性。

of_property_count_elems_of_size

用于獲取屬性中元素的數(shù)量,比如 reg 屬性值是一個(gè)數(shù)組,那么使用此函數(shù)可以獲取到這個(gè)數(shù)組的大小,此函數(shù)原型如下:

int of_property_count_elems_of_size(const struct device_node *np,
         const char *propname,
         int elem_size)
;

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。
  • proname: 需要統(tǒng)計(jì)元素?cái)?shù)量的屬性名字。
  • elem_size: 元素長度。

返回值: 得到的屬性元素?cái)?shù)量。

of_property_read_u8_array

從屬性中查找并讀取 u8 數(shù)組,此函數(shù)原型如下:

int of_property_read_u8_array(const struct device_node *np,
             const char *propname, u8 *out_values, size_t sz)

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn);
  • proname: 要讀取的屬性名字;
  • out_values: 指向返回值的指針,僅當(dāng)返回值為 0 時(shí)才修改;
  • sz: 要讀取的數(shù)組元素?cái)?shù);

返回值: 0 讀取成功,負(fù)值,讀取失敗, -EINVAL 表示屬性不存在。-ENODATA 表示沒有要讀取的數(shù)據(jù), -EOVERFLOW 表示屬性值列表太小。

of_property_read_u8

讀取 u8類型屬性值,函數(shù)原型如下:

int of_property_read_u8(const struct device_node *np,
      const char *propname,
      u8 *out_value)

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。
  • proname: 要讀取的屬性名字。
  • out_value: 讀取到的數(shù)組值。

返回值: 0,讀取成功,負(fù)值,讀取失敗, -EINVAL 表示屬性不存在, -ENODATA 表示沒有要讀取的數(shù)據(jù), -EOVERFLOW 表示屬性值列表太小。

of_property_read_string

用于讀取屬性中字符串值,函數(shù)原型如下:

int of_property_read_string(struct device_node *np,
       const char *propname,
       const char `out_string)
;

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。
  • proname: 要讀取的屬性名字。
  • out_string: 讀取到的字符串值。

返回值: 0,讀取成功,負(fù)值,讀取失敗。

of_n_addr_cells

用于獲取 #address-cells 屬性值,函數(shù)原型如下:

int of_n_addr_cells(struct device_node *np);

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。
  • 返回值: 獲取到的#address-cells 屬性值。

of_n_size_cells

用于獲取 #size-cells 屬性值,函數(shù)原型如下:

int of_n_size_cells(struct device_node *np);

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。

返回值: 獲取到的#size-cells 屬性值。

其他常用of函數(shù)

of_get_address

用于獲取地址相關(guān)屬性,主要是“reg”或者“assigned-addresses”屬性 值,函數(shù)屬性如下:

const __be32 *of_get_address(struct device_node *dev,
       int index,
       u64 *size,
       unsigned int *flags)
;

函數(shù)參數(shù)和返回值含義如下:

  • dev: 設(shè)備節(jié)點(diǎn)。
  • index: 要讀取的地址標(biāo)號。
  • size: 地址長度。
  • flags: 參數(shù),比如 IORESOURCE_IO、 IORESOURCE_MEM 等

返回值: 讀取到的地址數(shù)據(jù)首地址,為 NULL 的話表示讀取失敗。

of_translate_address

負(fù)責(zé)將從設(shè)備樹讀取到的地址轉(zhuǎn)換為物理地址,函數(shù)原型如下:

u64 of_translate_address(struct device_node *dev,
      const __be32 *in_addr)
;

函數(shù)參數(shù)和返回值含義如下:

  • dev: 設(shè)備節(jié)點(diǎn)。
  • in_addr: 要轉(zhuǎn)換的地址。

返回值: 得到的物理地址,如果為 OF_BAD_ADDR 的話表示轉(zhuǎn)換失敗。

of_address_to_resource

從設(shè)備樹里面提取資源值,但是本質(zhì)上就是將 reg 屬性值,然后將其轉(zhuǎn)換為 resource 結(jié)構(gòu)體類型,函數(shù)原型如下所示:

int of_address_to_resource(struct device_node *dev,
       int index,
       struct resource *r)
;

函數(shù)參數(shù)和返回值含義如下:

  • dev: 設(shè)備節(jié)點(diǎn)。
  • index: 地址資源標(biāo)號。
  • r: 得到的 resource 類型的資源值。

返回值: 0,成功;負(fù)值,失敗。

of_iomap

用于直接內(nèi)存映射,以前我們會通過 ioremap來完成物理地址到虛擬地址的映射,采用設(shè)備樹以后就可以直接通過 of_iomap來獲取內(nèi)存地址所對應(yīng)的虛擬地址,不需要使用 ioremap了。該函數(shù)的原型如下:

void __iomem *of_iomap(struct device_node *np,
      int index)
;

函數(shù)參數(shù)和返回值含義如下:

  • np: 設(shè)備節(jié)點(diǎn)。

  • index: reg 屬性中要完成內(nèi)存映射的段,如果 reg 屬性只有一段的話 index 就設(shè)置為 0。

  • 返回值: 經(jīng)過內(nèi)存映射后的虛擬內(nèi)存首地址,如果為 NULL 的話表示內(nèi)存映射失敗。

GPIO相關(guān)

GPIO子系統(tǒng)相關(guān)函數(shù)

gpio_request

申請一個(gè)GPIO

int gpio_request(unsigned gpio, const char *label)

gpio:管腳號;

label:管腳名,可以為空(NULL)

返回值:成功返回0,失敗返回錯(cuò)誤碼

gpio_free

釋放注冊的GPIO

void gpio_free(unsigned gpio)

gpio:管腳號

gpio_direction_input

設(shè)置GPIO為輸入,函數(shù)原型如下:

int gpio_direction_input(unsigned gpio)

gpio:管腳號

返回值:成功返回0,失敗返回錯(cuò)誤碼

gpio_get_value

獲取GPIO輸入值,函數(shù)原型如下:

int gpio_get_value(unsigned gpio) 

gpio:管腳號

返回值:0或1

gpio_set_value

設(shè)置GPIO控制值,函數(shù)原型如下:

void gpio_set_value(unsigned gpio, int value)

gpio:管腳號;

value:控制值,0或1

與GPIO相關(guān)的of函數(shù)

of_gpio_named_count

用于獲取設(shè)備樹某個(gè)屬性里面定義了幾個(gè) GPIO 信息,函數(shù)原型如下:

int of_gpio_named_count(struct device_node *np, const char *propname)

np:設(shè)備節(jié)點(diǎn)

propname:要統(tǒng)計(jì)的gpio屬性

返回值:正確返回統(tǒng)計(jì)的gpio數(shù)量,錯(cuò)誤返回負(fù)數(shù)

of_gpio_count

用于統(tǒng)計(jì)gpios 這個(gè)屬性的 GPIO 數(shù)量,函數(shù)原型如下:

int of_gpio_count(struct device_node *np)

np:設(shè)備節(jié)點(diǎn)

返回值:正確返回統(tǒng)計(jì)的gpio數(shù)量,錯(cuò)誤返回負(fù)數(shù)

of_get_named_gpio

用于獲取 GPIO 編號,函數(shù)原型如下:

int of_get_named_gpio(struct device_node *np, const char *propname, int index)

np:設(shè)備節(jié)點(diǎn)

propname:包含要獲取 GPIO 信息的屬性名

index:GPIO 索引

返回值:正確返回獲取到的GPIO編號,錯(cuò)誤返回負(fù)數(shù)

devm相關(guān)

clock

devm_clk_get

用于獲取時(shí)鐘源,函數(shù)原型如下:

struct clk *devm_clk_get(struct device *dev, const char *id);

dev:device設(shè)備

id:時(shí)鐘源名字,可以為NULL

返回值:正確返回struct clk指針,錯(cuò)誤返回NULL

devm_clk_put

用于釋放時(shí)鐘源,函數(shù)原型如下:

void devm_clk_put(struct device * dev, struct clk * clk);

dev:device設(shè)備

id:時(shí)鐘源名字

iomap

devm_ioremap_resource

先申請,后映射物理內(nèi)存,函數(shù)原型如下:

void __iomem *devm_ioremap_resource(struct device *dev,
        const struct resource *res)
;

dev:device設(shè)備

res:resource資源

返回值:成功返回虛擬地址指針,識別返回錯(cuò)誤碼

devm_iounmap

釋放之前映射的地址,函數(shù)原型如下:

void devm_iounmap(struct device *dev, void __iomem *addr);

dev:device設(shè)備

addr:要釋放的虛擬地址

irq

devm_request_irq

用于注冊中斷服務(wù)函數(shù),函數(shù)原型如下:

int devm_request_irq(struct device *dev, unsigned int irq, irq_handle_t handle, 
                unsigned int flags, const char *name, void* dev_id)
;

dev:device設(shè)備

irq:中斷號,可以通過platform_get_irq獲得

handle:中斷處理函數(shù)

flags:中斷觸發(fā)方式,上升沿/下降沿等

name:中斷名稱

dev_id:中斷共享時(shí)用到,一般設(shè)置為結(jié)構(gòu)體或NULL

devm_free_irq

用于釋放devm_request_irq注冊的中斷,函數(shù)原型如下:

void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id)

dev:device設(shè)備

irq:中斷號,與devm_request_irq注冊的對應(yīng)

dev_id:與devm_request_irq注冊的對應(yīng)

mem

devm_kmalloc

分配的內(nèi)存物理上連續(xù)(虛擬上也連續(xù)),只能在低端內(nèi)存分配(直接內(nèi)存映射區(qū)),函數(shù)原型如下:

void *kmalloc(size_t size, gfp_t gfp);

size:分配的大小

gfp:申請內(nèi)存的類型標(biāo)志

devm_kzalloc

與devm_kmalloc類似,只不過devm_kzalloc會對申請到的內(nèi)存內(nèi)容清零,函數(shù)原型如下:

void * devm_kzalloc (struct device * dev, size_t size, gfp_t gfp);

dev:device設(shè)備

size:申請內(nèi)存的大小

gfp:申請內(nèi)存的類型標(biāo)志

devm_kfree

devm_kmalloc()devm_kzalloc()申請的內(nèi)存必須調(diào)用devm_kfree()釋放,函數(shù)原型如下:

void devm_kfree(struct device *dev, void *p);

dev:device設(shè)備

p:內(nèi)存指針

pinctrl

devm_pinctrl_get

用于獲取pin操作句柄,函數(shù)原型如下:

struct pinctrl * devm_pinctrl_get(struct device *dev)

dev:device設(shè)備

返回值:pinctrl句柄

devm_pinctrl_put

用于釋放pin操作句柄,函數(shù)原型如下:

void devm_pinctrl_put(struct pinctrl *p)

p:pinctrl句柄

以上就是比較常用的一些接口,當(dāng)然像devm的接口還有很多,這里只列舉clock、mem等會經(jīng)常用到的接口。


來源:嵌入式Linux充電站


溫馨提示:
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux設(shè)備管理的簡單分析
芯靈思Sinlinx A64 linux 通過設(shè)備樹寫LED驅(qū)動(dòng)(附參考代碼,未測試)
linux內(nèi)核中的GPIO系統(tǒng)之(2):pin control subsystem
Linux i2c子系統(tǒng)(四) _從i2c-s3c24xx.c看i2c控制器驅(qū)動(dòng)的編寫
linux內(nèi)核的內(nèi)存分配函數(shù)
iTOP-STM32MP157開發(fā)板設(shè)備樹查找節(jié)點(diǎn)的of函數(shù)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服