自制操作系统系列(三):加载其他文件执行

[windows-rs]Rust 调用 Windows API 使用windows-rs调用MessageBoxW 阅读详情

代码仓库地址:https://github.com/freedom-xiao007/operating-system

简介

上篇中我们成功将软盘数据读取到内存并显示到屏幕上,接下来我们将加载其他的文件并执行文件代码

新增软件说明

本篇中需要用到相应的软件,Windows相关的下载链接如下:

  • git for windows:在本篇中需要拼接其他文件放到镜像文件后面,本文使用的linux下的dd命令,使用git的bash窗口可以使用dd命令,比较方便

程序整体思路

本次我们将写一个新的nasm文件,其功能是清屏并输出文字:Start Loader

在上篇的程序读入内容后,调用我们新的nasm文件,然后执行对应的代码

经过这些操作后,我们需要运行的命令也相对比较多了,我们将其整合到一个脚本里面,方便一键运行

大致的步骤如下:

    1. 新nasm文件编写
    1. 原启动nasm程序读取软盘数据,执行新的nasm文件代码
    1. 将相关的命令整合成脚本,方便一键运行

1. 新nasm文件编写

想着比较简单,但实际操作还是出现了点问题

首先是ORG的地址问题,原来是跟着《30天写操作系统》书中使用程序加载到内存中的地址,但导致在显示字符串时有问题,经过不断尝试,感觉是地址没有对应上,导致显示了空白字符(知识掌握程度还是不够深,目前还是凭感觉猜测)

后面使用了《一个64位操作系统的设计和实现》书的地址,设置比较大的地址,成功显示了,所以猜测是地址的问题

其他的就是从《汇编语言程序设计》书中抄了一个清屏的代码

loader.asm文件完整代码如下:

;加载到一块无人用的地址
ORG 10000h
JMP print_load_info

print_load_info:
;清屏
MOV AH,6
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,26
MOV DL,79
MOV BH,7
INT 10H

MOV AX,	CS
MOV DS,	AX
MOV ES,	AX
MOV AX,	0x00
MOV SS,	AX
MOV SP,	0x7c00
;=======	display on screen : Start Loader......
MOV AX,	1301h
MOV BX,	000fh
MOV DX,	0200h		;row 2
MOV CX,	12
PUSH AX
MOV AX,	DS
MOV ES,	AX
POP AX
MOV BP,	StartLoaderMessage
INT 10h

JMP	fin
fin:
HLT ;CPU停止,等待指令
JMP fin ;无限循环

;=======	display messages
StartLoaderMessage:	db	"Start Loader"

2. 原启动nasm程序读取软盘数据,执行新的nasm文件代码

需要对我们原来的主文件进行调整

首先是对加载扇区的调整,原来我们是从扇区1开始读取的,现在改为2。因为扇区1是启动引导扇区,存放的就是我们的主文件,但不需要这个,所以我们直接从扇区2开始读取我们的新的文件到内存中

对应的就是把read_file_ready中的CL改为2

read_file_ready: ;读软盘准备
MOV AH, 02 ;指明读扇区功能调用
MOV AL, 1 ;指明要读的扇区数为1
MOV DL, 0x00 ;指明要读的驱动为A
MOV DH, 0 ;指定读取的磁头0
MOV CH, 0 ;柱面0
MOV CL, 2 ;原来我们是从扇区1开始读取的,现在改为2。因为扇区1是启动引导扇区,存放的就是我们的主文件,但不需要这个,所以我们直接从扇区2开始读取我们的新的文件到内存中
;下面三句指定读取到内存地址0x0820处
MOV AX, OffSetOfLoader
MOV ES, AX
MOV BX, 0 ;数据读取后放到的内存地址

最后是读取完成后进行调用,汇编里面好像是直接跳转到相关的内存地址后,指令IP就会自动处理

跳转这里的地址问题是需要注意的,需要给出完成的地址

我们直接修改fin即可:

fin:
;下面三句指定读取到内存地址0x0820处
JMP OffSetOfLoader:0

3. 将相关的命令整合成脚本,方便一键运行

我们新建一个run.sh的脚本,然后将我们需要运行的命令都写到里面去,如下:

