内核中关于启动条件的英文说明整理

2023-10-27

内核中关于启动条件的说明

/*
 * Kernel startup entry point.
 * ---------------------------
 *
 * This is normally called from the decompressor code.  The requirements
 * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
 * r1 = machine nr, r2 = atags pointer.
 *
 * This code is mostly position independent, so if you link the kernel at
 * 0xc0008000, you call this at __pa(0xc0008000).
 *
 * See linux/arch/arm/tools/mach-types for the complete list of machine
 * numbers for r1.
 *
 * We're trying to keep crap to a minimum; DO NOT add any machine specific
 * crap here - that's what the boot loader (or in extreme, well justified
 * circumstances, zImage) is for.
 */

上面的英文说明是摘抄自内核的head.S文件,是关于内核启动条件的说明。head.S文件是整个内核的入口,内核的启动顺序和uboot是一样的,先执行汇编语句再跳转到C语言。

启动条件整理

(1)这些代码通常被解压缩代码调用,要求关闭MMU、关闭D-cache、r0 = 0、r1 = 机器码、r2 =uboot传参的地址,I-cache的状态不关心。如果不清楚为什么被解压缩代码调用,参考博客:《vmlinuz/vmlinux、Image、zImage与uImage的区别》
(2)uboot给内核传参是通过r0、r1、r2三个寄存器,其中:r0一般都是填零,r1是传机器码,r2是uboot给内核传参的tags的地址。
(3)内核前期的启动代码必须是位置无关码,如果你内核的链接地址是0xc0008000,那你必须将虚拟地址转换为物理地址,即__pa(0xc0008000)。__pa()是将虚拟地址转换为物理地址的宏。
(4)linux/arch/arm/tools/mach-types文件里是内核支持的机器码,也就是r1寄存器的值要在mach-types进行匹配,如果匹配成功则启动内核;如果匹配不上,则说明内核不支持该机器码,启动失败。
(5)尽量保持内核启动代码的简短,保持内核启动代码都是共用部分的代码,特定CPU部分的代码都放在bootloader(比如uboot)里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内核中关于启动条件的英文说明整理 的相关文章

  • //什么是路径,它与/有什么不同

    我们知道根目录是 根据posix 还有另一个与 不同的目录 当您 ls 和 ls 时 输出是相同的 就像 stat 一样 但是如果您 cd 和 cd 它们是不同的 尽管目录内容相同 这真的让我很困惑 有人得到答案吗 From Bash FA
  • 将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数?

    我将笔记本电脑的i5 CPU更换为i7 CPU 这样它可以运行得更快 但由于i7的功率更大 温度也比以前更高 所以我的笔记本经常死机 所以 我使用cpupower来指定CPU的最大频率 它起作用了 现在 我的问题是 有没有办法在启动时将CP
  • cscope 或 ctags 为什么选择其中之一? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我主要使用 vim gvim 作为编辑器 并且正在考虑结合使用lxr Linux 交叉参考 http
  • 对内核模块代码进行单元测试是否可行?

    如果是这样我应该使用什么技术 我正在考虑使用 hippomock 因为它们可以用来模拟 C 方法 还有更好的方法吗 如果是这样 任何人都可以提供建议 或者您认为内核的单元测试是否太过分了 从 Linux 内核版本 5 5 开始KUnit可用
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • 操作系统如何知道缺失页面的磁盘地址?

    分页充当虚拟地址空间和物理地址空间之间的间接层 给定一个地址 操作系统 OS 内存管理单元 MMU 将其转换为主内存位置 我的问题是 主内存中不存在该页面的情况 操作系统如何知道在磁盘上哪里可以找到该页面 它在哪里存储1的信息 它不存储在页
  • 在执行期间访问.eh_frame数据

    我正在尝试访问以下内容 eh frame正在运行的程序的一部分 具体来说 该程序是 Linux 内核 2 6 34 8 这 eh frame包含用于异常处理的有用数据 我想在内核代码内部使用它 该部分已经由以下人员编写gcc readelf
  • Linux 内核:Spinlock SMP:为​​什么 spin_lock_irq SMP 版本中有 preempt_disable()?

    Linux内核中的原始代码是 static inline void raw spin lock irq raw spinlock t lock local irq disable preempt disable spin acquire l
  • 从 Linux 内核模块的文件描述符获取文件名/路径?

    在Linux内核模块中 有没有一种方法可以从文件名 路径中获取文件名 路径 unsigned int fd 我知道这个答案 如何从内核模块内的文件描述符获取文件名 https stackoverflow com questions 8250
  • 内核如何区分线程和进程

    Linux 中的线程被称为轻量级进程 无论是进程还是线程 它们的实现都是通过task struct数据结构 1 gt 那么 从这个意义上说 内核如何区分线程和进程 2 gt 当发生上下文切换时 线程如何在上下文切换中获得更少的开销 因为在此
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • Windows 内存映射文件

    我正在尝试研究 Windows 内核在内存映射文件 虚拟内存方面的行为 具体来说 我感兴趣的是确定内存映射文件的内容 由 Windows 刷新到磁盘的频率以及 Windows 使用什么标准来决定是时候这样做 我在网上做了一些研究 除了 MS
  • 选择 c 和 gamma 值

    您好 我正在使用 SMO 执行 SVM 分类 其中我的内核是 RBF 现在我想选择c and sigma值 使用网格搜索和交叉验证 我是内核函数的新手 请帮助 一步一步的过程 选择一些您认为有趣的 C 和 sigma 值 例如 C 1 10
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 如何编译一个简单的 multiboot2 裸机可执行文件?

    我想开始写一个操作系统内核 然后 我找到了一个document http nongnu askapache com grub phcoder multiboot pdf引入 multiboot2 规范 有三个示例代码文件 名为boot S
  • 在构建内核模块时为什么需要 /lib/modules? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在Kbuild树中 当我们编写一个简单的hello ko程序时 为什么我们需要在构建规则中使用 C lib module 为什么需要这样做
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • 在 Google Colab 中重新启动内核

    我正在尝试通过单元重新启动 Google Colab Jupyter Notebook 中的内核 前面给出的选项 import os os exit 00 没问题 但在我看来 这不是一种非常 Pythonic 的重新启动内核的方式 另一种选
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R

