(2)使用设备树之后的设备匹配方法: 在Linux内核引入设备树后,使用DT_MACHINE_START和DT_MACHINE_END来定义一个machine_desc结构体来描述这个设备, 这里宏定义在文件arch/arm/include/asm/mach/arch.h里面,定义如下: #defineDT_MACHINE_START(_name, _namestr) \staticconststructmachine_desc__mach_desc_##_name\...
Uboot在启动kernel时会将MACHINE_ID放在r1中,Linux Kernel启动时会匹配传过来的MACHINE_ID,将该值与MACHINE_START处声明的MACHINE_ID比对,如匹配则会执行相应machine的一系列初始化函数。 使用DT后,MACHINE_START变为DT_MACHINE_START,其中多了一个.dt_compat成员,用于指定该machine与.dts中root结点compatible属性兼容...
of_scan_flat_dt 遍历设备树并利用辅助函数来提取需要的信息。 early_init_dt_scan_chosen 辅助函数用于解析包括内核参数的 chosen 节点: early_init_dt_scan_root 辅助函数用于初始化设备树的地址空间模型; early_init_dt_scan_memory 辅助函数用于决定可用内存的大小和地址。 在ARM平台,setup_machine_fdt函数负责在...
就像前几节课讲的那样,我们是通过 DT_MACHINE_START 来定义一个电路板的,里面有很多回调函数,这里简单的写了 init_late 和 dt_compat,其中 dt_compat 会根据设备树里的字段进行匹配,如果字段一致就说明匹配正确,这里的字段是“csdn, gitchat”。 添加对应的 DTS 现在已经在 Linux 里添加了我们定义的 soc,接下来...
这里mdesc对应lds中变量,即DT_MACHINE_START中的信息 //linux\arch\arm\mach-at91\at91rm9200.c static void __init at91rm9200_dt_device_init(void) { //注意这里解析 dts of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); ...
可以看出,DT_MACHINE_START和MACHINE_START基本相同,只是.nr的设置不同,在DT_MACHINE_START里面直接将.nr设置为~0。说明引入设备树以后不会再根据machine id来检查Linux内核是否支持某个硬件平台了。 打开文件arch/arm/mach-zynq/common.c,有如下所示内容: 示例代码20.3.5.7 arch/arm/mach-zynq/common.c 191 stat...
当Linux内核引入设备树以后就不在使用MACHINE_START了,而是换为了DT_MACHINE_START。说明引入了设备树以后就不会根据machine id来检查Linux 内核是否支持这个设备。在Linux内核中通过start_kernel函数启动内核,然后start_kernel函数会调用setup_arch函数来匹配machine_desc,然后再调用setup_machine_fdt函数进一步获取匹配的machin...
start_kernel() --> setup_arch() --> unflatten_device_tree() unflatten_device_tree()的代码如下: void __init unflatten_device_tree(void) { __unflatten_device_tree(initial_boot_params, &allnodes, early_init_dt_alloc_memory_arch); ...
const char *const *dt_compat; /* array of device tree* 'compatible' strings */ unsigned int nr_irqs; /* number of IRQs */ #ifdef CONFIG_ZONE_DMA phys_addr_t dma_zone_size; /* size of DMA-able area */ #endif unsigned int video_start; /* start of video RAM */ unsigned int ...
/dts-v1/; #include <dt-bindings/input/input.h> #include "imx6ull.dtsi" / { …… }; 2.5 dts 文件包含 dtsi 文件 设备树文件不需要我们从零写出来,内核支持了某款芯片比如 imx6ull,在内核的 arch/arm/boot/dts 目录下就有了能用的设备树模板,一般命名为 xxxx.dtsi。“i”表示“include”,被别...