# !bash
D:\\software\\NASM\\nasm.exe .\\myOS.asm -o .\\myOS.img
D:\\software\\NASM\\nasm.exe .\\loader.asm -o .\\loader.bin
cp myOS.img os.img
dd if=./loader.bin of=./os.img oflag=append conv=notrunc
D:\\software\\qemu\\qemu-system-x86_64.exe -L . -m 64 -fda .\\os.img

上面的脚本功能是:

    1. 将主文件myOS.asm进行编译
    1. 将文件loader.asm进行编译
    1. 将编译后的myOS.img复制一份
    1. 使用dd命令,将loader.bin文件拼接到os.img文件后面
    1. 最后运行即可

在安装完git后,可以在根目录中代码git bash,然后运行run.sh脚本即可

如下图:运行git bash、运行脚本、成功显示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

终于快要进行到使用C或者其他语句进行操作系统编写的进程了,泪目

写一个引导从这几天看来确实是挺麻烦的,也难怪用rust写操作系统中直接使用grub之类的引导

虽然过程艰辛,但结果是令人振奋的,根据书中的描述内存,后面会相对好点,虽然预感还是艰辛,但加油

本次完整代码

myOs.asm文件

; cherry-os
ORG 0x7c00 ;指定程序装载的位置

;下面用于描述FAT12格式的软盘
JMP entry
DB 0x90
DB "CHRRYIPL" ;启动区的名称可以是任意的字符串,但长度必须是8字节
DW 512; 每一个扇区的大小,必须是512字节
DB 1 ;簇的大小(必须为1个扇区)
DW 1 ;FAT的起始位置(一般从第一个扇区开始)
DB 2 ;FAT的个数 必须是2
DW 224;根目录的大小 一般是224项
DW 2880; 该磁盘的大小 必须是2880扇区
DB 0xf0;磁盘的种类 必须是0xf0
DW 9;FAT的长度 必须是9扇区
DW 18;1个磁道(track) 有几个扇区 必须是18
DW 2; 磁头个数 必须是2
DD 0; 不使用分区,必须是0
DD 2880; 重写一次磁盘大小
DB 0,0,0x29 ;扩展引导标记 固定0x29
DD 0xffffffff ;卷列序号
DB "CHERRY-OS  " ;磁盘的名称(11个字节)
DB "FAT12   " ;磁盘的格式名称(8字节)
TIMES 18 DB 0; 先空出18字节 这里与原文写法不同

OffSetOfLoader	equ	0x0820

;程序核心
entry:
MOV AX,0  ;初始化寄存器
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
read_file_ready: ;读软盘准备
MOV AH, 02 ;指明读扇区功能调用
MOV AL, 1 ;指明要读的扇区数为1
MOV DL, 0x00 ;指明要读的驱动为A
MOV DH, 0 ;指定读取的磁头0
MOV CH, 0 ;柱面0
MOV CL, 2 ;原来我们是从扇区1开始读取的,现在改为2。因为扇区1是启动引导扇区,存放的就是我们的主文件,但不需要这个,所以我们直接从扇区2开始读取我们的新的文件到内存中
;下面三句指定读取到内存地址0x0820处
MOV AX, OffSetOfLoader
MOV ES, AX
MOV BX, 0 ;数据读取后放到的内存地址
read_file:
;调试用,用于查看读取磁盘是否达到了循环次数,call相当于函数调用
MOV SI, read_file_msg
CALL func_show_msg

;前面调用函数时,改变了有关的寄存器,这里重置回来(也可以使用栈,但这个方便点)
MOV AH, 02 ;指明读扇区功能调用
MOV AL, 1 ;指明要读的扇区数为1
MOV BX, 0 ;数据读取后放到的内存地址

