|
|
|
Hugues Balp
|
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
|
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
|
||||||||||||||||
| Free Embeddable Forum Powered by Nabble | Help |