Increase IPC-Stream size
ba_f
ba_f at rbg.informatik.tu-darmstadt.de
Thu May 28 18:24:04 CEST 2015
Am 2015-05-28 08:43, schrieb Matthias Lange:
> Hi,
>
> On 05/27/2015 10:35 PM, ba_f wrote:
>> Am 2015-05-27 00:11, schrieb Adam Lackorzynski:
>>> Hi ba_f,
>>>
>>> On Wed May 20, 2015 at 11:40:27 +0200, ba_f wrote:
>>>> i decided not to use libshmc and do it "manually" with Dataspace and
>>>> IRQ,
>>>> because i think this comes closest to the communication between
>>>> TrustZone
>>>> worlds.
>>>> It's the best starting point before pushing the project to TrustZone
>>>> (ie.
>>>> Normal world Client and Secure Server), isn't it?
>>>
>>> Indeed, that really comes closer to that.
>>>
>>
>> Anyway, i still have some question about that IRQ, and i would be
>> grateful if u could answer them, too.
>>
>> I found two examples with IRQ: 'l4/pkg/examples/sys/map_irq' and
>> 'l4/pkg/examples/libs/l4re/c++/shared_ds'.
>> I guess i could easily adapt them.
>>
>> What makes we wonder, is that both examples make use of
>> 'L4::Ipc::Iostream'. Actually, i dont see any difference between IRQ &
>> IPC, since both are registered servers using
>> L4.default_loader:new_channel().
>
> I think here is a little bit of misconception.
> L4.default_loader:new_channel() creates a new IPC gate (from Lua) which
> can be used by threads to send IPC messages. (Virtual) IRQs are a
> different type of kernel object but the trigger() function eventually
> maps to IPC. You can read about the different kernel objects here [1].
> You should also make yourself familiar with the Factory API which is
> used to create new kernel objects.
>
>> I guess, IPC is build upon IRQ?
>>
>> However, you said that IPC is not possible between TrustZone worlds,
>> because each world has a separate microkernel instance. I reason there
>> is no L4.default_loader:new_channel() possible between worlds?
>> Do u have an example design for TZ communication?
>
> Your observation is right. Essentially you have to use the 'smc'
> instruction (secure monitor call) to initiate a mode switch. The
> exception handler on the secure side then can evaluate the SMC value to
> determine the service requested.
>
> Matthias.
>
> [1]
> https://os.inf.tu-dresden.de/L4Re/doc/index.html#l4re_concepts_fiasco_kobjects
Ok,
i found the following thread, making things clearer.
http://os.inf.tu-dresden.de/pipermail/l4-hackers/2014/006521.html
In the examples mentioned, IPC is used to transfer the IRQ and DS
capabilities from the client to the server, aye?
As i want to go for TrustZone, i dont wanna use IPC.
Hence, i have to create a virtual IRQ in Ned's script, so that both
Tasks know the IRQ namespace?
If this is any correct, then i miss the right syntax.
I tried the following, but failed:
local virtual_smc = L4.Env.Irq:create();
ld:start({ caps = { irq = virtual_smc:svr()},},
"rom/server");
ld:start({ caps = { irq = virtual_smc },},
"rom/client");
Thanks to all of u,
ba_f
More information about the l4-hackers
mailing list