INT 13H ;调用BIOS文件读取
JNC read_file_loop
MOV SI, read_file_error_msg
JMP show_msg_info
read_file_loop: ;循环读取内容,循环的顺序是扇区->磁头->柱面,不知道这里面是否有什么说法?可以调换吗?
;把内存地址后移0x200
MOV AX, ES
ADD AX, 0x0020
MOV ES, AX
ADD CL, 1 ;加1,读取下一个扇区
CMP CL, 18 ;如果CL扇区大于软盘总扇区数18,则说明读取完成,不再读取
JBE read_file
; 上面是扇区的循环,完毕后到磁头的循环,重置扇区,增加磁头到反面1
MOV CL, 1
ADD DH, 1
CMP DH, 2
JB read_file
;上面都完成后,到柱面的读取循环,重置扇区(前面已重置)和磁头,增加柱面(不知道为啥书中不是80而是10)
MOV DH, 0
ADD CH, 1
CMP CH, 19
JB read_file
show_mem_file: ;打印显示刚才加载的文件内容
MOV AX, OffSetOfLoader
; MOV AX, 0x0a20
MOV ES, AX
MOV DI, 0
show_mem_byte: ;整个数据也就512,所以循环512次即可
MOV AL, BYTE [ES:DI]
CMP DI, 512
JE loader_end
ADD DI, 1
MOV AH,0x0e ;显示一个文字
MOV BX,15 ;指定字符的颜色
INT 0x10 ;调用显卡BIOS
JMP show_mem_byte
loader_end: ;启动程序加载完成
MOV AL,0x0a
MOV AH,0x0e ;显示一个文字
MOV BX,15 ;指定字符的颜色
INT 0x10 ;调用显卡BIOS
MOV SI,msg
show_msg_info: ;加载完成,成功显示
MOV AL,[SI]
ADD SI,1
CMP AL,0
JE fin
MOV AH,0x0e ;显示一个文字
MOV BX,15 ;指定字符的颜色
INT 0x10 ;调用显卡BIOS
JMP show_msg_info
fin:
; HLT ;CPU停止,等待指令
; JMP fin ;无限循环

MOV SI, jmp_msg
CALL func_show_msg
;下面三句指定读取到内存地址0x0820处
JMP OffSetOfLoader:0
func_show_msg:
MOV AL,[SI]
ADD SI,1
CMP AL,0
JE func_ret
MOV AH,0x0e ;显示一个文字
MOV BX,15 ;指定字符的颜色
INT 0x10 ;调用显卡BIOS
JMP func_show_msg
func_ret:
RET
read_file_msg:
DB "r"
DB 0
read_file_error_msg:
DB 0x0a , 0x0a ;换行两次
DB "read file error!!!"
DB 0x0a
DB 0
show_mem_info_msg:
DB 0x0a , 0x0a ;换行两次
DB "start show mem file!!!"
DB 0x0a
DB 0
msg:
DB 0x0a , 0x0a ;换行两次
DB "hello, my OS, boot loader end"
DB 0x0a
DB 0
jmp_msg:
DB 0x0a ;换行两次
DB "start jmp loader bin"
DB 0
boot_flag: ;启动区标识
TIMES 0x1fe-($-$$) DB 0 ;填写0x00,直到0x001fe
DB 0x55, 0xaa

loader.asm 文件

;加载到一块无人用的地址
ORG 10000h
JMP print_load_info

print_load_info:
;清屏
MOV AH,6
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,26
MOV DL,79
MOV BH,7
INT 10H

MOV AX,	CS
MOV DS,	AX
MOV ES,	AX
MOV AX,	0x00
MOV SS,	AX
MOV SP,	0x7c00
;=======	display on screen : Start Loader......
MOV AX,	1301h
MOV BX,	000fh
MOV DX,	0200h		;row 2
MOV CX,	12
PUSH AX
MOV AX,	DS
MOV ES,	AX
POP AX
MOV BP,	StartLoaderMessage
INT 10h

JMP	fin
fin:
HLT ;CPU停止,等待指令
JMP fin ;无限循环

;=======	display messages
StartLoaderMessage:	db	"Start Loader"
OS系列——操作系统镜像加载BIOS固件工作原理详解 0 前言 装过n多系统,制作过n多个启动优盘,所有教程上都讲重装系统前的第一步就是设置BIOS/UEFI为“U盘启动”,但一直不知道何为BIOS/UEFI。最近在学习南大蒋炎岩老师/教授的《操作系统:设计与实践》,终于弄明白了BIOS/UEFI是啥、BIOS/UEFI的工作原理以及操作系统镜像的加载过程这几问题。特将学习笔记整理如下。 1 Firm固件/BIOS 首先,BIOS和UEFI是两种常用的Firm固件,其中BIOS较为古老,UEFI较为新。 思考一个问题:计算机是如何将操作系统镜像源码加载到硬件中 阅读详情

