kernel相关内容
我正在尝试了解启动时为 arch/arm 保留的内核内存. setup_arch() 中有一个调用 paging_init() 用于设置页表、初始化区域内存映射等.它还在分配实际 mem_map 之前分配一个 零页. void __init paging_init(const struct machine_desc *mdesc){无效 *zero_page;---zero_page =
..
我正在学习 linux 内核内部结构,在阅读“理解 Linux 内核"时,我遇到了很多与内存相关的问题.其中之一是,如果我的系统上仅安装了 512 MB 的物理内存,Linux 内核如何处理内存映射. 据我所知,内核将 0(或 16)MB-896MB 物理 RAM 映射到 0xC0000000 线性地址并可以直接寻址.所以,在上述我只有 512 MB 的情况下: 内核如何从 512 M
..
我正在为我正在开发的一个非常基本的内核处理键盘输入,但我完全陷入困境.我似乎无法在网上找到任何可以显示我需要知道的信息的信息. 我的内核现在在保护模式下运行,所以我不能使用实模式键盘例程而不跳转到实模式并返回,这是我试图避免的.我希望能够从保护模式访问我的键盘.有谁知道如何做到这一点?到目前为止,我发现的唯一一件事是它涉及直接使用输入/输出端口与控制器对话,但除此之外,我感到很困惑.当然,这
..
24 小时后,我收到 Raspberry Pi 2 Syslogs 消息,之后我必须硬重置/重启 Pi. 来自 syslogd@raspberry 的消息在 3 月 20 日 23:30:53 ...内核:[12540.865789] 内部错误:糟糕:17 [#1] PREEMPT SMP ARM来自 syslogd@raspberry 的消息在 3 月 20 日 23:30:53 ...内核:
..
我对这三个问题的概念感到困惑 为什么我们需要辅助程序加载器? 它在哪个内存中被加载和重定位? 系统内存和RAM有什么区别? 据我通过阅读链接了解是.. 当系统内部存储器无法完全容纳 uboot 时需要 SPL,因此我们需要使用称为 SPL 的最小代码片段来初始化内存.SPL 是真的重定位还是只有 uboot 自己重定位? 解决方案 让我解释一下 OMAP 平台为例(
..
我已经了解了端口映射 IO 和内存映射 IO 之间的区别,但我无法弄清楚在现代操作系统(windows 或 linux)中如何实现内存映射 Io 我所知道的是,物理内存的一部分被保留用于与硬件通信,并且有一个 MMIO 单元参与处理总线通信和其他与内存相关的事情 驱动程序如何与底层硬件通信?驱动程序会使用哪些功能?与视频卡通信的地址是固定的,还是在使用它们之前有某种“协议"? 我
..
我无法理解内核和操作系统之间的区别.我看不出它们之间有什么区别.内核是操作系统吗? 解决方案 操作系统的技术定义是“由一组特定的库和基础设施组成的平台,用于构建应用程序并相互交互".从这个意义上说,内核就是一个操作系统. 最终用户的定义通常围绕“提供桌面、应用程序快捷方式、网络浏览器和媒体播放器的软件包".内核与该定义不匹配. 因此,对于最终用户而言,Linux 发行版(例如
..
所以,据我了解,有两种类型的程序,一种是解释型的,一种是编译型的.解释程序由解释器执行,解释器是其所在平台的本机应用程序,编译程序本身就是它们所在平台的本机应用程序(或系统软件). 但我的问题是:除了内核之外,还有其他东西实际上是由 CPU 直接运行的吗?Windows 可执行文件是“Windows 可执行文件",而不是 x86 或 amd64 可执行文件.这是否意味着不是内核的所有其他进程
..
powerCommand:mov si, 关机调用打印字符串;在这里休眠命令移动斧头,0x1000mov ax, ss移动 sp, 0xf000移动斧头,0x5307移动 bx, 0x0001mov cx, 0x0003整数 0x15ret 我希望程序等待 1 秒钟,然后继续关机.目前它在关闭消息后立即关闭.我在我用 nasm 制作的自定义操作系统上运行它. 解决方案 假设你的程序是由
..
我正在阅读如何编写一个简单的操作系统,其中说: 对于您的第一个操作系统,您最好坚持使用 MikeOS 中使用的汇编语言.它更冗长且不可移植,但您不必担心编译器和链接器.此外,您需要一些组装才能启动任何操作系统. 为什么启动内核需要汇编代码?为什么不只是 c 代码? 我在某些实现中看到的是 assembly 文件,除了设置一些幻数之外,它只调用了在外部 c 文件中定义的某些函数.
..
我正在制作一个基本的 C 内核.(由汇编程序加载)我正在使用适用于 Windows 的 i686-elf 交叉编译器对其进行编译.我的C代码如下: void cls();无效的drawhappy();无效的主要(){char *vidptr = (char *)0xb8000;cls();绘制快乐();}无效的cls(){char *vidptr = (char *)0xb8000;无符号整数
..
我对术语的以下理解是这样的 1) 中断 是由硬件发起的“通知",用于调用操作系统以运行其处理程序 2) 陷阱 是由软件发起的“通知",用于调用操作系统以运行其处理程序 3) 错误 是一个异常,如果发生错误但可以恢复,则由处理器引发 4) 中止 是处理器在发生错误但不可恢复时引发的异常 为什么我们称它为 segmentation fault 而不是 segmen
..
我正在使用 GCC 在 Linux 环境中学习操作系统开发.我在 Bran 的内核开发中了解到,编译时 C 中的所有函数和变量名称在其相应的汇编源文件中都以“_"(下划线)开头.但是当我浏览一个编译好的C程序的汇编源代码时,我什至找不到“_main"函数.我执行了以下操作. cpp 示例.c 示例.i gcc -S 样本.I 解决方案 早期确实如此.给定的 C 函数 foo 将
..
我喜欢操作系统,并最终希望成为一名主要从事内核开发的操作系统开发人员.将来,C 语言仍将是首选语言,我还应该尝试学习什么? 解决方案 我认为可以肯定地说操作系统的低级部分(例如内核)将继续用 C 编写,因为它的速度.就像其他地方提到的那样,您需要了解内核某些部分的汇编程序(需要将内核加载到内存中).但是您可以在很少或根本没有汇编知识的情况下使用内核.一个很好的例子是如果你正在实现一个文件系
..
我正在为自己编写一个引导程序和内核,引导程序和内核都将刻录在 CD-R 上,并将用作 CD-live.它不是 linux CD-Live 或其他东西,完全是我自己的引导程序和内核.我不想使用其他 booloader(即 GRUB),所以请不要建议我使用它们. 这是我的问题:在我的引导加载程序 ASM 代码中,我想将我的内核和内核条目加载到 RAM 从 CD-ROM(不是从硬盘或软盘),并假设
..
我最近开始深入研究低级操作系统编程.我(非常缓慢)目前正在阅读两本较旧的书籍,XINU 和 Build Your Own 32 Bit OS,以及一些优秀的 SO 人在我之前的问题中建议的一些资源,如何开始操作系统开发. 可能只是我还没有在这些资源中遇到过它,但这可能是因为这些资源中的大多数是在无处不在的多核系统之前编写的,但我想知道的是中断在多核中是如何工作的/多处理器系统. 例如,
..
自从我开始使用 8086 汇编语言编程以来,我一直在思考这些段和段寄存器.我面临的问题是我无法直观地了解脑海中的片段,因此我不清楚这些概念. 谁能帮我理解将其与现实世界场景联系起来的概念?我还有以下问题: 问题 1: 据我了解,在启用 20 条地址线的 16 位实模式下,我们可以将物理内存分成 16 段,每段 64KiB.第一段从 0x00000 开始.下一段的起始地址是什么.会
..
内核和用户线程之间有关系吗? 一些操作系统教科书说“映射一个(多)用户线程到一个(多)内核线程".地图在这里是什么意思? 解决方案 当他们说map时,他们的意思是每个内核线程被分配给一定数量的用户态线程. 内核线程用于为应用程序提供特权服务(例如系统调用).内核还使用它们来跟踪系统上正在运行的所有内容、分配给哪个进程的资源以及调度它们. 如果您的应用程序大量使用系统调用,
..
我一直想做的一件事是开发自己的操作系统(不一定像 Linux 或 Windows 那样花哨,但比我已经做过的简单引导加载程序更好). 我很难找到资源/指南来帮助您完成编写简单的“Hello World".操作系统. 我知道很多人可能会推荐我看看 Linux 或 BSD;但是像这样的系统的代码库(大概)太大了,我不知道从哪里开始. 有什么建议吗? 更新:为了让那些通过 Goo
..
我遇到了以下问题.更新 Anaconda 后,因为将 skimage.io 导入 Jupyter Notebook 中的项目时出错,出现了更大的错误 - 死内核.现在我无法启动一个项目,因为 Jupyter 给出了以下错误: 第一次连接时复制/粘贴此 URL 到浏览器中,使用令牌登录:http://localhost:8888/?令牌=aaf85a5e18489792c87cce65d7a53a
..