[Oberon] call ioctl() function in linux from AOS

Jörg Straube joerg.straube at iaeth.ch
Sat Apr 13 09:24:27 CEST 2013


Zdenek

When you include a new exported function ("mmap") into an existing module ("Unix"), you have to recompile ALL upper modules using the modified module.
As "Unix" is a module used by quite some upper Oberon modules, you effectively would have to recompile the whole Oberon system.
So for the next time: better don't touch modules included in the Oberon system unless you know exactly what you're doing.

So, delete your newly generated Unix object file. If you accidentially overwrote "obj/Unix.Obj", you better reinstall Oberon.
Move the "mmap" declaration and initializing code into your program, something like:

MODULE Test;

IMPORT Unix;

VAR
  mmap- : PROCEDURE {C} (addr: ADDRESS; length: LONGINT; prot: LONGINT;
                                              flags : LONGINT; fd: LONGINT; offset: LONGINT) : ADDRESS;

PROCEDURE test*();
  VAR
    a: ADDRESS;
  BEGIN

    Unix.Dlsym( Unix.libc, "mmap", ADDRESSOF( mmap ) );
    a := mmap( parameters as defined above ...);
  END test;

END Test.test  ~

SystemTools.Free Test   ~     



Porting a driver code is not a piece of cake...

br
Jörg

Am 13.04.2013 um 08:02 schrieb Zdenek <oberon at moravcik.info>:

> Hi Jörg,
> 
> as you wrote module Unix already contains call to function ioctl() which
> I first overlooked.
> Trying to make my code running I had to insert another needed call for
> linux function mmap() because this function is not define in module Unix
> (i.e. in Linux.Unix.Mod)
> So I inserted following code into Unix.Mod:
> 
> MODULE Unix;
> ...
> VAR
> mmap-              : PROCEDURE {C} ( addr: ADDRESS; length: LONGINT;
> prot: LONGINT; flags : LONGINT; fd: LONGINT; offset: LONGINT) : ADDRESS;
> ...
> BEGIN (* Unix *)
> Dlsym( libc, "mmap",    ADDRESSOF( mmap ) );
> ...
> END Unix.
> 
> Then I wrote following module:
> 
> MODULE Test;
> 
> IMPORT Unix;
> 
> PROCEDURE test();
> VAR
> a : ADDRESS;
> BEGIN
> a := Unix.mmap(parameters as defined above ...);
> END test;
> (*  Test.test  ~
>      SystemTools.Free Test   ~     
> *)
> END Test.
> 
> It compiled fine but when I try to run Test.test it answers:
> 
> WMTextView: Command execution error, res 3405 (Test incompatible with
> Unix / mmap)
> 
> Don't know what to do about it ?
> 
> Zdenek
> 
> 
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.inf.ethz.ch/pipermail/oberon/attachments/20130413/5820d651/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3644 bytes
Desc: not available
Url : https://lists.inf.ethz.ch/pipermail/oberon/attachments/20130413/5820d651/attachment.bin 


More information about the Oberon mailing list