U-boot будет работать на одном ядре?

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

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


person user3693586    schedule 01.10.2015    source источник
comment
Обычно после перезагрузки процессора/системы включается только одно ядро; все остальное неактивно или отключено. Проверьте документацию ARM, которую вы упомянули. U-Boot будет выполняться только на одном ядре   -  person sawdust    schedule 01.10.2015
comment
Согласно документам ARM, CortexA15 имеет 4 ядра — вы уверены? Конструкция Cortex-A15 может поддерживать конфигурации до 4 ядер на кластер, но все, что я вижу на сайте TI, говорит о том, что Jacinto 6 реализует двухъядерную конфигурацию.   -  person Notlikethat    schedule 02.10.2015
comment
@sawdust Спасибо за информацию. Таким образом, ядро ​​​​включит другие ядра во время загрузки? Не могли бы вы поделиться ссылкой на исходный код ядра (git), которая включает другие ядра.   -  person user3693586    schedule 03.10.2015
comment
@ Notlikethat CortexA15 имеет 4 ядра, как показано на схеме @ arm.com /products/processors/cortex-a/cortex-a15.php . Jacinto 6 имеет CortexA15 и Cortex M4, не могли бы вы поделиться ссылкой TI, которая объясняет, что Jacinto 6 работает с двумя ядрами.   -  person user3693586    schedule 03.10.2015


Ответы (1)


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

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

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

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

Итак, ядро ​​​​включит другие ядра во время загрузки?

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

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

Для четырехъядерного процессора ARM Cortex-A9 (аналогично A15) ядро ​​Linux выводит:

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 начинает выполнение своего кода C в start_kernel() в init/main.c.
Вторая вызываемая процедура — это ARM-версия smp_setup_processor_id(), который отвечает за текст сообщения Booting Linux on physical CPU ....

Ближе к концу start_kernel() версия ARM 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).

person sawdust    schedule 05.10.2015