当前位置: 首页 > article >正文

linux 4.1设备树解析源码跟踪

asmlinkage __visible void __init start_kernel(void){char *command_line;setup_arch(command_line);setup_command_line(command_line);}//////////////////////////////////////////////////////////////////////这个setup_arch就是各个架构自己的设置函数哪个参与了编译就调用哪个arm架构应当是arch/arm/kernel/setup.c中的 setup_arch。void __init setup_arch(char **cmdline_p){const struct machine_desc *mdesc;setup_processor();////setup_machine_fdt函数获取内核前期初始化所需的bootargscmd_line等系统引导参数//__atags_pointer是bootloader传递参数的物理地址mdesc setup_machine_fdt(__atags_pointer);if (!mdesc)mdesc setup_machine_tags(__atags_pointer, __machine_arch_type);/* populate cmd_line too for later use, preserving boot_command_line */ strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);//这是setup_arch的参数出参赋值*cmdline_p cmd_line;parse_early_param();////解析设备树unflatten_device_tree();arm_dt_init_cpu_maps(); psci_init(); if (!is_smp()) hyp_mode_check(); reserve_crashkernel(); if (mdesc-init_early) mdesc-init_early();}/////////////////////////////////////**unflatten_device_tree - create tree of device_nodes from flat blobunflattens the device-tree passed by the firmware, creating thetree of struct device_node. It also fills the “name” and “type”pointers of the nodes so the normal device-tree walking functionscan be used.*/void __init unflatten_device_tree(void){__unflatten_device_tree(initial_boot_params, of_root,early_init_dt_alloc_memory_arch);/* Get pointer to “/chosen” and “/aliases” nodes for use everywhere */of_alias_scan(early_init_dt_alloc_memory_arch);}////////////////////////////////////////////////////*arm_dt_init_cpu_maps - Function retrieves cpu nodes from the device treeand builds the cpu logical map array containing MPIDR values related tological cpusUpdates the cpu possible mask with the number of parsed cpu nodes/void __init arm_dt_init_cpu_maps(void){/Temp logical map is initialized with UINT_MAX values that areconsidered invalid logical map entries since the logical map mustcontain a list of MPIDR[23:0] values where MPIDR[31:24] mustread as 0.*/struct device_node *cpu, *cpus;int found_method 0;u32 i, j, cpuidx 1;u32 mpidr is_smp() ? read_cpuid_mpidr() MPIDR_HWID_BITMASK : 0;u32 tmp_map[NR_CPUS] { [0 … NR_CPUS-1] MPIDR_INVALID };bool bootcpu_valid false;cpus of_find_node_by_path(“/cpus”);if (!cpus)return;for_each_child_of_node(cpus, cpu) {u32 hwid;if (of_node_cmp(cpu-type, cpu)) continue; pr_debug( * %s...\n, cpu-full_name); /* * A device tree containing CPU nodes with missing reg * properties is considered invalid to build the * cpu_logical_map. */ if (of_property_read_u32(cpu, reg, hwid)) { pr_debug( * %s missing reg property\n, cpu-full_name); return; } /* * 8 MSBs must be set to 0 in the DT since the reg property * defines the MPIDR[23:0]. */ if (hwid ~MPIDR_HWID_BITMASK) return; /* * Duplicate MPIDRs are a recipe for disaster. * Scan all initialized entries and check for * duplicates. If any is found just bail out. * temp values were initialized to UINT_MAX * to avoid matching valid MPIDR[23:0] values. */ for (j 0; j cpuidx; j) if (WARN(tmp_map[j] hwid, Duplicate /cpu reg properties in the DT\n)) return; /* * Build a stashed array of MPIDR values. Numbering scheme * requires that if detected the boot CPU must be assigned * logical id 0. Other CPUs get sequential indexes starting * from 1. If a CPU node with a reg property matching the * boot CPU MPIDR is detected, this is recorded so that the * logical map built from DT is validated and can be used * to override the map created in smp_setup_processor_id(). */ if (hwid mpidr) { i 0; bootcpu_valid true; } else { i cpuidx; } if (WARN(cpuidx nr_cpu_ids, DT /cpu %u nodes greater than max cores %u, capping them\n, cpuidx, nr_cpu_ids)) { cpuidx nr_cpu_ids; break; } tmp_map[i] hwid; if (!found_method) found_method set_smp_ops_by_method(cpu);}/*Fallback to an enable-method in the cpus node if nothing found ina cpu node.*/if (!found_method)set_smp_ops_by_method(cpus);if (!bootcpu_valid) {pr_warn(“DT missing boot CPU MPIDR[23:0], fall back to default cpu_logical_map\n”);return;}/*Since the boot CPU node contains proper data, and all nodes havea reg property, the DT CPU list can be considered valid and thelogical map created in smp_setup_processor_id() can be overridden*/for (i 0; i cpuidx; i) {set_cpu_possible(i, true);cpu_logical_map(i) tmp_map[i];pr_debug(“cpu logical map 0x%x\n”, cpu_logical_map(i));}}///////////////////////////////////////////////////////////////static const struct of_device_id psci_of_match[] __initconst {{ .compatible “arm,psci”, .data psci_0_1_init},{ .compatible “arm,psci-0.2”, .data psci_0_2_init},{},};int __init psci_init(void){struct device_node *np;const struct of_device_id *matched_np;psci_initcall_t init_fn;np of_find_matching_node_and_match(NULL, psci_of_match, matched_np); if (!np) return -ENODEV; init_fn (psci_initcall_t)matched_np-data; return init_fn(np);}