随机推荐

  • Mairadb数据库的备份和恢复

    Mairadb数据库的备份和恢复 一 检查数据库状态 1 检查mariadb的服务状态 2 测试进入mariadb数据库 二 配置二进制日志功能 1 修改 etc my conf 2 重启服务 3 查看二进制日志文件 4 查看binlog开
  • chrome浏览器设置广告拦截器-Adblock Plus

    1 点击下面 chrome 网上应用店 Adblock Plus 的插件链接地址 https chrome google com webstore detail adblock plus free ad bloc cfhdojbkjhnkl
  • 【个人记录】bert初步学习

    目的 背景 使用医疗方面的bert模型 进行实体识别和医患匹配 参考 如何快速使用BERT 知乎 zhihu com tensorflow版本与python版本不相容的问题 fltenwall的博客 CSDN博客 中文医疗预训练模型 MC
  • ICLR 2022

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 CrossFormer A Versatile Vision Transformer Based on Cross scale Attention CrossForme
  • 安卓架构组件实战——Lifecycle

    注 本文涉及代码请看 项目源码 Lifecycle是谷歌推出的一个架构组件 用于感知组件生命周期 并赋予了非组件对象感知生命周期的能力 Lifecycle组件用来响应另一个组件的生命周期状态变化 例如Activity和Fragment 可以
  • 软路由IP配置指南

    在网络设置中 正确地配置软路由IP是至关重要的一步 本文将以轻松风格为您提供详细解决方案 帮助您完成这个任务 并确保操作价值和专业度 随着互联网的普及 家庭或小型企业越来越需要强大而可靠的网络连接 使用软路由可以让我们更好地管理局域网内部流
  • 升级springboot2.0升级后出现的问题以及解决办法

    本来是准备升级springcloud的版本 Finchley RC1 gt Greenwich SR3 父模块的pom xml中springcloud版本由Finchley RC1升级到Greenwich SR3 对应的springboot
  • servlet获取表单数据

    Java servlet获取form表单数据 参数 在 Servlet 中如何使用 HttpServletRequest 获取请求参数和 request 对象传递数据有哪些方法 1 获取请求参数 在实际开发中 经常需要获取用户提交的表单数据
  • windows服务器tomcat部署Java项目并配置nginx

    下载安装jdk并配置环境变量 下载安装 百度网盘共享 win64位 提取码 1ytp 配置环境变量 第一步 配置JAVA HOME 值为JDK的安装目录 第二步 配置Path 需要注意Path路径一般是存在的 只需要追加即可 这里使用 JA
  • linux&树莓派开发——“交叉编译&软硬链接“ 工作中必然用到的技术 实现不同主机间交互开发

    交叉编译 一 交叉编译概念 二 为什么要交叉编译 交叉编译的基本知识 三 什么是交叉编译链 3 1 交叉编译链的命名规则 3 2 交叉编译工具链 交叉编译器 是什么 四 交叉编译工具链安装 1 临时有效 关闭窗口就无效了 2 永久有效 多少
  • 编写NodeJs脚本实现接口请求

    要编写运行脚本 需要先搭建开发环境 环境搭建 nodeJs脚本运行 当然需要先安装nodejs环境 官方地址在这里 nodejs官网 打开官网地址 可以看到下面一句话 Node js is an open source cross plat
  • 小程序权限设置:小程序下载图片保存到相册拒绝权限后,再次打开权限的解决方案

    小程序下载图片保存到相册功能 首次操作会提示 保存图片或视频到你的相册 有 拒绝 和 允许 两个选项 如果选择了拒绝就会保存失败 saveImageToPhotosAlbum fail auth deny 那么后续想打开该权限又该怎么操作呢
  • 今天才知道!华为手机摄像头可不止能拍照,它还能提高办公效率

    说起华为手机 大家首先想到的就是国产手机代表 拍照特别厉害 的确华为手机的拍照的确很厉害 但是你知道吗 华为手机的摄像头可不止能拍照哦 其实它还能提高工作效率 摄像头怎么办公 下面我们就一起看看吧 1 文档矫正功能 用相机拍摄文件 PPT幻
  • [Python系列-20]:爬虫 - urllib.request.urlopen(), 函数无法返回的解决办法

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119799484 最近是使用爬
  • SpringCloudAlibaba之Sentinel 熔断规则详解

    Sentinel 熔断降级简介 基本介绍 除了流量控制以外 对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一 一个服务常常会调用别的模块 可能是另外的一个远程服务 数据库 或者第三方 API 等 例如 支付的时候 可能需要远
  • 记录一次docker安装pxc的坑 (unknown option --ck)

    centos7 docker pxc 安装教程可以参考 https blog csdn net u013218587 article details 80863054 遇到的坑 navicat连接不上mysql 首先解决宿主机防火墙问题 最
  • 制造业数字化转型的实战路线图

    转载本文需注明出处 微信公众号EAWorld 违者必究 中国在2015年发布制造强国战略第一个十年的行动纲领 中国制造2025 这是中国部署全面推进实施制造强国的战略文件 按照 中国制造2025 的战略 中国正加快推动新一代信息技术和制造技
  • ChatGPT 真的太强大了!

    如果你问我 2023年最大的机会是什么 那一定是 ChatGPT 从2月份GPT3 5版本发布 到现在的4 0PLUS升级版 ChatGPT的迭代速度已经完全超过了我们的想象 它已经可以替代很多行业的工作 比如说 文案 程序 客服 设计 律
  • redis集群环境搭建以及java中jedis客户端集群代码实现

    最近项目中用到了redis 所以就找了相关的资料学习了 然后搭建了redis集群 以及客户端的java代码实现 由于对linux不太熟悉 所以在Linux上搭建redis集群的时候碰到了很多问题 下面就大概总结下 redis相关网站 官网
  • 内核中关于启动条件的英文说明整理

    内核中关于启动条件的说明 Kernel startup entry point This is normally called from the decompressor code The requirements are MMU off