Hello, everyone.
Let me post a question regarding booting Linux on ARM FVP (with Cortex-A9 MPCore).
I'm setting up an experiment which uses TrustZone on ARM FVP. I'm not sure which
kernel to run in the secure world, but am sure to run Linux in Normal world.
I found linaro linux which can run on the ARM FVP. Following the instruction [*1],
it successfully runs on DS-5 FVP simulator, but I realized it cannot run in the
normal world. I mean, original DS-5 FVP is not enabling TrustZone, and resource
separation is enabled only when secure_memory parameter is set to true.
So, if I want to run linaro linux in the normal world, 2 problems arise.
(1) With secure_memory option, FVP memory map is changed. But, linaro linux
boots from UEFI (at address 0x00000000) which is loaded in the secure world.
So, I need to change the boot sequence to load the kernel in normal world
region. I'm planning to load the kernel from FLASH1 at 0x0C000000 in the
normal world.
(2) The original Linaro kernel uses UEFI for initial boot, but its source code
seems to be not available to the public.
Normal world region is basically (a) flashloader1 located at 0x0C000000, and
(2) 2GB DRAM at 0x80000000. So, I need to boot the kernel using tnly those resources.
What is in my mind is that, make boot loader that loads the kernel and ramdisk
from flashloader1 to DRAM region. And, jump to the kernel's entry address.
I'm using ATAG to pass the boot parameter. (For your information, command
line parameter is "console=ttyAMA0,115200n8 root=/dev/mmcblk0p2 rootwait ro
mem=1024M ip=dhcp" as in instructions in [*1])
I implemented those, and jumped to the kernel's entry point. However, it does
not boot the system as expected. It seems to be halting somewhere during boot
process, and keeping on jump to the same address. It does not give any message
on UART window, actually it even doesn't show UART window.
Does anyone have any suggestion or advice for that?
Possibly, could it be the case we have to initialize all the peripherals
(e.g. uart, LDC, timer and mmc) which is used by the kernel in advance?
My concern is linaro kernel is only bootable with UEFI support...
[*1] Linaro's ubuntu boot instruction (refer to RTSM tab).
https://releases.linaro.org/13.08/ubuntu/vexpress
[*2] ARM FVP's memory map info. As in Table3, secure_memory option changes memory map.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0575g/Bbajihec.html