导航:首页 > 器材知识 > 设备树如何引用子节点

设备树如何引用子节点

发布时间:2025-06-11 05:17:57

① Linux设备树语法详解

Linux内核自3.x版本引入设备树概念,用于实现驱动代码与设备信息的分离,优化硬件与驱动代码的维护。设备树文件,如ARM Linux内exynos4412参考板的板级设备树文件"arch/arm/boot/dts/exynos4412-origen.dts",存放硬件接口信息,通过$make dtbs命令编译成二进制.dtb文件供内核驱动使用。为避免重复编写相似的.dts文件,Linux设备树目录提炼公用和共通部分为.dtsi文件,每个.dts文件仅需包含差异部分。Linux设备树以树状结构描述设备信息,节点名长度不超过31个ASCII字符,形如[@],如mac_addr、gpio、clock、power等属性具有特定意义,用于设备识别与配置。设备树中的键值对描述设备属性,如compatible用于查找设备节点。节点引用简化查找过程,编译时合并相同节点属性信息。address和interrupts属性分别描述设备与CPU的IO口和中断请求,便于驱动提取并配置硬件。自定义属性用于特定设备的驱动配置。设备树与驱动的移植涉及硬件信息配置、驱动编译与内核集成。移植过程需参照芯片手册和电路原理图,确保配置正确性。完成移植后,执行相关命令验证设备驱动的正确性。此外,还有关于C++ Linux后台服务器开发的多个知识点分享,如Linux、Nginx、MySQL、Redis、P2P、K8S、Docker、TCP/IP、协程、DPDK、webrtc等。

② 璁惧囨爲鍩烘湰璇娉曞強灞炴у垎鏋

鍦ㄧ‖浠朵笘鐣屼腑锛岃惧囨爲锛圖evice Tree锛夊氨鍍忎竴搴х粨鏋勫寲鐨勬ˉ姊侊紝杩炴帴鐫鎿嶄綔绯荤粺涓庣‖浠躲傚畠鏄涓绉嶅己澶х殑鏁版嵁妯″瀷锛屼互C璇瑷缁撴瀯浣撶殑褰㈠紡锛屼负Linux鍐呮牳鍒濆嬪寲璁惧囨彁渚涗簡鍏抽敭淇℃伅銆傝╂垜浠涓璧锋帰绱㈠畠鐨勮捣婧愩侀噸瑕佹т互鍙婂唴鏍镐腑涓嶅彲鎴栫己鐨勬枃浠躲


鑷2011骞磋捣锛岃惧囨爲鍦ˋRM Linux鍐呮牳涓宕闇插ご瑙掞紝瀹冪殑寮曞叆鏄涓轰簡绠鍖栦唬鐮佺$悊锛岃В鍐冲唴鏍3.x涔嬪墠骞冲彴鏂囦欢鎻忚堪纭浠剁殑鍐椾綑闂棰樸傜幇鍦锛岃惧囨爲鎴愪负浜嗛┍鍔ㄧ▼搴忎笌纭浠朵氦浜掔殑鏍稿績缁勪欢锛屾棤璁烘槸dts锛圖evice Tree Source锛屾簮鏂囨湰锛夌殑ASCII鏂囨湰鎻忚堪锛岃繕鏄缂栬瘧鍚庣殑dtb锛圖evice Tree Blob锛屼簩杩涘埗鏂囦欢锛夛紝閮藉湪鏋勫缓鍜岀淮鎶ょ‖浠惰惧囩殑鐢熸佺郴缁熶腑鍙戞尌鐫鍏抽敭浣滅敤銆


璁惧囨爲鍩虹璇娉


璁惧囨爲鐢变竴绯诲垪鑺傜偣鏋勬垚锛屾瘡涓鑺傜偣閮芥湁鍏剁嫭鐗圭殑鍚嶇О瑙勫垯銆傝妭鐐瑰悕鐢卞瓧绗︺佹暟瀛楀拰鈥-鈥濈粍鎴愶紝闀垮害闄愬埗鍦31涓瀛楃︿互鍐咃紝閫氬父鍙嶆槧鍑鸿惧囩被鍨嬶紝鑰寀nit-address鍒欐爣璁拌惧囩殑鐗╃悊浣嶇疆銆備緥濡傦細


