我的OS | 不要欺负BIOS,好吗

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

我们在第二篇文章中讲了如何制作一个启动层,但是,人家BIOS只读取一个扇区,我们也不能只做一个扇区啊?上次我们生成的文件是一个.img格式的文件,这是一个磁盘映像文件,磁盘映像文件是一个模拟的磁盘,它只有一个扇区(我们在boot.asm中设置了填充512个字节,就是一个扇区),BIOS也只会读取一个扇区,就这样,我们骗过了BIOS。今天,我们要做一个不欺负BIOS的操作系统。

一个普通的磁盘映像文件是1440KB(1.44MB的软盘),我们也要使用这么大的。笔者已经将虚拟机软件从QEMU换到了VMWare又换到了Bochs,就是因为Bochs可以调试。而且Bochs自带了一个叫做bximage的工具,可以生成一个软盘映像文件。这个文件的大小就是1440KB,里面最开始全都是0。我们只要将我们的引导层写入到里面就好了。

但这是一个二进制文件,并不能使用我们的Ctrl+C、Ctrl+V来复制,需要用到dd.exe,大家可以搜索ddWindows下载来下载(如果你是Linux系统,不需要下载安装,Linux自带dd)。然后,输入

nasm boot.asm -o boot.bin

这段指令会使用NASM将boot.asm编译为boot.bin,然后,输入

dd if=boot.bin of=OS.img bs=512 count=1 conv=notrunc

这段指令会将boot.bin写入到OS.img中,一个块是512个字节(一个扇区),写入到第一个块(count=1),不截断(notrunc)

请注意OS.img一定是那个1440字节的文件,并且生成的文件名也一定要是boot.bin,否则就会报错。

接着,使用OS.img启动虚拟机就可以了。我们不会欺负BIOS了!万岁!

华为2019秋招笔试Java实现(2) 华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下 阅读详情

相关推荐

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 670

BIOS和OS的区别

BIOS是计算机系统中的一种固化软件,其主要功能是在计算机启动时初始化硬件设备,以便操作系统能够正确运行。BIOS位于计算机的ROM中,且为只读,因此不易受到外部干扰。在计算机启动过程中,BIOS首先会执行一系列自检程序,然后加载操作系统。

weixin_55694092的博客 708

解密高并发系统的瓶颈:五大解决方案

在互联网应用中,高并发是指在短时间内同时有大量的用户访问一个网站或服务,造成系统压力过大,导致服务器宕机或服务停止响应的情况。高并发是互联网应用面临的一个重要问题,需要采取一系列措施来解决。负载均衡、缓存、数据库优化、异步处理和分布式架构是解决高并发问题的主要方法。在实际应用中,需要根据具体情况选择不同的方法来解决高并发问题。在高并发情况下,使用负载均衡是解决问题的一种常见方法。负载均衡可以通过将请求分配到多个服务器上,从而减少单个服务器的负载。这可以通过硬件设备或软件实现。

BUG制造者:图图 <p>这是一个P标签</p> 3902

从BIOS到OS

1. 当机器被打开时,等电源稳定之后,电源会发送一个“加电成功信号”给芯片,以启动时钟生成器 (8284); 2. 然后,CPU重新自设定为初试状态,开始准备运行。当CPU最初被启动的时候,系统RAM中是空的,没有任何内容可供执行。当然CPU设计者也知道这一点,所以他们对CPU进行了预先编程,以让CPU在这个阶段总是去查找系统BIOSROM中的一个固定的位置,以启动BIOS ...

weixin_33881041的博客 480

【ATC/DTC方法第四期】GOT09-dT-tao 昼夜温度周期模型方法介绍(含Python代码实现)

GOT09-dT-tao 模型是一种经过简化和参数固定的 昼夜温度周期模型(Diurnal Temperature Cycle, DTC)。它从 GOT09 模型(Göttsche and Olesen, 2009)衍生而来,但更加轻量化,更适合在数据不足或参数估计困难的情境下使用。

WW、forever的博客 145

自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类。

十多年IT经验,专注机器视觉,智能制造半导体行业 5029

操作系统-系统启动

