Linux Device Tree 同名覆盖问题

本文探讨了Linux DeviceTree中同名节点的处理方式,并通过实际案例解释了当两个节点名称相同时,最终生成的dtb文件如何进行内容的合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.chinaunix.net/uid-15662492-id-3886899.html

http://www.wowotech.net/device_model/dt_basic_concept.html

Linux Device Tree 中的同名覆盖问题


在Device Tree中写两个名称相同,内部并不相同的条目,比如:

         memory {
                 device_type = "memory1";
                 reg = <0x00000000 0x40000000>;
                 speed1 = <266>;
         };

         memory {
                 device_type = "memory2";
                 reg = <0x00000000 0x40000000>;
                 seeed2 = <333>;
         };


最终生成的效果是什么呢?

1 用第一个的内容
2 用第二个的内容
3 第一个和第二个的集合,相同名称用第一个的内容
4 第一个和第二个的集合,相同名称用第二个的内容

答案先不公布,先来看看Linux内核编译生成的dtb文件。
该文件位于KERNEL_OBJ/arch/arm/boot,名为xxx.dtb。
dtb文件是给机器使用的,直接打开看不懂,就需要内核提供的工具dtc来将dtb转换为可读的dts文件。
命令如下:
./scripts/dtc/dtc -I dtb -O dts -o ABC.dts arch/arm/boot/ABC.dtb

好了,让我们看看现在的在反汇编后的dts中,memory变成了什么。

         memory {
                 device_type = "memory2";
                 reg = <0x00000000 0x40000000>;
                 seeed1 = <266>;
                 seeed2 = <333>;
         };

答案是4。
### 嵌入式 Linux 考试题库、面试问题及自学练习 #### 一、选择题 1. 下列哪个命令用于查看当前运行的内核版本? - A. `uname -r` - B. `lsb_release -a` - C. `cat /etc/os-release` - D. `top` 2. 在嵌入式 Linux 中,启动过程的第一步通常是加载什么程序? - A. 用户空间应用程序 - B. 文件系统驱动 - C. Bootloader - D. 内核模块 3. 使用哪种工具可以编译适用于 ARM 架构的代码? - A. GCC - B. Clang - C. arm-linux-gnueabi-gcc - D. tcc 4. 下面哪项不是常见的实时操作系统(RTOS)? - A. VxWorks - B. FreeRTOS - C. RT-Linux - D. Android 5. 设备树(Device Tree)主要用于描述什么? - A. CPU架构特性 - B. 网络配置参数 - C. 硬件平台信息 - D. 应用层协议栈结构 #### 二、简答题 1. 解释什么是交叉编译以及为什么在嵌入式开发中非常重要? 2. 描述如何通过 U-Boot 修改环境变量来改变系统的默认启动行为。 3. 列举并解释至少三种不同的文件系统类型及其适用场景,在嵌入式设备上常见使用哪些? 4. 如何理解 Yocto Project 的工作原理? 它对于构建自定义 Linux 发行版有何帮助? 5. 当遇到无法正常启动的情况时, 可以采取哪些措施来进行故障排查? #### 三、编程实践题 编写一段简单的 shell 脚本实现如下功能: - 将 source 目录下的所有 .c 文件拷贝至 destination 目录下;如果 destination 存在一个同名文件,则覆盖它。 ```bash #!/bin/bash if [ $# != 2 ]; then echo "Usage: $0 <source> <destination>" exit 1 fi SOURCE=$1 DESTINATION=$2 mkdir -p "$DESTINATION" find "$SOURCE" -name "*.c" | while read file; do cp "$file" "$DESTINATION/" done ``` #### 四、案例分析题 假设有一个基于 ARM Cortex-A9 处理器的小型工业控制系统项目正在规划阶段,请设计一套完整的嵌入式 Linux 开发方案,包括但不限于硬件选型建议、软件框架搭建思路等方面的内容。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值