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只需要給...