2015-10-01 12 views
3

Я работаю над платой TI Jacinto6 (ARM CortexA15). Я понимаю источник U-boot. В соответствии с файлом start.S, следующие инструкции по сборке выполняются для отключения кеша I/D L1 и TLB. Эти инструкции от start.s (http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arm/cpu/armv7/start.S;h=fedd7c8f7e00d0427405173849e6c0743d6b886f;hb=524123a70761110c5cf3ccc5f52f6d4da071b959)U-boot будет работать на одном ядре?

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-boot работать только с одним ядром? Если да, то как другие ядра будут отключены?

+1

Обычно после перезагрузки процессора/системы допускается только одно ядро; все остальное покоится или отключилось. Проверьте документацию по ARM, о которой вы упоминали.U-Boot будет выполняться только на одном ядре – sawdust

+0

«В соответствии с документами ARM CortexA15 имеет 4 ядра» - вы уверены? Конструкция Cortex-A15 может поддерживать конфигурации от _up до 4 ядер на кластер, но все, что я вижу на сайте TI, говорит, что Jacinto 6 реализует двухъядерную конфигурацию. – Notlikethat

+0

@sawdust Спасибо за информацию. Итак, ядро ​​будет включать другие ядра при загрузке?, Можете ли вы поделиться ссылкой источника ядра (git), которая позволяет другим ядрам. – user3693586

ответ

4

Будет ли источник U-boot работать только на одном ядре?

U-Boot двоичный файл (а не источник) выполняется только на одном ядре процессора.
Функциональность загрузчика не требует параллельной обработки.
Также ядро ​​Linux ожидает включения только одного ядра при его запуске.

Если да, то как другие ядра будут отключены?

Обычно после перезагрузки процессора/системы допускается только одно ядро; все остальное покоится или отключилось.

Таким образом, ядро ​​позволит другим ядрам при загрузке?

ОС, предполагая, что она поддерживает SMP (симметричные мультипроцессоры), позволит другим ядрам стать частью ее инициализации.

Вы можете поделиться ссылкой источника ядра (git), которая позволяет другим ядрам.

для ARM Cortex-A9 четырехъядерный процессор (А15 будет похож) выходы ядра Linux:

Booting Linux on physical CPU 0x0 
Linux version 3.10.60+wandboard_1.0.2+1.0.0-wandboard ([email protected]) (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.
Вторая процедура называется ARM-версией smp_setup_processor_id(), которая отвечает за текст сообщения Booting Linux on physical CPU ....

К концу start_kernel(), версия АРМ check_bugs() будет вызывать check_writebuffer_bugs(), который отвечает за текстом CPU: Testing write buffer coherency: ... сообщения.

В конце start_kernel(), в конечном итоге rest_init() инициализирует другие ядра процессора через версию ARM от secondary_start_kernel() (CPUn: Booted secondary processor), вызывается как-то через smp_init() (Brought up N CPUs).

+0

Спасибо за информацию. – user3693586

 Смежные вопросы

  • Нет связанных вопросов^_^