模块是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是其代码可以在运行时链接到系统中作为内核的一部分运行或从内核中取下,从而可以动态扩充内核的功能。由于引入了模块机制,Linux的内核可以达到最小,即内核中实现一些基本功能,如从模块到内核的接口,内核管理所有模块的方式等等,而系统的可扩展性就留给模块来完成。都是平面结构,而柱面是一个立体结构。我们之前使用磁盘,可以说是相当固定化的一种方法,这也造成了运行程序不能太大,不能太灵活的限制,现在我们要的是灵活的软件,所以再一次出现了。

living_frontier的博客 3474

从零构建简历智能匹配系统:AI技术助力高效招聘

本文详细介绍了简历智能匹配系统的开发过程,从数据收集、预处理、特征提取到模型匹配和结果展示,每一步都提供了详细的代码实例。通过使用TF-IDF、Word2Vec和BERT等技术,我们能够有效地将求职者的简历与职位描述进行匹配,从而提高招聘效率。未来,随着自然语言处理技术的进一步发展,简历智能匹配系统将变得更加智能和高效,为企业和求职者提供更好的服务。

理论都是虚的,代码才是王道。 309

计算机原理-OS-系统上电后-BIOS引导过程-计算机的引导启动过程

原创底层软件架构2019-07-15 22:36:19 本文翻译并修改自:http://duartes.org/gustavo/blog/ 微信公众号:技术原理君 之前有一篇文章介绍了《Intel计算机的主板与内存映射》,从而为本文设定了一个系统引导阶段的场景。引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程。下图列出了此过程的概要: 引导过...

Shanks 3198

基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

利用STM32单片机移植NES游戏模拟器,完成NES游戏开发,可以玩标准的NES游戏,已测试超级玛丽、魂斗罗之类的都可以正常运行。

4万+

windows server 2012安装升级MySQL

