seL4(3)-中断

seL4-中断

0. 前言

还是一样的操作。

./init --tut interrupts
cd interrupts_build
ninja  # 这里报错了

0.1 stack 的安装

ninja 报错了,应该是和 stack 有关。尝试了很久。终于可以了。

apt install haskell-stack
stack upgrade

stack 相关问题参考:https://github.com/seL4/camkes-vm-examples/issues/32

报错一直是 raw.githubusercontent.com 连接不上,我都有阴影了。

HttpExceptionRequest Request {
  host                 = "raw.githubusercontent.com"
  port                 = 443
  secure               = True
  requestHeaders       = [("User-Agent","The Haskell Stack")]
  path                 = "/commercialhaskell/stackage-content/master/stack/stack-setup-2.yaml"
  queryString          = ""
  method               = "GET"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 10
  responseTimeout      = ResponseTimeoutDefault
  requestVersion       = HTTP/1.1
  proxySecureMode      = ProxySecureWithConnect
}
 ConnectionTimeout

stack upgrade 无法正确运行(大概率不可以),就上 stack github 上下载安装包,解压然后将里面的stack安装(应该是复制到/usr/bin)。可是就算升级了还是不可以。还需要 stack setup

stack setup如果不行,需要修改yaml文件。参考如下两个链接进行配置:
Stackage 源使用帮助Hackage 源使用帮助 这两个都要看

  1. 编辑 ~/.stack/config.yaml 添加两部分内容(就是上面两个链接里说明的内容)
  2. 手动下载 global-hints.yaml 到 ~/.stack/pantry/global-hints-cache.yaml
  3. stack setup 应该是可以了,这时候会安装GHC。
  4. capDL-tool 是我是手动安装的。
git clone https://gitee.com/sel4_zl/capdl.git # gitee 快些
cd capDL-tool
make
make install

0.2 安装 libarchive

中间缺少什么模块我都自己默默安装了,就是这个libarchive真恼火。遇到问题了,下面是解决办法,建立软链接。报错如下:

      Library can not be loaded: [Errno 2] No such file or directory: b'liblibarchive.a'
      error: [Errno 2] No such file or directory: b'liblibarchive.a'

参考链接:libarchive错误:没有这样的文件或目录:‘liblibarchive.a’

pip3 install libarchive
cd /usr/lib/x86_64-linux-gnu/
ln -s -f libarchive.a liblibarchive.a

ninja 终于可以了,卡了我两天,想哭。终于可以学习中断的部分了,还有camkes。呜呜。

1. IRQController

root task拥有一个可以控制所有IRQ中断号的权能 seL4_CapIRQControl。
这个权能可以在 CSpaces 和 CSlots 间移动,但不能被复制。调用该权能意味着对所有irq的权能跟着移动了。通过 seL4_IRQControl_Get 说明希望这个 IRQControl 权能处理的 IRQ 是什么?
IRQControl

error = seL4_IRQControl_Get(seL4_IRQControl, 7, cspace_root, 10, seL4_WordBits);

// 触发 irq_control 权能,将 TTC0_TIMER1_IRQ 中断放置在 cslot irq_handler
error = seL4_IRQControl_Get(irq_control, TTC0_TIMER1_IRQ, cnode, irq_handler, seL4_WordBits);

2. IRQHandlers

IRQHandler权能可以访问一个单个IRQ,它们可以被移动或复制。IRQHandlers可通过调用 IRQControl 权能获取,获取通过架构相关的参数。

2.1 接收中断

将 notification 绑定到 irq_handler权能。

error =  seL4_IRQHandler_SetNotification(irq_handler, notification);

在这里插入图片描述

2.2 处理中断

当一个中断被接收后,可以通过IRQHandler中的 seL4_IRQHandler_Ack 来取消掩码。
直到IRQHandler被确认前,seL4不会再往前递交更多的中断。

error = seL4_IRQHandler_Ack(irq_handler);

在这里插入图片描述

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值