鑺傜偣鎿嶄綔

鑺傜偣鏌ユ壘鑹烘湳

閫氳繃鑺傜偣鐨刢ompatible灞炴э紙濡傗渄avicom,dm9000鈥濓級锛岄┍鍔ㄧ▼搴忓彲浠ョ簿纭鍖归厤璁惧囧拰椹卞姩銆俛ddress灞炴х敤浜庢弿杩板湴鍧锛屽#address-cells鍜#size-cells瀹氫箟浜嗗瓙鑺傜偣reg灞炴х殑鍦板潃鍗曞厓鍜岄暱搴︺俰nterrupt灞炴у垯绠$悊涓鏂淇″彿锛岄氳繃interrupt-parent鍜宨nterrupts鏉ラ厤缃涓鏂鎺у埗鍣ㄣ


涓句釜渚嬪瓙锛屽綋鎻忚堪鐗囬夊拰鍦板潃鏄犲皠鏃讹紝濡傜墖閫0鍋忕Щ0鏄犲皠鍒癈PU鍦板潃绌洪棿0x10100000~0x10110000锛屼腑鏂鎺у埗鍣ㄧ殑璁剧疆閫氳繃#interrupt-cells鏉ュ畾涔変腑鏂鎻忚堪绗︾殑缁撴瀯銆


GPIO鎺у埗鍣ㄧ殑鐗瑰埆涔嬪


GPIO鎺у埗鍣ㄧ殑绠$悊閫氳繃gpio-controller灞炴у0鏄庯紝#gpio-cells鍒欏畾涔変簡GPIO鑺傜偣灞炴х殑鍗曞厓鍐呭癸紝鍖呮嫭寮曠敤GPIO鑺傜偣鍒鍚嶃佹爣鍙峰拰宸ヤ綔妯″紡銆傚湪鐗╄仈缃戠殑澶嶆潅涓栫晫閲岋紝姝g‘鐞嗚В鍜屼娇鐢ㄨ繖浜涘睘鎬ф槸鍏抽敭锛屼互纭淇濊惧囩殑楂樻晥杩愪綔鍜屽伐璧勫為暱銆

③ 【驱动】SPI驱动分析(四)-关键API解析

在SPI(Serial Peripheral Interface)驱动分析中,关键API解析是核心内容。本文将深入解析SPI驱动中的关键API,包括设备树设备树解析、SPI主控制器注册、SPI子系统初始化、SPI控制器注册、SPI设备和驱动匹配、SPI从设备注册、SPI数据传输以及数据结构关系图等内容。以下是对这些关键API的详细解析:

在设备树中对SPI进行描述时,主要通过`of_spi_register_master`函数获取SPI主控制器的GPIO引脚编号信息,并将其存储在主控制器的cs_gpios数组中。这一过程在`kernel\drivers\spi\spi.c`文件中实现。

`of_register_spi_devices`函数用于将子节点设备注册到SPI总线上,同样位于`kernel\drivers\spi\spi.c`文件。

`of_find_spi_master_by_node`函数用于根据设备节点查找对应的SPI主控制器,实现逻辑在`drivers\spi\spi.c`文件中。

`of_spi_notify`作为SPI设备树变更的通知回调函数,确保系统在设备树发生变更时能够及时响应,其定义在`drivers\spi\spi.c`文件。

SPI子系统初始化通过`spi_init`函数完成,该函数在`drivers/spi/spi.c`文件中定义,它负责分配内存缓冲区、注册SPI总线类型和SPI主控制器类,以及在需要时注册设备树重配置的通知回调。

`spi_register_master`函数用于将SPI主控制器注册到SPI总线上,以便与SPI设备进行通信,该函数定义在`drivers/spi/spi.c`文件中。

