首页 > 其他分享 >8、异常向量表的安装与调用

8、异常向量表的安装与调用

时间:2024-11-17 13:29:20浏览次数:1  
标签:__ kernel 调用 arch vectors start 安装 向量

1. 回顾中断的发生、处理过程

  • 中断发生的硬件过程

    • 中断处理的软件处理流程

      • CPU执行完当前指令,检查到发生了中断,跳到向量表

      • 保存现场、执行GIC提供的处理函数、恢复现场

    2. 异常向量表的安装

    2.1 复制向量表

    • 汇编代码

    • // arch\arm\kernel\head.S
      1. bl __lookup_processor_type
      ......
      2. bl __create_page_tables
      3. ldr r13, =__mmap_switched
      4. b __enable_mmu
      b __turn_mmu_on
      mov r3, r13
      ret r3
      5. __mmap_switched: // arch\arm\kernel\head-common.S
      6. b start_kernel

    • 复制向量表
    • start_kernel // init\main.c
      setup_arch(&command_line); // arch\arm\kernel\setup.c
      paging_init(mdesc); // arch\arm\mm\mmu.c
      devicemaps_init(mdesc); // arch\arm\mm\mmu.c
      vectors = early_alloc(PAGE_SIZE * 2); // 1.分配新向量表
      early_trap_init(vectors); // 2.从代码把向量表复制到新向量表

      // 3. 映射新向量表到虚拟地址0xffff0000
      /*
      * Create a mapping for the machine vectors at the high-vectors
      * location (0xffff0000). If we aren't using high-vectors, also
      * create a mapping at the low-vectors virtual address.
      */
      map.pfn = __phys_to_pfn(virt_to_phys(vectors));
      map.virtual = 0xffff0000;
      map.length = PAGE_SIZE;
      #ifdef CONFIG_KUSER_HELPERS
      map.type = MT_HIGH_VECTORS;
      #else
      map.type = MT_LOW_VECTORS;
      #endif
      create_mapping(&map);

 

2.2 向量表在哪

上面代码中可以看到代码中向量表位于__vectors_start,它在arch/arm/kernel/vmlinux.lds中定义:

 __vectors_start = .;
.vectors 0xffff0000 : AT(__vectors_start) {
*(.vectors)
}
. = __vectors_start + SIZEOF(.vectors);
__vectors_end = .;
__stubs_start = .;
.stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {
*(.stubs)
}

在代码里搜.vectors,可以找到向量表:

 

3. 中断向量

发生中断时,CPU跳到向量表去执行b vector_irq

vector_irq函数使用宏来定义:

 

4. 处理流程

 

5. 处理函数

 

 

标签:__,kernel,调用,arch,vectors,start,安装,向量
From: https://www.cnblogs.com/liusiluandzhangkun/p/18550464

相关文章

  • win10、11下安装eNSP并完美运行
    前言由于华为已停止对旧版eNSP的维护,很多朋友在升级到Windows11后表示eNSP容易出现报错,存在一些兼容性问题。今天在这里分享一个完美适配Windows11的eNSP版本,若有需要可以自行前往附件下载!软件介绍eNSP–华为官方推出用以进行华为网络学习练习实验,实际工程的理......
  • Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家
    最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了ManjaroKDEPlasma,经过一段时间的发展,Linux桌面可用性大大提高。Kindle->KindleMate->Anki这条路在linux下我用Kindle->KindleVocab->Anki这么代替了之后,其他软件都能凑合用,加之用了电信的天翼云电脑后......
  • windows下安装宝塔面板错误怎么办
    在Windows下安装宝塔面板可能会遇到一些特定的问题,因为宝塔面板主要设计用于Linux系统。不过,宝塔面板官方并没有提供Windows版本的安装包。如果你确实需要在Windows下使用类似宝塔面板的功能,可以考虑以下几种解决方案:1.使用虚拟机安装虚拟机软件:下载并安装Virtual......
  • 修改公司网站 插件,如何在公司网站后台安装和管理插件
    插件可以扩展网站的功能,提升用户体验。以下是具体步骤:登录后台:打开浏览器,输入网站的后台地址,例如 http://yourdomain.com/admin。输入管理员账号和密码,点击“登录”。进入插件管理:登录后,点击顶部菜单栏中的“插件”或“扩展”。选择“插件管理”或“扩展管理”。......
  • 安装Harbor镜像仓库
    安装Harbor镜像仓库安装dockercurl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun下载harbor安装包#下载DockerHarbor安装包wgethttps://github.com/goharbor/harbor/releases/download/v2.12.0/harbor-offline-installer-v2.12.0.tgz#解压安装包[......
  • npm | Yarn | pnpm Node.js包管理器比较与安装
    一、包管理器比较参考原文链接:2024Node.jsPackageManager指南:npm、Yarn、pnpm比较—2024Node.jsPackageManagerGuide:npm,Yarn,pnpmCompared(nodesource.com)以下是对Node.js的三个包管理工具npm、Yarn和pnpm的优缺点总结:npm(NodePackageManag......
  • Win11安装kali子系统
    Win11安装kali子系统1.开启服务,更新wsl2启用或关闭Windows功能->开启适用于Linux的Windows子系统wsl--update#更新到wsl2`wsl--status#检查一下`2.安装kali,换源配置工具wsl--installkali-linux#安装kali-linux`换源中科大源,会变快很多,将官方源注......
  • IDEA 插件安装失败/无法联网
    今天在安装copilot时点击安装没反应,离线安装显示connectionreset,猜测应该是网络问题。从网上找到以下方法一、二、三均没有解决,于是我琢磨出来方法四,现在都记录下来。方法一/二参考以下博客https://www.cnblogs.com/renlywen/p/13458928.html方法三:配置hosts文件首先取消上述......
  • Java 8安装及配置
    看完本文,您将学会1.Java8的安装与配置;2.通过控制台在您的电脑上运行第一个Java程序零,名词解释JRE:JavaRuntimeEnvironment意思是Java的运行环境,如果只是为了某些需要java运行环境的软件则只下载这个即可JDK:JavaDevelopmentKit开发用的,里面包含了JRE,适用于程序开发者,电脑......
  • Node.js | npm下载安装及环境配置教程
    前言:npm是Nodejs下的包管理器,在下载Node.js后自动安装,因此本文同时适合Node.js/npm的下载安装及环境配置。一、软件安装Node.js中文网官网下载页:Node.js中文网(nodejs.com.cn)1)进入下载页,选择需要的版本下载(建议选择“长期稳定版”)。2)打开安装程序(以.m......