We made multiprocessor architectures booting Linux. We
defined a complex architecture which is composed of three
processors: Two Cortex-A9UP cores and an ARM926EJ-S
core. Each core is connected to some peripherals. Concerning
the first Cortex-A9UP core, in addition to its minimal
components to boot Linux, we added an L2Cache PL310
(Cache Controller), a Timer SP804 and EthLAN9118. For the
ARM926EJ-S core, we find the minimal peripheral to boot
Linux as well as other hardware components such as a
DMemCtrlPL341 (PL 341 dynamic memory controller),
SMemCtrl PL354 (PL354 static Memory controller) and USB
ISP 1761(USB Phillips ISP 1761). For the second Cortex-
A9UP core, we note the use of an RTC PL031 (ARM Real
Time Clock PL031), an Mmci PL181 (Multimedia card
Interface), a WDT SP805 (ARM SP805 Watchdog) and an
AaciPL041 (ARM Advanced Audio CODEC Interface (AACI)
PL041). The inter-processor communication is assured by the
use of the shared memory as it is detailed in the Section III. We
also use two bridges between three defined busses in the
architecture. The use of the bridge can be justified by the fact
that each processor has its own characteristics (different
frequencies) and peripherals. The architecture is described in
Figure 5.
In this design, one of the Cortex-A9UP and the
ARM926EJ-S core write values at addresses that belong to the
shared memory and indicate, using flags, the termination of
their work to the third processor, Cortex-A9UP, which is the
reader. For the application running on the different targets, we
implement three applications cross-compiled for arm-linux.
Each application is implemented in the ramdisk of the
corresponding core (we have three ramdisks). The execution of
these applications is done automatically when booting Linux.
We can modify the init of the Linux. When extracting the
ramdisk, we should add (1) and (2) in the rcS file, which is
located in the folder: /etc/init.d/, to automatically run an
application when booting Linux.
chmod +x application.exe (1)
./application.exe start (2)