你了解linux device tree源代码Word文件下载.docx
- 文档编号:15020931
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:34
- 大小:31.29KB
你了解linux device tree源代码Word文件下载.docx
《你了解linux device tree源代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《你了解linux device tree源代码Word文件下载.docx(34页珍藏版)》请在冰豆网上搜索。
设备树在内存中的存储布局图。
------------------------------
base
->
|
structboot_param_header
|
(alignmentgap)
(*)
memoryreservemap
device-treestructure
device-treestrings
----->
---
(base
+
totalsize)
1.1头(header)
头主要描述设备树的一些基本信息,例如设备树大小,结构块偏移地址,字符串块偏移地址等。
偏移地址是相对于设备树头的起始地址计算的。
{
__be32magic;
//设备树魔数,固定为0xd00dfeed
__be32totalsize;
//整个设备树的大小
__be32off_dt_struct;
//保存结构块在整个设备树中的偏移
__be32off_dt_strings;
//保存的字符串块在设备树中的偏移
__be32off_mem_rsvmap;
//保留内存区,该区保留了不能被内核动态分配的内存空间
__be32version;
//设备树版本
__be32last_comp_version;
//向下兼容版本号
__be32boot_cpuid_phys;
//为在多核处理器中用于启动的主cpu的物理id
__be32dt_strings_size;
//字符串块大小
__be32dt_struct_size;
//结构块大小
};
1.2结构块(structblock)
设备树结构块是一个线性化的结构体,是设备树的主体,以节点node的形式保存了目标单板上的设备信息。
在结构块中以宏OF_DT_BEGIN_NODE标志一个节点的开始,以宏OF_DT_END_NODE标识一个节点的结束,整个结构块以宏OF_DT_END结束。
一个节点主要由以下几部分组成。
(1)节点开始标志:
一般为OF_DT_BEGIN_NODE。
(2)节点路径或者节点的单元名(ersion=0x10以节点单元名表示)
(3)填充字段(对齐到四字节)
(4)节点属性。
每个属性以宏OF_DT_PROP开始,后面依次为属性值的字节长度(4字节)、属性名称在字符串块中的偏移量(4字节)、属性值和填充(对齐到四字节)。
(5)如果存在子节点,则定义子节点。
(6)节点结束标志OF_DT_END_NODE。
1.3字符串块
通过节点的定义知道节点都有若干属性,而不同的节点的属性又有大量相同的属性名称,因此将这些属性名称提取出一张表,当节点需要应用某个属性名称时直接在属性名字段保存该属性名称在字符串块中的偏移量。
1.4设备树源码DTS表示
设备树源码文件(.dts)以可读可编辑的文本形式描述系统硬件配置设备树,支持C/C++方式的注释,该结构有一个唯一的根节点“/”,每个节点都有自己的名字并可以包含多个子节点。
设备树的数据格式遵循了OpenFirmwareIEEEstandard1275。
这个设备树中有很多节点,每个节点都指定了节点单元名称。
每一个属性后面都给出相应的值。
以双引号引出的内容为ASCII字符串,以尖括号给出的是32位的16进制值。
这个树结构是启动Linux内核所需节点和属性简化后的集合,包括了根节点的基本模式信息、CPU和物理内存布局,它还包括通过/chosen节点传递给内核的命令行参数信息。
1.5machine_desc结构
内核提供了一个重要的结构体structmachine_desc,这个结构体在内核移植中起到相当重要的作用,内核通过machine_desc结构体来控制系统体系架构相关部分的初始化。
machine_desc结构体通过MACHINE_START宏来初始化,在代码中,通过在start_kernel->
setup_arch中调用setup_machine_fdt来获取。
structmachine_desc
unsigned
int
nr;
/*
architecturenumber
*/
const
char
*name;
architecturename
unsignedlongatag_offset;
taggedlist
(relative)
*const
*dt_compat;
array
ofdevicetree*
compaTIble
strings
nr_irqs;
numberofIRQs
#ifdefCONFIG_ZONE_DMA
phys_addr_tdma_zone_size;
sizeofDMA-ablearea
#endif
video_start;
startofvideoRAM
video_end;
end
ofvideoRAM
unsignedcharreserve_lp0
:
1;
neverhaslp0
unsignedcharreserve_lp1
neverhaslp1
unsignedcharreserve_lp2
neverhaslp2
enumreboot_modereboot_mode;
defaultrestartmode
structsmp_operaTIons
*smp;
SMPoperaTIons
bool
(*smp_init)(void);
void
(*fixup)(structtag
*,
**,structmeminfo
*);
(*init_meminfo)(void);
(*reserve)(void);
reservememblocks
(*map_io)(void);
IOmapping
funcTIon
(*init_early)(void);
(*init_irq)(void);
(*init_time)(void);
(*init_machine)(void);
(*init_late)(void);
#ifdefCONFIG_MULTI_IRQ_HANDLER
(*handle_irq)(structpt_regs
(*restart)(enumreboot_mode,
1.6设备节点结构体
structdevice_node
//设备name
*type;
//设备类型
phandlephandle;
*full_name;
//设备全称,包括父设备名
struct
property
*properties;
//设备属性链表
*deadprops;
//removedproperties
*parent;
//指向父节点
*child;
//指向子节点
*sibling;
//指向兄弟节点
*next;
//相同设备类型的下一个节点
*allnext;
//next
in
listofallnodes
structproc_dir_entry
*pde;
//该节点对应的proc
structkrefkref;
unsignedlong_flags;
*data;
#if
defined(CONFIG_SPARC)
*path_component_name;
unique_id;
structof_irq_controller
*irq_trans;
1.7属性结构体
//属性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 你了解linux device tree源代码 了解 linux tree 源代码