sel4学习之旅-CAmkES 2

CAmkES 硬件组件:

硬件组件以组件的形式表示硬件的接口,使用关键字声明组件将创建硬件组件。

component Device {
  hardware;

  provides IOPort io_port;
  emits Interrupt irq;
  dataport Buf mem;
}

下面显示了将硬件组件连接到驱动程序组件的示例,记下连接的参数顺序。

component Driver {
  uses IOPort io_port;
  consumes Interrupt irq;
  dataport Buf mem;
}

assembly {
  composition {
    component Device dev;
    component Driver drv;
    ...
    connection seL4HardwareIOPort ioport_c(from drv.io_port, to dev.io_port);
    connection seL4HardwareInterrupt irq_c(from dev.irq, to drv.irq);
    connection seL4HardwareMMIO mmio_c(from drv.mem, to dev.mem);
  }
}

每种类型的硬件组件接口都有一些工作所需的配置,这是通过设置设备组件实例的属性来完成的。

MMIO

必须指定内存的物理地址和大小(以字节为单位),以便提供给连接的组件。下面的示例指定组件实例命名的端口是从物理地址0xE0000000开始的0x1000字节区域。

component Device {
  hardware;

  dataport Buf mem;
  ...
}

assembly {
  composition {
    component Device d;
    ...
  }
  configuration {
    d.mem_paddr = 0xE0000000;
    d.mem_size = 0x1000;
    ...
  }
}

中断

根据平台的不同,需要指定不同的信息才能将硬件中断源与组件中断处理程序连接。

在 ARM 上,如果您使用的是传统 x86 PIC 控制器,则只需指定一个中断号即可。下面的示例指定在收到中断编号 2 时将发出事件。

component Device {
  hardware;

  emits Interrupt irq;
  ...
}

assembly {
  composition {
    component Device d;
    ...
  }
  configuration {
    d.irq_irq_number = 2;
    ...
  }
}

IO 端口

必须指定 IO 端口的允许范围,下面的示例指定硬件组件实例可以访问大于或等于 0x60 且小于 0x64 的 IO 端口。

component Device {
  hardware;

  provides IOPort io_port;
  ...
}

assembly {
  composition {
    component Device d;
    ...
  }
  configuration {
    d.io_port_attributes = "0x60:0x64";
    ...
  }
}

Port Privileges

CAmkES 允许程序员指定实例通过连接到其他实例的端口所具有的访问权限,这是通过设置端口的属性来完成的。该属性的值必须是包含字母“R”、“W”和“X”的字符串,分别授予端口读取、写入和执行权限。如果未指定,将授予完全访问权限。

component Foo {
  dataport Buf data_a;
  dataport Buf data_b;
}

component Bar {
  dataport Buf data_a;
  dataport Buf data_b;
}

assembly {
  composition {
    component Foo f;
    component Bar b;
    ...
    connection seL4SharedData port_a(from f.data_a, to b.data_a);
    connection seL4SharedData port_b(from f.data_b, to b.data_b);
    ...
  }
  configuration {
    f.data_a_access = "R";
    b.data_a_access = "RW;
    f.data_b_access = "R";
    ...
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值