相关文章:

linux 4.1设备树解析源码跟踪

asmlinkage __visible void __init start_kernel(void) { char *command_line; setup_arch(&command_line); setup_command_line(command_line); } //////////////////////////////////////////////////////////////////// //这个setup_arch就是各个架构自己的设置函数&…...

中小企业国际化首选:Tryton多货币多语言ERP系统深度评测(含2022更新模块解析)

中小企业国际化首选:Tryton多货币多语言ERP系统深度评测(含2022更新模块解析) 在全球化的商业环境中,中小企业如何选择一款既能满足多语言协作需求,又能处理复杂跨境财务的ERP系统?Tryton作为一款基于Pyth…...

MLIR多级中间表示:下一代编译器基础设施的终极指南

MLIR多级中间表示:下一代编译器基础设施的终极指南 【免费下载链接】llvm-project llvm-project - LLVM 项目是一个编译器和工具链技术的集合,用于构建中间表示(IR)、优化程序代码以及生成机器代码。 项目地址: https://gitcode.com/GitHub_Trending/l…...

Phi-3-mini-128k-instruct辅助软件测试:自动生成测试用例与数据

Phi-3-mini-128k-instruct辅助软件测试:让测试用例设计效率翻倍 最近和几个做软件测试的朋友聊天,发现他们最头疼的不是执行测试,而是设计测试用例。尤其是面对复杂的业务逻辑,要手动构思各种边界值、等价类,还得造出…...

新能源知识库(62)N型与P型组件:如何根据应用场景选择最优方案?

1. N型与P型组件的基础差异 光伏组件作为太阳能发电的核心部件,其技术路线直接决定了发电效率和系统收益。N型和P型组件虽然外观相似,但从材料到性能都存在本质区别。先说个接地气的比喻:如果把光伏组件比作运动员,P型就像经验丰富…...

Qwen3-32B-Chat效果展示:32B模型在中文诗歌创作与古文仿写中的惊艳表现

Qwen3-32B-Chat效果展示:32B模型在中文诗歌创作与古文仿写中的惊艳表现 1. 开篇:当大模型遇见古典文学 在人工智能领域,32B参数规模的大语言模型已经展现出令人惊叹的文本理解与生成能力。而当我们把目光投向中文古典文学创作这一特殊领域时…...

Python-100-Days实战案例:数据可视化仪表盘的构建

Python-100-Days实战案例:数据可视化仪表盘的构建 【免费下载链接】Python-100-Days Python - 100天从新手到大师 项目地址: https://gitcode.com/GitHub_Trending/py/Python-100-Days Python-100-Days是一个从新手到大师的Python学习项目,其中数…...

2025_NIPS_AnomalyCoT: A Multi-Scenario Chain-of-Thought Dataset for Multimodal Large Language Model

