Eu escrevi um exemplo simples de núcleo múltiplo de metal.
Código, diagrama de circuitos está aqui - https://github.com/jeffreyantony/multipi/tree/master/Example_01
No meu exemplo, existem 3 LEDs conectados aos pinos GPIO do raspberry Pi. Existem totalmente 4 núcleos no Raspberry Pi 2. Cada núcleo é designado para piscar o LED correspondente.
Escrevi o endereço do código a ser executado por cada núcleo nos endereços abaixo 0x4000009C para o núcleo 1 0x400000AC para o núcleo 2 0x400000BC para o núcleo 3
Após a compilação do código, apenas o LED atribuído ao núcleo 1 está piscando (como neste exemplo, LED amarelo). Outros não são.
Isso significa que o código do Core 2 e 3 não está em execução (já que os outros LEDs não estão piscando). Também descobri que o código após o início de todos os núcleos também não está em execução, ou seja, core0_submain () - essa função deve piscar o LED ACT no Raspberry Pi
Alguém poderia me informar qual é o problema? É porque todos os quatro núcleos tentam gravar no mesmo registro GPIO e apenas o Core 1 está ganhando na gravação?
Eu tentei adicionar " attribute ((naked));" para core0_submain (), mas não houve uso.
Estou usando o conjunto de ferramentas de https://launchpad.net/gcc-arm-embedded
código mais uma vez - https://github.com/jeffreyantony/multipi/blob/master/Example_01/main.c
makefile - https://github.com/jeffreyantony/multipi/blob/master/Example_01/Makefile
Atualização 20 de outubro de 2015 : adicionei suporte ao JTAG. Mas não foi possível obter a interface de depuração
Atualização 25 de outubro de 2015 : o problema foi corrigido. Ver resposta.