首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >U引导会在单核上运行吗?

U引导会在单核上运行吗?
EN

Stack Overflow用户
提问于 2015-10-01 17:48:30
回答 1查看 4K关注 0票数 3

我的工作是TI Jacinto6(ARM CortexA15)基于板。我理解U引导源。根据start.S文件,执行以下程序集指令以禁用L1 I/D缓存和TLB。这个指令来自start.s t.s(http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/start.S;h=fedd7c8f7e00d0427405173849e6c0743d6b886f;hb=524123a70761110c5cf3ccc5f52f6d4da071b959)

代码语言:javascript
复制
 mov     r0, #0                  @ set up for MCR
 mcr     p15, 0, r0, c8, c7, 0   @ invalidate TLBs
 mcr     p15, 0, r0, c7, c5, 0   @ invalidate icache
 mcr     p15, 0, r0, c7, c5, 6   @ invalidate BP array
 mcr     p15, 0, r0, c7, c10, 4  @ DSB
 mcr     p15, 0, r0, c7, c5, 4   @ ISB

根据ARM文档,CortexA15有4个核心。上面的代码将禁用它正在运行的核心上的缓存和TLB,那么其他核心缓存和TLB又会怎样呢?U引导源会只运行在一个核心上吗?如果是这样,那么其他核心将如何被禁用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 00:22:14

U引导源会只运行在一个核心上吗?

U二进制(而不是源)只在一个处理器核心上执行.

引导加载程序的功能不需要并行处理。

此外,Linux内核希望在启动时只启用一个内核。

如果是这样,那么其他核心将如何被禁用?

通常,在处理器/系统重置之后,只启用一个核心;其他所有都是静止的或禁用的。

那么内核会在启动时启用其他内核吗?

假设操作系统支持SMP (对称多处理器),它将启用其他内核作为其初始化的一部分。

请您共享内核源代码链接(Git),它支持其他内核。

对于ARM Cortex-A9四核(类似的A15 ),Linux内核输出:

代码语言:javascript
复制
Booting Linux on physical CPU 0x0
Linux version 3.10.60+wandboard_1.0.2+1.0.0-wandboard (root@host) (gcc version 4.8.3 (crosstool-NG 1.19.0) ) #7 SMP Mon Dec 29 18:49:06 PST 2014
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Freescale i.MX6 Quad/DualLite (Device Tree), model: Wandboard Quad based on Freescale i.MX6 Quad
...  
L310 cache controller enabled
l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x32070000, Cache size: 1048576 B
...
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x804bdd30 - 0x804bdd88
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU2: Booted secondary processor
CPU2: thread -1, cpu 2, socket 0, mpidr 80000002
CPU3: Booted secondary processor
CPU3: thread -1, cpu 3, socket 0, mpidr 80000003
Brought up 4 CPUs
SMP: Total of 4 processors activated (6324.22 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
...

Linux内核开始在start_kernel()中在init/main.c中执行其C代码。

第二个被调用的过程是id()的ARM版本,它负责Booting Linux on physical CPU ...消息文本。

start_kernel(),的末尾,ARM版本的check_bugs()将调用臭虫(),后者负责CPU: Testing write buffer coherency: ...消息文本。

start_kernel(),的末尾,init()最终通过ARM版本的内核() (CPUn: Booted secondary processor)初始化其他处理器核心,通过init() (Brought up N CPUs)以某种方式调用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32893745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档