Hi Adam,
FPU support also needs to be enabled in Fiasco. I suppose it is?
I had already enabled FPU in Fiasco like this: # # Target configuration # [...] CONFIG_FPU=y # CONFIG_ARM_CPU_ERRATA is not set [...]
This looks ok. So it's something different.
I also checked if the VFP is enabled on the Zynq board and I added those instructions in the u-boot accordingly to the ARM datasheet: MRC p15,0,r0,c1,c0,2 ORR r0,r0,#(3<<20) ORR r0,r0,#(3<<22) BIC r0, r0, #(3<<30) MCR p15,0,r0,c1,c0,2 ISB MOV r0,#(1<<30) VMSR FPEXC,r0
MRC p15,0,r0,c1,c0,2
MOV r3, #0x300000 STR r0, [r3] I checked the CPACR register and the bits look ok. VFP is also enabled on the board. So you are right, it seems to be something else.
Which ramdisk are you using?
I use the ramdisk given in the files in the l4re-snapshot-2014092821: "ramdisk-arm.rd"
Do you have the 'log = L4.Env.log' statement in the script for launching L4Linux? Do not start anything else which uses 'log = L4.Env.log'.
I firstly tested adding this log without commenting the others. I don't have inputs on L4linux with Qemu. So I tried with only the 'log = L4.Env.log'. I have the same result with no input and I still can enter into the JDB. This is the "l4lx.cfg" file I used: -- vim:set ft=lua:
local lxname = "vmlinuz"; if L4.Info.arch() == "arm" then lxname = "vmlinuz.arm"; end
L4.default_loader:start( { caps = { --log = L4.Env.log:m("rws"), }, l4re_dbg = L4.Dbg.Warn, --log = { "l4linux", "yellow" }, log = L4.Env.log, }, "rom/" .. lxname .. " mem=64M console=ttyLv0 l4x_rd=rom/ramdisk-" .. L4.Info.arch() .. ".rd root=1:0 ramdisk_size=4000");
What is Linux telling us about ttyLv0?
During the boot with the configuration file I gave you, I can see: [...] ttyLv0 at MMIO 0x1 (irq = 211, base_baud = 230400) is a L4 [...]
Thanks in advance for your help,
Nicolas
-----Message d'origine----- De : l4-hackers [mailto:l4-hackers-bounces@os.inf.tu-dresden.de] De la part de Adam Lackorzynski Envoyé : lundi 16 mars 2015 00:21 À : l4-hackers@os.inf.tu-dresden.de Objet : Re: ARM with Qemu
Hi,
On Wed Mar 11, 2015 at 15:59:09 +0100, Nicolas VARONA wrote:
It segfaults when executing init. One common reason is that VFP
support is missing in Linux. Strike?
Sorry for answering so late, but I am still looking if it's a problem of the board's hardware configuration. Nonetheless, when I told you the panic, I had already enabled the VFP this way: [...] # # At least one emulation must be selected # CONFIG_FPE_NWFPE=y # CONFIG_FPE_NWFPE_XP is not set # CONFIG_FPE_FASTFPE is not set CONFIG_VFP=y CONFIG_VFPv3=y CONFIG_NEON=y # CONFIG_KERNEL_MODE_NEON is not set (no change even if it's set or not)
Is that correct or do I forget something? I am wondering something: Does
This looks ok. So it's something different.
l4linux automatically enable FPU on the board's boot when it's enabled in the l4linux configuration?
FPU support also needs to be enabled in Fiasco. I suppose it is? Which ramdisk are you using?
I think I found it. A hacky fix/workaround is to add the following
line to >the beginning of >out_char() in src/lib/uart/uart_cadence.cc:
_regs->write<unsigned>(ISR, IXR_RXOVR);
Thanks for your help and great work! This was the problem. I have added the line and compiled the Fiasco: Ned says: Hi World! Ned: loading file: 'rom/hello.cfg' Press some key: l Your input: l (108) Enter a number: 4 Your number is: 4
The l4 bare metal application works. Nonetheless I tried to compile the l4linux with the change in the fiasco and I have still no input in Qemu. Is it the same issue for l4linux?
Do you have the 'log = L4.Env.log' statement in the script for launching L4Linux? What is Linux telling us about ttyLv0? Do not start anything else which uses 'log = L4.Env.log'.
Adam