0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SMP多核启动向内核传递参数信息

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-05 15:32 次阅读

spin_table_cpu_release_addr的传递

由于在armv8架构下, uboot只能通过devicetree向内核传递参数信息 ,因此当其开启了CONFIG_ARMV8_SPIN_TABLE配置选项后,就需要在适当的时候将该值写入devicetree中。

我们知道uboot一般通过bootm命令启动操作系统(aarch64支持的booti命令,其底层实现与bootm相同),因此在bootm中会执行一系列启动前的准备工作,其中就包括将spin-table地写入devicetree的工作。以下其执行流程图:

图片
spin_table_update_dt的代码实现如下:

int spin_table_update_dt(void *fdt)
{
	…
	unsigned long rsv_addr = (unsigned long)&spin_table_reserve_begin;   
	unsigned long rsv_size = &spin_table_reserve_end -
						&spin_table_reserve_begin;                 (1)

	cpus_offset = fdt_path_offset(fdt, "/cpus");                                       (2if (cpus_offset < 0)
		return -ENODEV;

	for (offset = fdt_first_subnode(fdt, cpus_offset);                    
	     offset >= 0;
	     offset = fdt_next_subnode(fdt, offset)) {
		prop = fdt_getprop(fdt, offset, "device_type", NULL);
		if (!prop || strcmp(prop, "cpu"))
			continue;
		prop = fdt_getprop(fdt, offset, "enable-method", NULL);                    (3if (!prop || strcmp(prop, "spin-table"))
			return 0;
	}

	for (offset = fdt_first_subnode(fdt, cpus_offset);
	     offset >= 0;
	     offset = fdt_next_subnode(fdt, offset)) {
		prop = fdt_getprop(fdt, offset, "device_type", NULL);
		if (!prop || strcmp(prop, "cpu"))
			continue;

		ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr",
				(unsigned long)&spin_table_cpu_release_addr);              (4if (ret)
			return -ENOSPC;
	}

	ret = fdt_add_mem_rsv(fdt, rsv_addr, rsv_size);                                    (5)
	…
}

(1)获取其起始地址和长度

(2)从devicetree中获取cpus节点

(3)遍历该节点的所有cpu子节点,并校验其enable-method是否为spin-table。若不是所有cpu的都该类型,则不设置

(4)若所有cpu的enable-method都为spin-table,则将该参数设置到cpu-release-addr属性中

(5)由于这段地址有特殊用途,内核的内存管理系统不能将其分配给其它模块。因此,需要将其添加到保留内存中

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10456

    浏览量

    206594
  • 多核
    +关注

    关注

    0

    文章

    43

    浏览量

    12243
  • SMP
    SMP
    +关注

    关注

    0

    文章

    68

    浏览量

    19452
收藏 人收藏

    评论

    相关推荐

    AliOS Things SMP系统及其在esp32上实现示例

    对应CPU的SMP功能:2.1 核启动加载目前的启动顺序是,系统默认开始启动0核,在0核的主任务入口内启动其他核的加载,使其都进入任务调度,
    发表于 05-15 12:45

    典型的支持多核处理器的RTOS功能解析

    运行中更换或重新启动几乎所有的模块,甚至是设备驱动程序。QNX对多核处理器的支持基于其微内核结构,通信被集成到QNX消息传递原语,本地的IPC和远端节点间的IPC一样。在单CPU上运行
    发表于 06-29 08:30

    Rk3399串口配置参数传递过程如何去实现呢

    的,通过该参数告诉内核使用哪个串口以及波特率作为调试串口,bootargs可以在设备树(dts)下配置,chosen里有属性项bootargs,启动linux时,内核会使用chosen
    发表于 05-24 10:15

    ARM64 SMP多核启动相关资料推荐(上)

    ddr某个地址,为内核传递参数之后,然后bootloader就完成了它的使命,跳转到内核,就进入了操作系统内核的世界。4)linux
    发表于 06-06 17:05

    ARM64 SMP多核启动相关资料推荐(下)

    psci。下面我们来揭开他神秘的面纱,其实理解了spin-table的启动方式,psci并不难(说白了也是需要主处理器给从处理器一个启动地址,然后从处理器从这个地址执行指令,实际上比这要复杂的多)。下面给出psci方式多核
    发表于 06-06 17:11

    多核处理器分类之SMP与NUMA简析

    多核处理器,在每个多核处理器芯片内部的L2和L3可以采用共享缓存或SMP方式,而在多个芯片间采用DSM结构互连。原作者:老秦谈芯
    发表于 06-07 16:46

    RT-Thread SMP和AMP初体验简介

    的 kernel7.img 文件拷贝到树莓派 SD 卡的 boot 目录中即可;树莓派上电前先使用 USB 转 TTL 模块连接到电脑;启动树莓派后,串口成功显示相关信息SMP 简单测试成功。原作者:螺丝松掉的人
    发表于 02-03 14:33

    Linux在SMP系统上的移植研究

    基于自主开发以双核嵌入式CPU EM8301为处理核心的嵌入式应用的目的,针对双核CPU芯片的系统结构和Linux内核的特性,通过研究嵌入式Linux操作系统在SMP系统上的移植,探讨SMP架构
    发表于 11-14 16:09 11次下载
    Linux在<b class='flag-5'>SMP</b>系统上的移植研究

    Linux内核源码分析--内核启动命令行的传递过程

    内核启动参数其实不仅仅包含在了cmdline中,cmdline不过是bootloader传递内核
    发表于 05-05 15:28 1563次阅读

    用户与内核空间数据交换的方式之一:内核启动参数

    Linux 提供了一种通过 bootloader 向其传输启动参数的功能,内核开发者可以通过这种方式来向内核传输数据,从而控制内核
    发表于 05-14 15:42 419次阅读

    BootLoader与Linux内核参数传递

    。5. 参数传递的验证和测试参数传递的结果可以通过内核启动的打印
    发表于 04-02 14:31 281次阅读

    ARM64 SMP多核启动(下)—PSCI

    上面说了pin-table的多核启动方式,看似很繁琐,实际上并不复杂,无外乎主处理器唤醒从处理器到指定地址上去执行指令
    发表于 06-09 14:31 462次阅读
    ARM64 <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>启动</b>(下)—PSCI

    SMP是什么?多核芯片(SMP)的启动方法

    SMP 英文为Symmetric Multi-Processing ,是对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。
    的头像 发表于 07-26 09:26 8952次阅读
    <b class='flag-5'>SMP</b>是什么?<b class='flag-5'>多核</b>芯片(<b class='flag-5'>SMP</b>)的<b class='flag-5'>启动</b>方法

    SMP是什么 启动方式介绍

    ,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。 CMP 英文为Chip multiprocessors,指的是单芯片多处理器,也指多核心。其思想是将大规模并行处理器中的SMP集成到同一芯片内,各个处理器并行执行不同的进程。 (1)CPU数:独立的中央
    的头像 发表于 12-05 15:23 995次阅读

    SMP多核启动cpu操作函数

    回调 其中spin-table启动方式的回调如下: const struct cpu_operations smp_spin_table_ops = {.name= "spin-table
    的头像 发表于 12-05 16:04 291次阅读
    <b class='flag-5'>SMP</b><b class='flag-5'>多核</b><b class='flag-5'>启动</b>cpu操作函数