相关推荐

linux可执行文件的加载过程

有关进程的创建,详细的机制书本上与在线资源中有很多说明,这篇文章有比较详细的介绍,可以先仔细阅读里面的内容。 本篇文章简要介绍linux可执行文件的进程创建与加载的过程。linux在创建进程时,采用写时复制(copy on write)技术,在加载进程时,采用按需加载机制。 写时复制技术 父进程通过fork()系统调用创建子进程,子进程复制父进程的页目录和

Lux_Veritas的专栏 1万+

使用Rust创建库,并在exe中调用

文章目录使用Rust创建库,并在exe中调用创建numrust库在库中创建mod在exe中调用库 使用Rust创建库,并在exe中调用 使用cargo new创建项目时,有项目类型的选项: –bin:编译为可执行文件 –lib:编译为库文件 默认的,是–lib。事实上,Rust能创建的库的种类有下面几种: rlib:Rust库,这是cargo new默认的种类,只能被Rust调用; dylib:Rust规范的动态链接库,windows上编译成.dll,linux上编译成.so,也只能被Rust调用;

鸿鹄之志 5242

rust-subprocess:执行外部流程和管道并与之交互

子过程 subprocess库受Python subprocess模块的启发,提供了用于执行外部流程和管道并与之交互的工具。 subprocess, 。 特征 这个库是关于通过标准输入,输出和错误的可选重定向启动外部进程的。 它涵盖了与标准库模块类似的基础,但具有其他功能: 通信用于将子流程的输出/错误无死锁地捕获到内存,同时将数据馈送到其标准输入。 捕获支持可选的超时和读取大小限制。 将多个命令连接到OS级管道。 灵活的重定向选项,例如将标准流连接到任意文件,或合并输出流(例如Shell的2>&1和1>&2运算符)。 等待进程的非阻塞和超时方法: poll , wait和wait_timeout 。 装箱对第三方装箱的依赖性最小,在Unix上只需要libc ,在Windows上只需要winapi 。 它旨在在类似Unix的平台以及相当新的Windows上运行。 它定期在Lin

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令,就需要知道对应的平台是windows还是linux,如果是windows就需要调用cmd命令,如果是linux平台,就需要调用sh命令,所以可以通过cfg!实现不同平台的判断,然后调用不同的脚本。来启动 Windows 的命令行解释器,并通过参数。方法获取命令的输出,并将其打印出来。在这个示例中,我们首先指定了要运行命令的目录。替换为实际的 Flutter 项目目录路径。来告诉它执行完后退出。命令切换到指定目录,然后执行。

3149

SCI论文Discussion写作:如何用AI工具三步打造审稿人认可的深度逻辑框架

本文针对SCI论文Discussion写作的痛点,提出利用AI工具三步构建深度逻辑框架的方法。首先,使用Claude等工具搭建个性化提纲,解决“浅显病”与“混乱症”;其次,高效整合文献与结果,填充证据;最后,优化逻辑衔接与学术语言,打造审稿人认可的流畅论证。该方法强调研究者主导,AI辅助,显著提升写作效率与深度。

weixin_28235513的博客 233

gps matlab 书,《GPS基本原理及其Matlab仿真》杨俊.pdf

本书讲述了全球定位系统(GPS)的基本原理和概念,具体包括:GPS测量原理、GPS的结构和发展历史;GPS伪距定位和载波相位定位的原理;GPS中使用的坐标系和时间系统;C/A码的实现原理及载波调制过程;GPS信号捕获和跟踪原理及实现;便携式GPS系统的设计与实现及常用芯片资料等。此外,本书还讲了利用Matlab仿真GPS中涉及到的各种算法和原理,并且给出了所有仿真源程序和仿真框图。利用Matlab...

weixin_33603105的博客 1172

Rust入门:C++和Rust动态库(dll)的相互调用

无论是C++调用Rust动态库还是Rust调用C++动态库,其操作基本都是一样地简单,基本和C++调用C++的动态库没什么区别,只需要列出所需要导入的函数,并链接到相应的lib文件即可。这里,在windows中,我们以dll动态库为例说明。

tanmx219的博客 7300

Vensim系统动力学建模实战:从理论到仿真优化【案例详解】

