[okl4-developer ] Problem with the configuration of a shared memory segment....

2 messages Options
Embed this post
Permalink
Hugues Balp

[okl4-developer ] Problem with the configuration of a shared memory segment....

Reply Threaded More More options
Print post
Permalink

                               Dear all,

just a first word to say that I have solved the compilations problems of
my preceding post.

Now I wonder how to configure correctly a shared memory segment.

In order to better understand the cross-cell-demo example, I have cloned
and renamed the

example "decrypt" into "mydecrypt" in the okl4_3.0/examples repository.

In order to enable the build of this copy example, I have also edited
the file okl4_3.0/projects/examples/SConstruct.

A patch of okl4_3.0.tar.gz including the resulting modifications is
joined to this mail.

The build command I use to compile the test is the following:

./tools/build.py machine=versatile project=examples pyfreeze=false
EXAMPLE=oklinux,mydecrypt LINUX_APPS=cross-cell-demo kdb_serial=True
TOOLCHAIN=gnu_arm_eabi_toolchain pistachio.TOOLCHAIN=gnu_arm_toolchain

The system boot properly but the following assertion is raised when I
run the executable "cross-cell-demo":

    Assertion failed: shmem != NULL, function cross_cell_open, file
   
/home/hugues/tools/okl4/okl4_3.0/linux/kernel-2.6.24-v2/arch/l4/drivers/cross_cell_demo.c,
line 102.

The related source code is:

    shmem = okl4_env_get_segment("MAIN_SHMEM");
    assert(shmem != NULL);

This problem occurs only when I use the "mydecrypt" example and not when
I use the original one.

So I suppose that the SHMEM segment is well configured when I use the
"decrypt" example and not when

I use its copy, but I wonder why. There is some kind of  hidden
dependency that I don't understand....

When I search for the strings  "MAIN_SHMEM" and "SHMEM" I just see them
in SConscript files

or in source code within a call like "okl4_env_get_segment()"....

The only differences in the file weaver.xml are the name of the
directory used for the shmem ( decrypt on one

side and mydecrypt on the other )....

 I would appreciate any help on this subject.

        Best regards,

                    Hugues Balp.
     






diff -rupN original/okl4_3.0/examples/mydecrypt/SConscript modified/okl4_3.0/examples/mydecrypt/SConscript
--- original/okl4_3.0/examples/mydecrypt/SConscript 1970-01-01 01:00:00.000000000 +0100
+++ modified/okl4_3.0/examples/mydecrypt/SConscript 2008-12-09 16:32:39.000000000 +0100
@@ -0,0 +1,27 @@
+#
+# @LICENCE("Public", "2008")@
+#
+
+Import("*")
+
+libs = ["atomic_ops", "c", "okl4", "l4", "mutex"]
+
+try:
+    if args["serial_driver"]:
+        libs.append(args["serial_driver"])
+        libs.append("serial")
+        #env.Append(CPPDEFINES=[("SERIAL_DRIVER", args["serial_driver"])])
+except:
+    pass
+
+print env.kernel
+ms = env.Memsection("shmem", None, 0x1000, "rw")
+env.add_memsections(None, [ms])
+
+env.Append(CPPDEFINES=[("DECRYPT_MASK", 0x34)])
+
+obj = env.KengeProgram("mydecrypt", LIBS=libs)
+
+env.set_program(obj, heap=0x100000)
+
+Return("obj")
diff -rupN original/okl4_3.0/examples/mydecrypt/src/main.c modified/okl4_3.0/examples/mydecrypt/src/main.c
--- original/okl4_3.0/examples/mydecrypt/src/main.c 1970-01-01 01:00:00.000000000 +0100
+++ modified/okl4_3.0/examples/mydecrypt/src/main.c 2008-12-09 16:32:25.000000000 +0100
@@ -0,0 +1,41 @@
+/* @LICENCE("Public", "2008")@ */
+
+#include <okl4/env.h>
+#include <okl4/init.h>
+#include <okl4/notify.h>
+
+int
+main(int argc, char **argv)
+{
+    okl4_env_segment_t *ms;
+    okl4_kcap_t linux_cap;
+    okl4_word_t mask, shift;
+    char *c, tmp;
+
+    okl4_init_thread();
+
+    ms = okl4_env_get_segment("MAIN_SHMEM");
+    assert(ms != NULL);
+
+    shift = *(okl4_word_t *)okl4_env_get("CAESAR_CIPHER_SHIFT");
+
+    linux_cap = *(okl4_kcap_t *)okl4_env_get("ROOT_CELL_CAP");
+
+
+    while (1) {
+        okl4_notify_wait(DECRYPT_MASK, &mask);
+
+        c = (char *)ms->virt_addr;
+
+        while (*c != '\0') {
+            tmp = *c - shift;
+            if ((tmp < 65 && (*c >= 65 && *c <= 90)) || (tmp < 97 && (*c >= 97 && *c <= 122))) {
+                tmp += 26;
+            }
+            *c = tmp;
+            c++;
+        }
+
+        okl4_notify_send(linux_cap, DECRYPT_MASK);
+    }
+}
diff -rupN original/okl4_3.0/projects/examples/SConstruct modified/okl4_3.0/projects/examples/SConstruct
--- original/okl4_3.0/projects/examples/SConstruct 2008-10-20 05:03:51.000000000 +0200
+++ modified/okl4_3.0/projects/examples/SConstruct 2008-12-09 16:37:46.000000000 +0100
@@ -72,7 +72,7 @@ kcell = build.Kernel()
 
 # Create a cell for each example, ensure valid multi-cell setup
 
