Jicama OS成功建立微内核架构

类别:编程语言 点击:0 评论:0 推荐:

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;
}
在象册里面我保存了这里的开发快照,有兴趣的朋友可以看一看。

本文地址:http://com.8s8s.com/it/it22844.htm