本文详细介绍了Vensim在系统动力学建模中的实战应用,从基础理论到仿真优化全面解析。通过人口增长、供应链库存优化等典型案例,展示如何利用Vensim构建动态模型并进行参数优化,帮助读者掌握系统动力学建模的核心技术与实践技巧。

weixin_29231725的博客 475

Rust从入门到实战系列六:编写并运行 Rust 程序

如果你希望在 Rust 项目中保持一种标准风格,可以使用名为 rustfmt 的自动格式化工具将代码格式化为特定的风格。Rust 团队已经在标准的 Rust 发行版中包含了这个工具,就像 rustc。的时候,就意味着调用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。main 函数是一个特殊的函数:在可执行的 Rust 程序中,它总是最先运行的代码。如果有参数的话,它们的名称应该出现在小括号中,()。,字符串将被打印到屏幕上。现在打开刚创建的 main.rs 文件,输入示例 1-1 中的代码。

wanmeijuhao的博客 721

Unity卡牌游戏UI框架:数据驱动与模块化设计实践

在Unity游戏开发中,UI系统是连接玩家与游戏逻辑的关键桥梁,其核心在于实现数据与表现的高效同步。数据驱动设计通过分离数据模型、逻辑状态与视图表现,利用观察者模式自动响应状态变化,确保了代码的清晰与可维护性。这种架构显著提升了开发效率,尤其在需要复杂状态管理和实时反馈的交互场景中,如卡牌游戏的拖拽、布局与动画系统。基于模块化思想,开发者可以将卡牌视图、布局管理、区域控制等组件像积木一样组合,快速构建出动态的手牌弧形布局、战场区域管理等特色功能。通过集成对象池、图集优化等性能方案,还能有效管理绘制调用与网格

weixin_34262482的博客 451

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 249

【操作系统】30天自制操作系统--(1)虚拟机加载最小操作系统

最近学习了川合秀石的《30天自制操作系统》,准备跟着书里面的介绍自己做一做,这边开个新帖用作记录。 自制操作系统首先要搭建环境,书中是用软盘作为系统的启动盘,现在哪里找软盘去,只能先用VMware虚拟机,虚出一个带软盘处理的环境进行测试。 一 准备工作 【1】《30天自制操作系统》的光盘资料:30天自制操作系统的光盘资源-其它文档类资源-优快云下载 【2】VMware(版本不限,我这边用的是15的版本) 二 用VMware虚拟机搭建环境 【1】下载安装VMw...

sinat_33408502的博客 3477

Multisim 14.0实战:从零搭建可调幅多波形信号发生器(附仿真文件)

本文详细介绍了如何在Multisim 14.0中从零搭建一个可调幅多波形信号发生器,涵盖方波、三角波和正弦波的生成原理与实现步骤。通过核心电路架构解析、关键参数设计及Multisim实战操作,帮助电子工程学习者和硬件工程师掌握信号发生器的设计与调试技巧,并提供仿真文件供实践验证。

nokia的博客 1073

30天自制操作系统——第三天

以上就是第三天的内容,今天还是做了很多事情,而且调试+理解(建议还是读一下源代码,并且自己敲一下),感觉就算跟着别人学开发操作系统也是真的任务艰巨,在此对各位祖师爷respect!!!

qq_43696276的博客 2040

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1407

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Linux自制操作系统系列】(三)正式开启编写操作系统之旅

【Linux自制操作系统系列】(三)正式开启编写操作系统之旅

m0_49236123的博客 1048

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

自制操作系统系列(四):进入64位模式

在上篇中从初始启动文件中加载了loader文件进行执行,本篇将在loader进行CPU模式切换,进入64位模式

github_35735591的博客 1147

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

自制操作系统(一)

从今天开始制作一个操作系统,今天完成最基本的功能---输出hello world。 计算机在读取磁盘的时候,首先从最初的一个扇区开始读盘,然后如果这最后2个字节不是55AA,计算机会认为这张盘上没有所需启动程序,就会报一个不能启动的错误,如果计算机确认了第一个扇区的最后两个字节正好是55AA,那么它认为这个扇区的开头是启动程序,并开始执行这个程序。 IPL,initial ...

qq_40058642的博客 4005

自制操作系统-kernel加载

