2 * Copyright (c) 2009 The Regents of the University of California
3 * Barret Rhoden <brho@cs.berkeley.edu>
4 * See LICENSE for details.
18 #include <ros/error.h>
20 #define DECL_PROG(x) \
21 extern uint8_t (COUNT(sizeof(size_t)) _binary_obj_user_apps_##x##_size)[],\
22 (COUNT(_binary_obj_user_apps_##x##_size)_binary_obj_user_apps_##x##_start)[];
24 #define KFS_ENTRY(x) {#x, _binary_obj_user_apps_##x##_start, (size_t) _binary_obj_user_apps_##x##_size},
27 * Hardcode the files included in the KFS. This needs to be in sync with the
28 * userapps in kern/src/Makefrag.
29 * Make sure to declare it, and add an entry. Keep MAX_KFS_FILES big enough too
31 DECL_PROG(roslib_proctests);
32 DECL_PROG(roslib_fptest);
33 DECL_PROG(roslib_null);
34 DECL_PROG(roslib_spawn);
35 DECL_PROG(roslib_hello);
36 DECL_PROG(roslib_mhello);
37 DECL_PROG(roslib_measurements);
38 DECL_PROG(parlib_draw_nanwan_standalone);
39 DECL_PROG(parlib_channel_test_client);
40 DECL_PROG(parlib_channel_test_server);
41 DECL_PROG(parlib_hello);
42 DECL_PROG(parlib_matrix);
43 DECL_PROG(parlib_manycore_test);
44 DECL_PROG(parlib_pthread_pthread_test);
45 DECL_PROG(parlib_pthread_blackscholes);
46 DECL_PROG(parlib_fptest);
48 struct kfs_entry kfs[MAX_KFS_FILES] = {
49 KFS_ENTRY(roslib_proctests)
50 KFS_ENTRY(roslib_fptest)
51 KFS_ENTRY(roslib_null)
52 KFS_ENTRY(roslib_spawn)
53 KFS_ENTRY(roslib_hello)
54 KFS_ENTRY(roslib_mhello)
55 KFS_ENTRY(roslib_measurements)
56 KFS_ENTRY(parlib_draw_nanwan_standalone)
57 KFS_ENTRY(parlib_channel_test_client)
58 KFS_ENTRY(parlib_channel_test_server)
59 KFS_ENTRY(parlib_hello)
60 KFS_ENTRY(parlib_matrix)
61 KFS_ENTRY(parlib_manycore_test)
62 KFS_ENTRY(parlib_pthread_pthread_test)
63 KFS_ENTRY(parlib_pthread_blackscholes)
64 KFS_ENTRY(parlib_fptest)
67 ssize_t kfs_lookup_path(char* path)
69 for (int i = 0; i < MAX_KFS_FILES; i++)
70 // need to think about how to copy-in something of unknown length
71 if (!strncmp(kfs[i].name, path, strlen(path)))
77 * Creates a process from the file pointed to by the KFS inode (index)
78 * This should take a real inode or something to point to the real location,
79 * and env_create shouldn't assume everything is contiguous
81 struct proc *kfs_proc_create(int kfs_inode)
83 if (kfs_inode < 0 || kfs_inode >= MAX_KFS_FILES)
84 panic("Invalid kfs_inode. Check you error codes!");
85 struct proc* p = env_create();
87 env_load_icode(p,NULL,kfs[kfs_inode].start, kfs[kfs_inode].size);