文章核心总结与创新点 主要内容 文章针对现有工业异常检测(IAD)数据集场景单一、缺乏严谨推理过程的问题,提出首个多模态思维链(CoT)数据集AnomalyCoT。该数据集包含37,565个IAD样本,整合13个公开数据集及自建数据,覆盖59类场景,统一了异常判别与缺陷分类两大核心任务…...

Zig位操作技巧:高效处理位级数据的终极指南

Zig位操作技巧:高效处理位级数据的终极指南 【免费下载链接】zig Zig编程语言及其工具链,旨在提供一种通用编程语言和工具集,以支持开发健壮、高效且可重用的软件。 项目地址: https://gitcode.com/GitHub_Trending/zig/zig 在现代软件…...

2025_NIPS_Structural Information-based Hierarchical Diffusion for Offline Reinforcement Learning

文章核心总结与翻译 一、主要内容 本文针对离线强化学习(Offline RL)中长视野任务的方差累积、计算复杂度高、对离线数据集过度依赖及泛化能力不足等问题,提出了一种基于结构信息的分层扩散框架(SIHD)。该框架核心围绕“自适应多尺度分层构建”“结构信息引导的条件扩散…...

K3s Helm应用部署:轻量级Kubernetes的包管理工具使用教程

K3s Helm应用部署:轻量级Kubernetes的包管理工具使用教程 【免费下载链接】k3s K3s 是一个轻量级的 Kubernetes 发行版,用于在资源受限的环境和物联网设备上部署 Kubernetes 群集。 * 轻量级的 Kubernetes 发行版、在资源受限的环境和物联网设备上部署 K…...

计算机毕设 java 农贸市场摊位出租系统 Java+SpringBoot 农贸市场摊位租赁管理平台 Web 版摊位预约出租报修系统