-valid_examples = ["hello", "args", "pds_zones", "pingpong", "echo", "chatterbox", "decrypt", "oklinux", "empty"]
+valid_examples = ["hello", "args", "pds_zones", "pingpong", "echo", "chatterbox", "decrypt", "mydecrypt", "oklinux", "empty"]
 
 # Do not add reverse lookups! The names in the valid_multicell lookup
 # are the names of cells which have ownership of the serial driver.
@@ -80,7 +80,7 @@ valid_examples = ["hello", "args", "pds_
 # eg. echo has serial, chatterbox does not
 valid_multicell = {
     "echo" : ["chatterbox", "decrypt"],
-    "oklinux" : ["decrypt"] }
+    "oklinux" : ["decrypt", "mydecrypt" ] }
 
 serial_lookup = {
     "hello" : True,
@@ -91,6 +91,7 @@ serial_lookup = {
     "chatterbox" : False,
     "oklinux" : True,
     "decrypt" : False,
+    "mydecrypt" : False,
     "empty" : False
     }
 
@@ -152,7 +153,7 @@ for example in example_list:
         cell.env_append(None,
                         key = "ROOT_CELL_CAP",
                         cap = "/%s/main" % root_cell)
-        if example == "decrypt":
+        if example == "decrypt" or example == "mydecrypt":
             cell.env_append(None,
                             key = "CAESAR_CIPHER_SHIFT",
                             value = 1)
@@ -163,7 +164,13 @@ for example in example_list:
         cell.env_append(None,
                         key = "DECRYPT_CELL_CAP",
                         cap = "/decrypt/main")
-
+    if example == root_cell and 'mydecrypt' in example_list:
+        cell.env_append(None,
+                        key = "SHMEM_CAP",
+                        cap = "/mydecrypt/shmem")
+        cell.env_append(None,
+                        key = "DECRYPT_CELL_CAP",
+                        cap = "/mydecrypt/main")
     if build.kernel == "nano":
         num_spaces = 1
     else: # Share the spaces between the cells

_______________________________________________
Developer mailing list
[hidden email]
https://lists.okl4.org/mailman/listinfo/developer
Hannes Payer

Re: [okl4-developer ] Problem with the configuration of a shared memory segment....

Reply Threaded More More options
Print post
Permalink
Hi,

I had the same problem. For me the cloned cross-cell-demo worked
after using the SHMEM_CAP capability key for the shared memory
segment (in cross_cell_demo.c), as defined in the configuration.

- shmem = okl4_env_get_segment("MAIN_SHMEM");
+ shmem = okl4_env_get_segment("SHMEM_CAP");

Best,
Hannes

Hugues Balp wrote:
                               Dear all,

just a first word to say that I have solved the compilations problems of
my preceding post.

Now I wonder how to configure correctly a shared memory segment.

In order to better understand the cross-cell-demo example, I have cloned
and renamed the

example "decrypt" into "mydecrypt" in the okl4_3.0/examples repository.

In order to enable the build of this copy example, I have also edited
the file okl4_3.0/projects/examples/SConstruct.

A patch of okl4_3.0.tar.gz including the resulting modifications is
joined to this mail.

The build command I use to compile the test is the following:

./tools/build.py machine=versatile project=examples pyfreeze=false
EXAMPLE=oklinux,mydecrypt LINUX_APPS=cross-cell-demo kdb_serial=True
TOOLCHAIN=gnu_arm_eabi_toolchain pistachio.TOOLCHAIN=gnu_arm_toolchain

The system boot properly but the following assertion is raised when I
run the executable "cross-cell-demo":

    Assertion failed: shmem != NULL, function cross_cell_open, file
   
/home/hugues/tools/okl4/okl4_3.0/linux/kernel-2.6.24-v2/arch/l4/drivers/cross_cell_demo.c,
line 102.

The related source code is:

    shmem = okl4_env_get_segment("MAIN_SHMEM");
    assert(shmem != NULL);

This problem occurs only when I use the "mydecrypt" example and not when
I use the original one.

So I suppose that the SHMEM segment is well configured when I use the
"decrypt" example and not when

I use its copy, but I wonder why. There is some kind of  hidden
dependency that I don't understand....

When I search for the strings  "MAIN_SHMEM" and "SHMEM" I just see them
in SConscript files

or in source code within a call like "okl4_env_get_segment()"....

The only differences in the file weaver.xml are the name of the
directory used for the shmem ( decrypt on one

side and mydecrypt on the other )....

 I would appreciate any help on this subject.

        Best regards,

                    Hugues Balp.
     






diff -rupN original/okl4_3.0/examples/mydecrypt/SConscript modified/okl4_3.0/examples/mydecrypt/SConscript
--- original/okl4_3.0/examples/mydecrypt/SConscript 1970-01-01 01:00:00.000000000 +0100
+++ modified/okl4_3.0/examples/mydecrypt/SConscript 2008-12-09 16:32:39.000000000 +0100
@@ -0,0 +1,27 @@
+#
+# @LICENCE("Public", "2008")@
+#
+
+Import("*")
+
+libs = ["atomic_ops", "c", "okl4", "l4", "mutex"]
+
+try:
+    if args["serial_driver"]:
+        libs.append(args["serial_driver"])
+        libs.append("serial")
+        #env.Append(CPPDEFINES=[("SERIAL_DRIVER", args["serial_driver"])])
+except:
+    pass
+
+print env.kernel
+ms = env.Memsection("shmem", None, 0x1000, "rw")
+env.add_memsections(None, [ms])
+
+env.Append(CPPDEFINES=[("DECRYPT_MASK", 0x34)])
+
+obj = env.KengeProgram("mydecrypt", LIBS=libs)
+
+env.set_program(obj, heap=0x100000)
+
+Return("obj")
diff -rupN original/okl4_3.0/examples/mydecrypt/src/main.c modified/okl4_3.0/examples/mydecrypt/src/main.c
--- original/okl4_3.0/examples/mydecrypt/src/main.c 1970-01-01 01:00:00.000000000 +0100
+++ modified/okl4_3.0/examples/mydecrypt/src/main.c 2008-12-09 16:32:25.000000000 +0100
@@ -0,0 +1,41 @@
+/* @LICENCE("Public", "2008")@ */
+
+#include <okl4/env.h>
+#include <okl4/init.h>
+#include <okl4/notify.h>
+
+int
+main(int argc, char **argv)
+{
+    okl4_env_segment_t *ms;
+    okl4_kcap_t linux_cap;
+    okl4_word_t mask, shift;
+    char *c, tmp;
+
+    okl4_init_thread();
+
+    ms = okl4_env_get_segment("MAIN_SHMEM");
+    assert(ms != NULL);
+
+    shift = *(okl4_word_t *)okl4_env_get("CAESAR_CIPHER_SHIFT");
+
+    linux_cap = *(okl4_kcap_t *)okl4_env_get("ROOT_CELL_CAP");
+
+
+    while (1) {
+        okl4_notify_wait(DECRYPT_MASK, &mask);
+
+        c = (char *)ms->virt_addr;
+
+        while (*c != '\0') {
+            tmp = *c - shift;
+            if ((tmp < 65 && (*c >= 65 && *c <= 90)) || (tmp < 97 && (*c >= 97 && *c <= 122))) {
+                tmp += 26;
+            }
+            *c = tmp;
+            c++;
+        }
+
+        okl4_notify_send(linux_cap, DECRYPT_MASK);
+    }
+}
diff -rupN original/okl4_3.0/projects/examples/SConstruct modified/okl4_3.0/projects/examples/SConstruct
--- original/okl4_3.0/projects/examples/SConstruct 2008-10-20 05:03:51.000000000 +0200
+++ modified/okl4_3.0/projects/examples/SConstruct 2008-12-09 16:37:46.000000000 +0100
@@ -72,7 +72,7 @@ kcell = build.Kernel()
 
 # Create a cell for each example, ensure valid multi-cell setup
 
-valid_examples = ["hello", "args", "pds_zones", "pingpong", "echo", "chatterbox", "decrypt", "oklinux", "empty"]
+valid_examples = ["hello", "args", "pds_zones", "pingpong", "echo", "chatterbox", "decrypt", "mydecrypt", "oklinux", "empty"]
 
 # Do not add reverse lookups! The names in the valid_multicell lookup
 # are the names of cells which have ownership of the serial driver.
@@ -80,7 +80,7 @@ valid_examples = ["hello", "args", "pds_
 # eg. echo has serial, chatterbox does not
 valid_multicell = {
     "echo" : ["chatterbox", "decrypt"],
-    "oklinux" : ["decrypt"] }
+    "oklinux" : ["decrypt", "mydecrypt" ] }
 
 serial_lookup = {
     "hello" : True,
@@ -91,6 +91,7 @@ serial_lookup = {
     "chatterbox" : False,
     "oklinux" : True,
     "decrypt" : False,
+    "mydecrypt" : False,
     "empty" : False
     }
 
@@ -152,7 +153,7 @@ for example in example_list:
         cell.env_append(None,
                         key = "ROOT_CELL_CAP",
                         cap = "/%s/main" % root_cell)
-        if example == "decrypt":
+        if example == "decrypt" or example == "mydecrypt":
             cell.env_append(None,
                             key = "CAESAR_CIPHER_SHIFT",
                             value = 1)
@@ -163,7 +164,13 @@ for example in example_list:
         cell.env_append(None,
                         key = "DECRYPT_CELL_CAP",
                         cap = "/decrypt/main")
-
+    if example == root_cell and 'mydecrypt' in example_list:
+        cell.env_append(None,
+                        key = "SHMEM_CAP",
+                        cap = "/mydecrypt/shmem")
+        cell.env_append(None,
+                        key = "DECRYPT_CELL_CAP",
+                        cap = "/mydecrypt/main")
     if build.kernel == "nano":
         num_spaces = 1
     else: # Share the spaces between the cells

_______________________________________________
Developer mailing list
Developer@okl4.org
https://lists.okl4.org/mailman/listinfo/developer