kernel加载 1. 为什么需要ELF文件格式 在操作系统的层面,任何一个程序在运行时就类似于将cs和ip指向了当前程序的入口地址, 但是此入口地址不一定在程序的起始处,因为起始处可能存在函数及其他变量声明; 那么现在的问题就是操作系统怎么去确定程序的起始地址在哪里。 固定在程序开始部分设置元数据信息指定程序起始地址 总结:ELF定义了程序元信息的格式 程序中重要组成部分 程序段、程序节、程序头表(program header table)、程序节头表(section header tabl

sui_feng_piao_guo的博客 638

打卡第三天:在windows系统下搭建自制操作系统的环境

(2021年10月30日打卡第三天) 打卡第三天:在windows系统下搭建自制操作系统的环境1、所需软件软件打包下载链接:2、通过win7或win10自带的diskpart命令制作自己的虚拟磁盘3、编写启动引导代码4、生成二进制文件5、把生成二进制文件写进虚拟磁盘6、启动我们自制的os 1、所需软件 虚拟机:VirtualBox https://www.virtualbox.org/wiki/Downloads 汇编编译器:nasm Bochs和磁盘写入程序dd。 软件打包下载链接: 百度网盘:link

zhaopeng01zp的博客 2152

30天自制操作系统 pdf_30天自制操作系统:第二天

30天自制操作系统:第二天慢慢更新不着急哦,会越来越难,更新也会越来越慢滴。1.将扇区加载到指定内存中。在第一天的基础上进行代码的加工,第二天给程序中加入将引导扇区读入指定内存地址:0x7c00处,并使用软中断显示字符。出现了一个问题,发现0扇区内出现莫名其妙的数据,经过分析,是编译器自己写入的启动数据。优化后的代码为:; hello-os; TAB=4ORG0x7c00; このプログラムがどこに...

weixin_39761696的博客 335

使用rust自制操作系统内核

本操作系统是一个使用rust语言实现,基于32位的x86CPU的分时操作系统。GitHub - CaoGaorong/os-in-rust: 使用rust实现一个操作系统内核如下图是该项目的文件结构:下面我挑几个重点的模块介绍:模块名称模块类型模块介绍buildmakefile生成make之后生成的文件cat用户程序(独立进程)(写入到文件系统,然后shell可以加载成为一个进程运行)自制的cat程序,把文件系统中的文本文件内容输出到控制台echo。

m0_55708805的博客 4342

【gcc编译优化系列】各操作系统平台下的可执行文件格式介绍

目 录 一 重要知识点 二 本文重点内容 三 gcc相关知识补充 四 Windows 系列(Win7、Win8.1、Win10…) 五 Linux 系列(Ubuntu、RedHat、Kali Linux…) 六 Mac 系列(MacOS & iOS) 七 更多分享 一 重要知识点 - 可执行文件指的是可以由操作系统进行加载执行的文件; - 可执行文件的文件格式常见有: exe 和 dll(Windows 系列)、elf(Linux 系列)和 Mach-O(Mac系列);..

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

Day1——自制操作系统

虚拟机加载helloos.img 下载30天自制操作系统光盘 将"OS\projects\01_day\helloos1"文件夹复制到"OS\tolset"文件夹下 进入"OS\tolset\helloos1"文件夹,双击"!cons_nt.bat",输入"asm",回车; 然后输入"run",回车; asm.bat 文件的含义 首先需要完成helloos.nas文件(汇编文件) 点击!cons_nt.bat后输入asm,就会在文件夹中看到helloos.img文件 在helloos.nas文件

AnitaSun的博客 3117

30天自制操作系统第六天

操作系统实验日志6 第6天:分割编译与中断处理 30天自制操作系统第六天操作系统实验日志6一、实验主要内容1、 内容1: 分割源文件2、 内容2:整理Makefile3、 内容3: 整理头文件4、 内容4:void load_gdtr(int limit, int addr)函数详解5、 内容5:初始化PIC6、 中断处理程序的制作二、遇到的问题及解决方法三、程序设计创新点 一、实验主要内容 1、...

xiaoana_139的博客 1104
上一篇: 自制操作系统系列(二):软盘读取
下一篇: 自制操作系统系列(四):进入64位模式
_萧_
博客等级 码龄10年 55粉丝 157原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值