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

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(使用前将#替换为@)

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

  • iwlist() 命令如何扫描无线网络?

    我想知道 iwlist 命令如何在 Linux 中扫描可用的无线网络 我阅读了它的源代码 发现有一个 ioctl 调用 使用 SIOCSIWSCAN 来触发扫描 并使用 SIOCGIWSCAN 来获取扫描结果 但是这些系统调用如何捕获和分析
  • Metal 内核在新款 MacBook Pro(2016 年末)GPU 上运行不正常

    我正在开发 macOS 项目 该项目使用 Swift 和 Metal 在 GPU 上进行图像处理 上周 我收到了新的 15 英寸 MacBook Pro 2016 年末 并注意到我的代码有一些奇怪的地方 应该写入纹理的内核似乎没有这样做 经
  • 在内核空间中存储结构体数组,Linux

    我相信我可能有点过度思考这个问题 我的文件系统上有一个文本文件 我在启动时解析该文件并将结果存储到结构数组中 我需要将此数组从用户空间复制到内核空间 copy from user 并且必须让内核随时可以访问此数据 内核空间中的数据需要通过
  • Linux 内核 - 我可以在不同的函数中锁定和解锁 Spinlock 吗?

    我是内核编程和锁编程的新手 在不同的函数中锁定和解锁自旋锁是否安全 我这样做是为了同步代码流 另外 在 schedule 中使用自旋锁 锁定和解锁 是否安全 让调度程序等待获取锁是否安全 提前致谢 代替spinlock 你可以使用semap
  • 内存映射 IO - 它是如何完成的?

    我已经了解了端口映射 IO 和内存映射 IO 之间的区别 但我无法弄清楚内存映射 Io 在现代操作系统 windows 或 linux 中是如何实现的 我所知道的是 物理内存的一部分被保留用于与硬件通信 并且有一个 MMIO 单元负责处理总
  • 如何安排Makefile来编译具有多个.c文件的内核模块?

    如何安排Makefile来编译具有多个 c文件的内核模块 这是我当前的 Makefile 它是由自动生成的KDevelop http www kdevelop org TARGET nlb driver OBJS nlb driver o
  • 如何以编程方式动态管理 iptables 规则?

    我需要查询现有规则 以及能够轻松添加和删除规则 我还没有找到任何 API 来执行此操作 我缺少什么吗 我最接近的解决方案是使用iptables save iptables xml用于查询并手动调用 iptables 命令本身来添加 删除规则
  • 抢占和上下文切换的区别

    一点介绍 我目前正在编写一个小型 读微型 RTOS 内核 它应该与内核中的大多数内容是一体的 然而 我找不到关于下面列出的一些事情的太多信息 这会很有帮助 除此之外 它实际上不是某种大学项目 而是我按照自己的意愿做的事情 回答所有问题的一个
  • 什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同

    我想知道什么是kthread以及为什么它不占用任何内存并且没有打开的文件 我编写了一些代码 它将简单地以父子树格式打印当前正在运行的进程的 PID 以及一些附加信息 例如使用的 VMZ RSS 线程 打开文件 PID 2 的所有子进程命名为
  • 由于 system.currentTimeMillis() 导致系统 CPU 使用率较高

    我正在我们的 Storm Supervisor Wheezy 机器 上调试高系统 CPU 使用率 不是用户 CPU 使用率 以下是观察结果 相关进程的 perf 输出 Events 10K cpu clock 16 40 java kern
  • 定义新的套接字选项以在 TCP 内核代码中使用

    我正在尝试向 TCP 内核代码添加一些功能 在tcp input c 我希望我实现的代码仅在某些情况下运行 我想添加一个控制标志 可以从用户空间应用程序设置它 我 认为我 需要添加一个新的套接字选项 以便我可以完成以下操作setsockop
  • 破坏用户空间是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能是一个简单的问题 但是 我听说在内核上工作的唯一规则是不要破坏 用户空间 所以我想知道这意味着什么 打破用户空间这是怎么发生的 Ed
  • 如何设置 intel_idle.max_cstate=0 来禁用 c 状态?

    我想在我的计算机上禁用 c 状态 我在 BIOS 上禁用了 c state 但没有获得任何结果 不过 我找到了一个解释 大多数较新的 Linux 发行版 在配备 Intel 处理器的系统上 使用 intel idle 驱动程序 可能编译到内
  • 对内核模块代码进行单元测试是否可行?

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

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • 在执行期间访问.eh_frame数据

    我正在尝试访问以下内容 eh frame正在运行的程序的一部分 具体来说 该程序是 Linux 内核 2 6 34 8 这 eh frame包含用于异常处理的有用数据 我想在内核代码内部使用它 该部分已经由以下人员编写gcc readelf
  • 系统调用:sys_exit()、SYS_exit 和 exit() 之间的区别

    SYS exit sys exit 和 exit 之间有什么区别 我的理解是 Linux内核提供了系统调用 这些调用在man 2 syscalls 这些系统调用的包装函数由glibc它们的名称与系统调用大多相似 我的问题 在man 2 sy
  • 内核与系统中的 Windows 进程

    我有一些与内核和用户模式下的 Windows 进程相关的问题 如果我有一个 hello world 应用程序和一个公开新系统调用 foo 的 hello world 驱动程序 我很好奇一旦处于内核模式 我能做什么和不能做什么 对于初学者来说
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的

随机推荐

  • 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