计算机毕设 java 农贸市场摊位出租系统 k52bf9(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享农贸市场摊位管理传统模式存在出租流程乱、预约不透明、报修处理慢、合同管理难等问题。为规范摊…...

迷你世界UGC3.0脚本触发器事件管理(对象)

迷你世界UGC3.0脚本WikiMenuOn this pageSidebar Navigation快速入门欢迎MOD、组件介绍什么是Lua编程组件介绍组件说明组件互相操作组件函数组件属性事件触发器事件管理组件事件管理函数库服务模块世界模块管理接口 World对象…...

保姆级教程:Halcon图像增强从入门到精通(附Fabrik、Vessel图例代码详解)

Halcon图像增强实战指南:从原理到参数调优 在工业视觉检测领域,图像质量直接影响着后续分析和识别的准确性。Halcon作为业界领先的机器视觉软件,提供了丰富的图像增强工具集。本文将带您深入理解emphasize、illuminate和scale_image_max三大核…...

西门子1200三种液体混合系统:从设计到实现

西门子1200程序设计案例 三种液体博途PLC博图多种液体HMI仿真液体混合 、包含内容:①三种液体博途PLC与HMI仿真工程(博途V14或以上) 一份;②三种液体配套有IO点表PLC接线图主电路图控制流程图 (CAD源文件可编辑);③三种液体博途仿真工程配套视频讲解一份…...

手机号智能定位系统:企业级地理信息解决方案

手机号智能定位系统:企业级地理信息解决方案 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors/lo/lo…...

OFA VQA开源镜像教程:/opt/miniconda3/envs/torch27权限管理

OFA VQA开源镜像教程:/opt/miniconda3/envs/torch27权限管理 1. 镜像简介 本镜像已完整配置 OFA 视觉问答(VQA)模型 运行所需的全部环境、依赖和脚本,基于 Linux 系统 Miniconda 虚拟环境构建,无需手动安装依赖、配…...

MQTT Retain / Last Will / Clean Session 深度解析:智能设备在线状态设计

目录 一、设备在线状态的本质问题 二、Retain:设备状态快照机制 1 Retain 的基本原理 2 Retain 的作用 3 Retain 在设备在线状态中的作用 4 Retain 删除机制 三、Last Will:设备异常离线检测机制 1 Last Will 的基本概念 2 什么是异常断开 3 Last Will 消息流程 4…...

linux2.6.28 MTD 内存技术设备(块设备)platform driver源码分析

//////////////////////drivers/mtd/nand/s3c_nand.c module_init(s3c_nand_init);//模块初始化 static int __init s3c_nand_init(void) { printk(“S3C NAND Driver, © 2008 Samsung Electronics\n”); platform_driver_register(&s3c6400_nand_driver); platform_d…...

Docker Compose编排LPG日志栈:从单机到多机的实战避坑指南

1. 为什么选择LPG日志栈? 在分布式系统时代,日志管理就像在迷宫里找钥匙。传统的ELK方案虽然功能强大,但资源消耗让人肉疼。LPG(LokiPromtailGrafana)组合就像是为云原生环境量身定制的瑞士军刀,我用它处理…...

VisionPro实战:如何在ToolBlock中高效处理List类型输出(附完整代码)

VisionPro高效数据处理:ToolBlock中List类型的实战应用 在工业视觉检测领域,处理多个产品的坐标数据是常见需求。VisionPro作为行业领先的机器视觉开发平台,其ToolBlock功能提供了强大的自定义数据处理能力。本文将深入探讨如何利用List类型在…...

Rancher与Azure AKS集成:微软云环境下的容器管理方案

Rancher与Azure AKS集成:微软云环境下的容器管理方案 【免费下载链接】rancher Complete container management platform 项目地址: https://gitcode.com/GitHub_Trending/ra/rancher 在当今多云和混合云架构盛行的时代,企业需要一个统一的平台来…...

OpenClaw(大龙虾)Windows 彻底卸载清理教程(无残留)

很多朋友安装了OpenClaw(圈内俗称「大龙虾」)后,常会遇到这些糟心问题:想换版本重装,却发现旧配置阴魂不散;只删了安装文件夹,后台服务还在偷偷开机自启;终端敲openclaw命令依然能用,甚至重装后直接报错端口被占用…… 究其根本,是OpenClaw在Windows系统中分为CLI命…...

Linux网络编程:UDP 的DictServer

1、数据字典字典,那我们是不是需要一个txt文件里面包含了我们用来测试字典的数据?我们创建一个data.txt文件,从中添加一系列格式为英文:中文的测试用例:随便写几个测试用例就行了。2、字典类与头文件我们先写出一个字典…...

探索MS-DOS源代码中的栈帧布局与函数调用规范:从16位汇编看系统设计

探索MS-DOS源代码中的栈帧布局与函数调用规范:从16位汇编看系统设计 【免费下载链接】MS-DOS MS-DOS 1.25和2.0的原始源代码,供参考使用 项目地址: https://gitcode.com/GitHub_Trending/ms/MS-DOS MS-DOS作为早期个人计算机的标志性操作系统&…...

【Pytorch + SpringBoot + Flask + Vue】基于YOLOv12 火灾烟雾检测系统(源码)

一、项目背景火灾是威胁人民生命财产安全的主要灾害之一,具有突发性强、蔓延速度快、扑救难度大等特点。据应急管理部消防救援局统计,2023年全国共接报火灾89.5万起,直接财产损失达67.5亿元。在各类火灾事故中,因发现不及时、报警…...

程序员如何优化生活习惯避免感冒:生活医学视角下的免疫系统守护指南

程序员如何优化生活习惯避免感冒:生活医学视角下的免疫系统守护指南 专栏链接:匠身颐和 作者:培风图南以星河揽胜 引言:当你的代码在运行,而免疫系统却“宕机”了 凌晨 2:47,你刚修复了一个棘手的分布式事…...

Vue3 新 AI 调试神器(来自 React 生态)!

经常用 AI 写前端的同学,一定都有过这种无力感:你想让 AI 改一个页面元素,却只能说——“右上角那个按钮…”、“中间那个卡片…”但问题是:AI 根本不知道你在说哪个元素。于是你只能截图、标注、翻代码、来回试错,效率…...

Jitsi Meet静态资源优化:CDN配置与缓存策略终极指南

Jitsi Meet静态资源优化:CDN配置与缓存策略终极指南 【免费下载链接】jitsi-meet Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application. 项目地址: https://gitcode.com/GitHub_Tren…...

Rancher蓝绿部署方案:降低容器应用发布风险的高级策略

Rancher蓝绿部署方案:降低容器应用发布风险的高级策略 【免费下载链接】rancher Complete container management platform 项目地址: https://gitcode.com/GitHub_Trending/ra/rancher Rancher作为企业级Kubernetes管理平台,提供了强大的蓝绿部署…...