在驱动程序的probe()函数最后阶段,会调用`spi_register_master`函数以完成与SPI总线的连接。SPI控制器使用板级特定的总线编号,并结合芯片选择编号进行设备寻址。

`spi_alloc_master`用于分配SPI主控制器的内存空间,其定义在`drivers/spi/spi.c`文件中。该函数通过设置`master[1]`来确保私有数据指针与分配的内存空间关联。

`spi_match_device`函数实现设备与驱动程序的匹配,通过设备树、ACPI、ID表和名称匹配方法实现,定义在`drivers/spi/spi.c`文件。

`spi_register_board_info`函数用于注册给定板级信息中的SPI设备,确保即使控制器驱动程序重新加载,硬件设备也不会被遗忘。

`spi_alloc_device`和`spi_add_device`分别用于分配和添加SPI设备到SPI总线上,定义在`drivers/spi/spi.c`文件中。

`spi_new_device`函数在特定的SPI控制器上实例化新的SPI设备,其定义在`drivers/spi/spi.c`文件。

`spi_setup`函数负责实现SPI设备的设置和配置,定义在`drivers/spi/spi.c`文件。

`spi_register_driver`函数完成SPI驱动的注册,定义在`drivers/spi/spi.c`文件。

SPI主设备的队列初始化通过`spi_master_initialize_queue`函数完成,其定义在`drivers\spi\spi.c`文件。

`spi_init_queue`初始化SPI主设备队列,定义在`drivers\spi\spi.c`文件,该函数采用内核线程机制执行消息处理。

`spi_message_init`和`spi_message_add_tail`函数分别用于初始化和构建SPI消息,定义在`include\linux\spi\spi.h`文件。

`spi_message_init_with_transfers`可以一次性初始化SPI消息,并添加一组传输操作,定义在`include\linux\spi\spi.h`文件。

SPI数据传输可以是同步或异步方式。同步传输通过`spi_sync`函数实现,异步传输则使用`spi_async`函数,两者均在`drivers/spi/spi.c`文件中定义。异步传输中,`__spi_async`函数会调用`spi_queued_transfer`,而`spi_queued_transfer`最终调用`__spi_queued_transfer`函数来处理消息队列中的传输操作。

在同步传输中,使用`__spi_sync`函数实现等待数据传输完成的机制。通过使用`DECLARE_COMPLETION_ONSTATCK`声明`struct completion`变量,`wait_for_completion`函数使得当前线程在数据传输完成时被唤醒。

`__spi_pump_messages`函数处理队列中的传输消息,`spi_transfer_one_message`和`spi_finalize_current_message`分别用于传输和完成处理当前消息的操作。

数据结构之间的关系图提供了SPI驱动中各个关键组件之间的清晰连接,有助于理解SPI驱动的整体架构和工作流程。

参考的资源包括其他博主的文章和项目推荐,提供了深入学习SPI驱动的指导和实践建议。

阅读全文

与设备树如何引用子节点相关的资料

热点内容
中国五金机电市场辽宁 浏览:885
阀门编号2代表什么意思 浏览:749
移动空调添加制冷剂多少钱 浏览:569
塑料阀门图片怎么宁 浏览:804
轴承钢怎么除锈 浏览:983
天然气表显示阀门开怎么还是没有气 浏览:668
铸造件内部结构怎么进行ug建模 浏览:77
什么动物也用超声波探路 浏览:440
占民机械怎么样 浏览:640
辽宁自动阀门有叫什么源 浏览:517
阀门脱脂需要什么不同 浏览:680
然气阀门指示牌 浏览:627
ABB阀门分体定位器怎么安装 浏览:189
格力空调怎么由送风变成制冷 浏览:838
离子交换层析装置及作用 浏览:212
设备电览线大小怎么算 浏览:158
学校教学仪器设备为什么要报废 浏览:992
液体混合控制装置西门子plc实验 浏览:926
过滤装置中活性炭的作用是什么 浏览:155
小樱用如图12所示的实验装置 浏览:532