JICAMA OS由于技术上面的原因一直停留在类似LINUX的单内核架构中,为了更好的支持文件系统,设备驱动,和网络,建立了自己的微内核架构,同时与单内核调用并存,单内核的系统调用号是0x80,微内核的系统调用号为0x40,并用此模块来开发高度可移植的文件系统。
这里是开发中的一个范例: 服务端: static inline int msgcall(int func, int task, msg_t *ptr) { int return_value; __asm__ volatile ("int $0x40" \ : "=a" (return_value) \ : "0" ((long)(0x00)),"b" ((long)(func)),"c" ((long)(task)),"d" ((long)(ptr))); \ return return_value; } int send(int task, msg_t *ptr) { return msgcall(SEND, task , ptr); } int receive(int task, msg_t *ptr) { return msgcall(RECEIVE, task , ptr); } int reply(int task, msg_t *ptr) { return msgcall(REPLY, task , ptr); } void ser_init() { printk("server_task1 init .....\n"); printk("server_task1 RUNING .....\n"); } void server_task1() { int i; char buf[256]; msg_t m; ser_init(); /*server init*/ while(1){ m.msg_addr=(u32_t)buf; receive(FIRST_KTASK, &m); /*receive message*/ printk("receive OK\n"); printk("MSG INFO: %s,Task=%d\n", buf, m.self); /*dump buffer!*/ m.msg_addr=2; /*call result*/ reply(m.self, &m); /*reply this message*/ } } 客户端: int main (int argc, char *argv[]) { pid_t pid; int i = 0; u32_t b=0; int ret; char *str="First Message here!"; msg_t m; m.self=0; m.func=1; m.message_len=strlen(str)+1; m.msg_addr= (u32_t)str; printf("\nMESSAGE SEND!\n"); ret=send(32, &m); printf("Return Value is %d\n", ret); while (environ[i]) { printf("%s\n", environ[i++]); } return 1; } 在象册里面我保存了这里的开发快照,有兴趣的朋友可以看一看。 
|