安卓系统面经_安卓面经(9/20)Kernel 设备树解析

牛客高级系列专栏:

安卓(安卓系统开发也要掌握)


嵌入式


  • 本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人从嵌入式Linux转Android系统开发过程中对常见安卓系统开发面试题的理解;
  • 1份外卖价格助您提高安卓面试准备效率,为您面试保驾护航!!

正文开始⬇

1 概念

1.1 什么是设备树dts(Device Tree)?

Linux内核使用DTS(Device Tree Source)和DTB(Device Tree Binary)来描述嵌入式设备的硬件结构。DTS是机器可读的文本文件,其中包含设备树的节点和属性,DTB是由DTS编译器生成的二进制文件。

在Linux内核启动时,会使用bootloader将DTB加载到内存中,并在内核启动时将DTB解析成设备树形式。设备树是一种层级结构,类似于文件系统,用于描述硬件设备的结构和属性,可以枚举硬件组件并在Linux内核中实例化它们。

设备树的节点(node)和属性(property)描述了硬件设备的结构和属性。每个节点包含了一个设备的信息,而每个属性用来描述该设备的某个方面。设备树可以包含多个节点,每个节点都有一个节点名和一个父节点路径。节点名通常用于标识该节点所代表的硬件设备,而父节点路径用于描述硬件设备的层次结构。

设备树通常包含以下几类节点:

  • 根节点:设备树中唯一的顶层节点,在Linux内核启动后创建,包含其他所有设备树节点。
  • SoC节点:描述处理器芯片的节点,例如CPU、GPU、DMA等。
  • 总线节点(例如I2C、SPI、PCI、USB):描述连接SoC外设的总线控制器。
  • 设备节点:描述连接到总线上的具体硬件设备。
  • 逻辑设备节点:描述与设备相关的逻辑设备,例如网络接口、串口、LED等。

对于一个设备树节点,可以具有以下属性:

  • compatible:设备的型号、品牌和版本信息。
  • reg:设备的注册地址,用于描述设备内存和寄存器的物理地址。
  • interrupt-parent和interrupts:用于描述设备中断,并指定中断控制器的地址。
  • clock:描述设备时钟的信息。

在设备树中,节点和属性都是用DTS语言编写的。DTS语言支持以下语法:

  • 所有语句均以分号结尾。
  • 节点使用中括号,属性使用尖括号。
  • 属性名和属性值之间使用冒号。
  • 属性值可以是整数、字符串、布尔变量等。

以下是一个简单的DTS示例,用于描述一个GPIO设备。

/dts-v1/;

/ {
        gpio {
                compatible = "linux,gpio";
                reg = <0x40 0x10>;
                gpio-controller;
                #gpio-cells = <2>;
        };
};

以上内容应该可以让你对Linux Kernel的DTS有一个初步的认识。

1.2 使用设备树有哪些优势?

Linux内核从3.x版本之后开始支持使用设备树,这样做的意义重大,可以实现驱动代码与设备的硬件信息相互的隔离,减少了代码中的耦合性。

使用设备树具有以下优势:

  1. 可移植性好:设备树可以描述硬件设备的结构和属性,从而使得嵌入式系统的驱动程序更加具有可移植性,可以在不同的平台、不同的SOC上使用相同的驱动程序。
  2. 软件与硬件分离:设备树将硬件设备的结构和属性描述从内核空间分离出来,使得嵌入式系统开发过程中,软件和硬件开发可以并行进行,方便软硬件团队之间的协作。
  3. 系统配置灵活:设备树允许系统构建者在不改变内核源代码的情况下,动态更新硬件设备的配置信息,能够提高软件开发和调试的效率。
  4. 设备驱动开发方便:设备树将硬件设备的应用接口、中断和DMA信息等全部包含在内,驱动程序开发者可以通过使用设备树中的信息来快速开发驱动程序。
  5. 系统启动更快:传统的Linux内核启动时需要通过读取ATAG结构体等方式获取硬件信息,开销较大,而使用设备树可以快速地获取硬件信息并进行设备驱动程序的加载,能够提高系统启动的速度。

总的来说,使用设备树可以使得嵌入式系统开发更加灵活、方便和效率化,降低硬件开发成本,提高软硬件协作的效率。

2 解析

2.1 dts

DTS(Device Tree Source)是一个用于描述嵌入式硬件的语言,经过编译后可以得到二进制的DTB文件。DTS文件包含了设备树的节点和属性,用于描述嵌入式设备的硬件结构和属性。

在Linux内核开发中,设备树通常被用于描述硬件平台,并且每一个设备都会对应一个独立的DTS文件。因此一般在Linux源码中存在大量的dts文件。在Linux源码中,DTS文件一般位于arch目录下的各个平台的设备树子目录中,例如arm平台的DTS文件位于arch/arm/boot/dts目录中,mips平台的DTS文件在arch/mips/boot/dts目录中,powerpc平台的DTS文件在arch/powerpc/boot/dts目录中。

2.2 dtsi

DTSI(Device Tree Source Include)文件是一个头文件格式的文件,用于存储设备树节点和属性的公共部分,并可以在其他DTS文件中包含这个文件。这种方式使得DTS文件可以重用一些公共的设备树节点和属性定义,从而简化了设备树文件的编写和维护。

