009 裝置樹屬性的獲取 以LED為例

2021-09-28 19:47:10 字數 2644 閱讀 3111

linux引入裝置樹,把硬體分到裝置樹檔案中,驅動中仍然需要硬體資訊。

所以必須將裝置樹中的硬體資訊傳到驅動中。

裝置樹屬性獲取函式標頭檔案:include/linux/of.h

裝置樹中使用 device_node 結構體描述節點,of.h中的api需要device_node作為引數傳入。

struct device_node 

;

如果我們想要獲取裝置樹中的屬性(資料),必須先獲取device_node,這個節點會在probe初始化的時候傳入。

驅動中獲取device_node方法:

struct device_node *node = pdev->dev.of_node
struct property 

;

獲取屬性引數的函式

根據屬性名稱,提取屬性值

struct property *

of_find_property

(const

struct device_node *np,

const

char

*name,

int*lenp)

;/**

* of_find_property - 提取指定屬性的值

* @np - 裝置樹節點指標

* @name - 屬性名稱

* @lenp - 屬性值的位元組數

*/

itop4412_of_get_info.c

#include

#include

#include

#include

#include

module_license

("dual bsd/gpl");

module_author

("skyfall");

module_description

("itop4412_of_get_info");

#define driver_name "seedling"

static

intleds_probe

(struct platform_device * pdev)

static

intleds_remove

(struct platform_device * pdev)

static

const

struct of_device_id of_leds_dt_match=

,,};

module_device_table

(of,of_leds_dt_match)

;static

struct platform_driver leds_driver =,}

;static

int __init leds_init

(void

)static

void __exit leds_exit

(void

)module_init

(leds_init)

;module_exit

(leds_exit)

;

#!/bin/bash

$(warning kernelrelease =

$(kernelrelease)

)ifeq (

$(kernelrelease)

,)#核心的原始碼路徑, ?= 條件賦值, uname -r 得到核心版本號

kerneldir ?= /home/mint/itop/linux_4.14

#kerneldir ?=

# := 立即賦值, 得到當前的絕對路徑

pwd :=

$(shell pwd

)# -c 切換工作路徑, $(make) = make

modules:

$(make)

-c $(kerneldir)

m=$(pwd)

modules

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions module* modules*

.phony: modules clean

else

# 生成模組

obj-m := itop4412_of_get_info.o

endif

1、載入驅動2、獲取資訊

3、解除安裝驅動

網上關於linux驅動的資料中,看到裝置節點,可能有三種意思:

裝置樹節點;

平台檔案的裝置節點;

/dev下的裝置節點。

ARM開發之雜項裝置的編寫 以LED驅動為例

平台 s5pv210 雜項裝置的好處 有了字元型裝置後,為什麼要用雜項裝置?1.節省主裝置號,所有雜項裝置的主裝置號都是10 2.雜項裝置開發起來比字元型裝置簡單 開發步驟 1.定義1個雜項裝置 2.定義雜項裝置的檔案操作集 3.申請物理記憶體區 4.獲取相應的虛擬位址 5.註冊混雜裝置 6.示例 ...

屬性指令的解析原理 以 v if 為例

面試中,面試官不免要問,關於v if這類的指令,實現的原理是什麼?效果圖示 htnl id root 我是指令的展示和隱藏div 我是要隱藏的div div 我們期望在介面上,展示的效果是這樣的 第一步 獲取元素dom節點 var el document.getelementbyid root 第二...

程式設計操控乙個硬體的步驟(以LED為例)

首先我們需要明白的是 暫存器是操控硬體的api介面。我們如果想操控led是通過gpio來間接操控的,實質是操控soc的gpio的的暫存器,從而控制led這個硬體工作。led本身有2個接線點,乙個是led的正極,乙個是led的負極。led這個硬體的功能就是點亮或者不亮,物理上想要點亮一顆led只需要給...