本篇文章主要介绍的是windows server 2012 R2操作系统安装升级以及过程中遇到的问题和对应的解决方法。(数据库低版本为:mysql-5.7.27-winx64;数据库数据库高版本为:mysql-5.7.44-winx64;提示:以下是本篇文章正文内容,下面案例可供参考。

qq_42776231的博客 780

Linux启动过程前传——前世BIOS与今生OS

概述:我们经常讨论操作系统的启动过程,但是却很少讨论操作系统启动之前的过程。BIOS除了开机自检,还完成了哪些工作?CPU厂家,BIOS厂家,OS厂家是如何协作从而保证计算机的运行的?如何保证硬件能认识操作系统,并且听从操作系统的指挥?所有boot sector的第一句可执行汇编语句往往是 mov ax,cs,此时,cs的值来自于哪里呢?是随机的吗?为何boot sector的汇编指令中第一个伪操

河西无名式 3404

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1399

我的OS | 从启动层加载内核程序

上一篇文章我们制作了一个启动层,它可以在屏幕上输出一条信息。但是,由于一个扇区只有512字节,而一个操作系统少说也有1MB左右,所以,我们需要从磁盘读取内核程序到内存,然后用汇编jmp指...

UTF80的博客 572

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

流氓软件与流氓系统的清理故事

流氓软件与流氓系统的清理故事

Kearney 643

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win 安装虚拟机 再安装macos

3 激活vmware -> 百度搜索 vmware17许可证密钥永久激活 ->搜索工具调 一周内。ps: 关闭VMware 重启电脑, 在VMware根目录包含bin的文件夹下管理员身份运行;1 win10开启虚拟化 ->cpu AMD5800x -->ps: 鼠标右击VMware图标,属性--> 打开文件所在位置。2 下载安装 vmware。VM MODE 调成。5 macos 下载。

tenc1239的博客 1757

BIOS入门基础------OS Loader

       很多大公司,一般都会有自己专门的OS小组,但一般都不会有BIOS小组,因为BIOS这玩意,兼容性太强了,以至于常常被人们所忽略。而很多做服务器的公司,有BIOS小组和OS小组,但怎么说了,划分也太清楚。        在我看来,作为一个合格的BIOS工程师,必须要懂OS;作为一个OS工程师,要了解BIOS(不奢求懂太多,至少要了解)。在BDS阶段,BIOS会选择可启动项,按照设置的顺...

wmx1992的博客 5125

BIOS入门基础------OS相关

       作为一个BIOS开发工程师,很多时候,会接触到OS相关的问题,特别是系统下的压力测试。有的时候,系统莫名其妙就挂掉了,为了定位问题,一定的OS定位技巧是必须的,现在主要以Linux系统为例进行说明。       定位问题,可能需要内核源码,查看内核bug,具体的OS源码,甚至编译Linux内核。1.首先推荐一个内核源码的网址:https://www.kernel.org/;这个网站上...

wmx1992的博客 5671

BIOS和CMOS的区别

很多新手分不清BIOS和CMOS的区别,其实可以这么理解:BIOS是软件,CMOS是硬件,BIOS运行在CMOS上。当然,这么说是不严格的,但是足以让你理解两者的关系。 下面来详细讲解一下。 BIOS是基本输入输出系统,Basic input-output System的缩写,它负责系统从硬件启动到操作系统,当然还负责开机的自检,以及对计算机功能的设置,比如启用、禁用USB,更改硬盘接口模式等

CN小黑 953

计算机启动从bios到操作系统整过程详解

BIOS控制着什么 熟悉计算机的朋友都知道BIOS这个概念,我们也会经常听到老鸟在解决系统故障时候重复的 那些话语:“先清除一下CMOS”或者“进入BIOS默认设置”等等。在普通人眼里,BIOS似乎 就是主机板上那块四四方方的小芯片和开机时候显示的蓝色菜单。它究竟对使用者有什么特 别的意义呢?它究竟是不是高手或维修工程师的专利呢?一台电脑是通过怎么样的方式开始 工作的呢?希望通过阅读本文,你可以得

q15189805906的博客 8170

BIOS入门基础------与BMC通信(IPMI)

在x86服务器,BIOS需要与各种硬件和芯片打交道,当然也包括BMC(Baseboard Management Controller)。BIOS与BMC之间的通信,主要使用的是IPMI。有2个阶段,PEI和DXE(包括DXE后面的),用的是不同的IPMI函数(这点需要注意)。虽然使用的是IPMI,但是会有两个通道,分别是KCS、BT。一般使用KCS通道。请记住,BMC是不能主动与BIOS通信的;B...

wmx1992的博客 4万+

我的OS | 确认操作系统的执行状态

为了方便管理,“我的OS”源代码已经上传到GitHub。网址:https://github.com/pengruiyang-cpu/My-OS/昨天,我们成功制作了一个启动层。但是,这玩...

UTF80的博客 1870

32位有符号整形的溢出

最近,笔者当然还是在努力写系统,并且在笔者的“滋润”下,我们的cunix系统已经有一个操作系统的样子了。大家可以看看https://github.com/pengruiyang-cpu/cunix.git,gitee上也有,https://gitee.com/pengruiyang-cpu/cunix.git,有兴趣的当然可以向上面提交代码啦,作为开源与GPL的狂热热爱者,笔者当然欢迎。 今天我们要聊的这个“诡异的数值”,几乎就是一本活生生的教科书,是笔者在编写cunix的文件系统时出现的一个问题。代码笔者

UTF80的博客 1174

我的OS | 为切换到C语言做准备

注意啊,没看下面的文章的要先看看下面的,再看这一篇啊。我们刚才成功从启动层跳转到了内核程序,现在就应该从内核程序执行C语言了。但是,由于现在的CPU处于实模式中,而我们计划使用保护模式,...

UTF80的博客 1167

我的OS | 一个文件系统的设计与实现

今天,笔者要设计一个类似ext2的文件系统CFS (cunix file-system),在https://github.com/pengruiyang-cpu/rlib上的cfs.c和cfs.h。 设计 不管啥样的文件系统,他都是由这几个部分组成的: 启动区 超级块 根目录 数据区 (NTFS, FAT系列文件系统将超级块放到了启动区内) 所以,咱们就一个个的分析,一个个设计吧。 启动区 + 超级块 CFS的启动区就放在超级块的前512个字节里头,里面只放了代码,文件系统的全部信息都存储在超级块409

UTF80的博客 736

我的OS | 了解基础知识

相信很多人都有一个自己制作操作系统的梦想吧。我们在文章如何制作没用的电脑操作系统中介绍了制作一个只能显示字符的“操作系统”,今天往后,我们要学习用汇编 + C语言制作一个简单的操作系统。...

UTF80的博客 735
上一篇: 我的OS | 地图和航灯
下一篇: 几款超好看的英文字体
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值