值得一提的是,对于一些相同的dts配置可以抽象到dtsi文件中,然后类似于C语言的方式可以include到dts文件中,对于同一个节点的设置情况,dts中的配置会覆盖dtsi中的配置。具体如下图所示: alt

2.3 dtc

DTC(Device Tree Compiler)是一个用于将DTS文件编译成DTB二进制文件的工具,它可以从Linux内核代码中的scripts/dtc目录中获取,也可以在Linux系统中使用命令sudo apt-get install device-tree-compiler安装。

使用DTC编译DTS文件时,会生成对应的DTB文件,该文件包含了设备树的节点和属性的二进制形式,并在Linux内核启动时被加载到内存中。需要注意的是,在使用DTC编译DTS文件时,需要指定设备树的版本(例如-@ 0x00000000)和目标CPU的端序(例如--big-endian--little-endian)。

2.4 dtb

DTB(Device Tree Blob)是经过DTC编译后的二进制设备树文件,它描述了硬件平台上所有的硬件设备的信息,并在Linux内核启动时从引导程序中加载。引导程序需要识别硬件平台并加载对应的DTB文件,然后将DTB文件的起始地址和大小传递给内核。

当内核启动时,DTB文件首先会被加载到内存中作为设

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Android系统面试题全解析 文章被收录于专栏

2020年研究生毕业后,工作重心由嵌入式Linux转为安卓系统,Android发展已经很多年,网上面向中初级Android系统开发的面经还比较少,也不够集中,因此梳理出本专栏,本专栏收集了本人工作中持续积累的众多安卓系统知识,持续更新中。

全部评论

相关推荐

联想数据开发工程师面经(2025届校招/实习)📌&nbsp;背景:985本硕,计算机相关专业,有大数据项目经历,面试岗位为数据开发工程师(Base北京/上海)。📝&nbsp;面试流程&nbsp;&amp;amp;amp;&nbsp;问题回顾1.&nbsp;笔试(线上编程+SQL)-&nbsp;题型:-&nbsp;算法题(********中等难度,考察数组、字符串、动态规划)-&nbsp;SQL题(多表关联、窗口函数、复杂查询优化)-&nbsp;大数据基础(Hadoop/Spark原理简答)2.&nbsp;技术一面(1小时)-&nbsp;数据结构与算法-&nbsp;手撕代码:合并K个有序链表(优先队列实现)-&nbsp;时间复杂度分析,如何优化?-&nbsp;大数据生态-&nbsp;Spark和Hadoop的区别?Spark为什么更快?-&nbsp;数据倾斜的解决方案?-&nbsp;SQL实战-&nbsp;写一个**连续登录用户统计**的SQL(使用窗口函数)-&nbsp;项目深挖-&nbsp;介绍一个大数据项目,你在其中负责什么?-&nbsp;如果数据量增加10倍,如何优化你的方案?3.&nbsp;技术二面(45分钟)-&nbsp;系统设计-&nbsp;设计一个实时数据仓库,如何保证低延迟和高可用?-&nbsp;Kafka和Flink在实时计算中的作用?-&nbsp;数据库-&nbsp;MySQL索引原理,B+树&nbsp;vs&nbsp;Hash索引-&nbsp;Hive内部表和外部表的区别?-&nbsp;场景题-&nbsp;如果某天发现报表数据异常,如何排查?4.&nbsp;HR面(30分钟)-&nbsp;职业规划、为什么选择联想?-&nbsp;对加班/出差的看法?-&nbsp;期望薪资?💡&nbsp;面试建议1.&nbsp;**重点复习**:SQL(窗口函数、优化)、Spark/Hadoop原理、常见大数据场景题。2.&nbsp;**项目复盘**:确保能清晰讲解技术选型、难点和优化思路。3.&nbsp;**算法刷题**:********热题100+剑指Offer,尤其是**链表、树、DP**。4.&nbsp;**反问环节**:可以问团队业务、技术栈、新人培养计划等。🌟&nbsp;联想数据团队体验-&nbsp;技术氛围浓厚,大牛导师带教,内部有完善的大数据平台。-&nbsp;业务覆盖智能供应链、用户行为分析、风控建模等,实战性强!📢&nbsp;投递Tips:联想对代码能力+大数据基础要求较高,建议尽早投递!📅&nbsp;【投递链接】春招:https://talent.lenovo.com.cn/position?projectType=1暑期实习:https://talent.lenovo.com.cn/position?projectType=2【内推码】2025XZLMCX【内推入口】在“联想校招官网”投递校招职位,创建简历时“从哪儿获知招聘信息”选择“联想员工推荐”并且输入推荐人ITcode:2025XZLMCX投递的同学评论区留下【姓名缩写+岗位】,方便及时跟进加入联想,与创新者同行,用科技改变世界!(欢迎留言交流,祝大家offer多多!🎯) #内推#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内推码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#联想#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26届&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#26届实习交流#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据人的面试交流地&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
5
20
分享

创作者周榜

更多
牛客网
牛客企业服务