He escrito un ejemplo de núcleo múltiple de metal desnudo.
Código, el diagrama del circuito está aquí: https://github.com/jeffreyantony/multipi/tree/master/Example_01
En mi ejemplo, hay 3 LED conectados a los pines GPIO de la frambuesa Pi. Hay totalmente 4 núcleos en Raspberry Pi 2. Cada núcleo está asignado para parpadear su LED correspondiente.
Escribí la dirección del código que debe ejecutar cada núcleo en las siguientes direcciones 0x4000009C para el núcleo 1 0x400000AC para el núcleo 2 0x400000BC para el núcleo 3
Después de compilar el código, solo el LED asignado al núcleo 1 parpadea (como en este ejemplo, LED amarillo). Otros no lo son.
Esto significa que el código para Core 2 y 3 no se está ejecutando (ya que los otros LED no parpadean). También descubrí que el código después de iniciar todos los núcleos tampoco se está ejecutando, es decir, core0_submain (): esta función debería parpadear el LED ACT en la Raspberry Pi
¿Alguien podría decirme cuál es el problema? ¿Es porque los 4 núcleos intentan escribir en el mismo registro GPIO y solo Core 1 gana en la escritura?
Traté de agregar " atributo ((desnudo));" para core0_submain () pero no sirvió de nada.
Estoy usando la cadena de herramientas de https://launchpad.net/gcc-arm-embedded
una vez más código - https://github.com/jeffreyantony/multipi/blob/master/Example_01/main.c
makefile - https://github.com/jeffreyantony/multipi/blob/master/Example_01/Makefile
Actualización 20 de octubre de 2015 : he agregado soporte para JTAG. Pero no se pudo obtener la interfaz de depuración
Actualización 25 de octubre de 2015 : se solucionó el problema. Ver respuesta.