深入理解 GNU GRUB - 02 boot.S 2.4 boot.S详细注释

深入理解 GNU GRUB - 02 boot.S 2.1 相关BIOS例程 转载注明出处(cppgp: http://blog.csdn.net/cppgp)。2. boot.S: GRUB引导第一步 boot.S位于目录boot/i386/pc/。这部分指令被加载到0x7C00~0x7DFF。主要工作包括:配置寄存器;设置堆栈;检测引导盘;检测引导盘读取模式;读取另一扇区指令。这个过程用到几个BIOS例程,并且对主引导记录(MBR, Master Boot Record)结构有很大的依赖。因此boot.S我们分作四步进行详细描述: 1)    相关BIOS例程 2)    阅读详情

转载注明出处(cppgp: http://blog.youkuaiyun.com/cppgp )

 

boot.S位于grub-1.98/boot/i386/pc/目录,采用AT&T汇编语法编写。

 

深入理解 GNU GRUB - 02 boot.S 2.5 MBR过程模拟实现 2.5 MBR过程模拟实现 现在,我们对系统引导的第一步已经有了一个详细的认识。为了更深一步的理解MBR和这些BIOS调用,提供一些测试题目:   1)    开机后在屏幕上输出”Hello cppgp”,并在一定时间后重复输出。   2)    开机后紧跟着读取第二个扇区,并且显示整个扇区512字节到屏幕上。 实现上述功能,编译生成512字节的IMG文件,设置虚拟机通过软盘引导,选择使用软盘镜像文件,设置镜像文件为我们编译生成的IMG文件,就可进行测试。 下文首先简单介绍虚拟机配置,然后实现上述 阅读详情

相关推荐

深入理解 GNU GRUB - 03 diskboot.S 3.3 diskboot.S详细注释

转载注明出处(cppgp: http://blog.csdn.net/cppgp )diskboot.S位于grub-1.98/boot/i386/pc/目录,采用AT&T汇编语法编写。详细注释如下:/* * GRUB -- GRand Unified Bootloader * Copyright (C) 1999,2000,2001,2002,2006,2007,2009,2010 Free Software Foundation, Inc. * * GRUB is fre

cppgp的专栏 2609

grub2详解(翻译和整理官方手册)

https://www.cnblogs.com/f-ck-need-u/archive/2017/06/29/7094693.html https://www.gnu.org/software/grub/manual/grub/html_node/index.html#SEC_Contents 翻译了grub2官方手册的绝大部分内容,然后自己整理了一下。因为内容有点杂,所以章节安排上可...

码农崛起 6817

基于Grub 2.00的x86内核引导流程--源代码情景分析(2)

2. 基于Grub2.00的x86内核引导流程 有了磁盘简介的铺垫,现切入主题Grub 2.00内核引导源代码分析。整个分析过程基本都是一个逆向分析的过程,先介绍其用法及相关描述[1],然后分析Makefile以确定生成某个可执行文件的依赖链,从而得出其对应的源文件,最后分析源文件解析其动作。   [1]对描述中涉及到英文的部分,为保留原意不致扭曲而不做翻译。毕竟在GNU Gru

ElvisHuang的博客 2718

grub2分析(转)

想了解操作系统bootloader过程原理的可以看过来,又勾起了一些项目回忆。。。 转: 一. 从开机到OS加载的简要流程:    机器加电,通过bios的0x19功能调用,加载mbr(也就是boot.img)到0x7c00位置,并跳到该地址开始执行boot.img,它会读入diskboot.img到0x8000处(也是512个字节的大小),随后跳到0x8000开始执行dis

TaLk工作室专栏 - Trace the linux kernel 2648

双系统/移动硬盘安装Ubuntu后Grub引导丢失?一个update-grub命令的完整修复流程

本文详细解析了双系统或移动硬盘安装Ubuntu后Grub引导丢失的问题,提供了从应急手动引导到永久修复的完整流程。重点介绍了`update-grub`命令的使用方法,以及针对UEFI/BIOS不同模式的修复策略,帮助用户快速恢复系统启动功能。

weixin_30435261的博客 352

告别Grub救援模式:一份给Linux小白的Grub修复指南(附Boot-Repair用法)

本文详细介绍了如何从Grub救援模式恢复Linux系统的两种方法:手动命令修复和使用Boot-Repair工具的一键恢复。针对常见的Grub启动引导修复问题,提供了从基础命令解析到完整修复步骤的实战指南,帮助Linux新手快速解决系统启动问题。

weixin_27966471的博客 322

Grub源代码分析

GRUB简体中文化版使用方法http://sysoft.zdwx.com/grub/Grub 源代码分析http://www.linuxsir.org/bbs/showthread.php?t=170348

郭月丰的专栏 3401

NXP Layerscape平台UEFI与安全启动实践指南

在嵌入式系统开发中,引导加载程序是系统启动的基石,负责硬件初始化与操作系统加载。其核心原理在于建立从硬件上电到应用运行的完整执行链。随着系统安全需求日益严苛,安全启动技术应运而生,它通过密码学验证构建了一条不可篡改的信任链,确保每一级固件和代码的完整性与真实性,这对于网络通信、工业控制和边缘计算等关键领域具有极高的技术价值。本文聚焦于NXP Layerscape系列高性能处理器平台,深入解析如何将标准化的UEFI固件接口与硬件级安全启动机制深度融合,提供了从开发环境搭建、镜像链构建、Flash烧写到安全策略

chiyingliao3565的博客 398

深入理解 GNU GRUB - 02 boot.S 2.2 MBR结构 2.3 boot.S代码结构

<br />转载注明出处(cppgp: http://blog.csdn.net/cppgp )<br /> <br />2.2 MBR结构<br /> 历史悠久的MBR结构自从IBM兼容PC出现以来一直就没变过(但是为支持2TiB以上硬盘而出现的GUID/EFI结构将更改MBR结构)。MBR结构分为三部分,分别是引导指令、分区表DPT (Disk Partition Table)、幻数Magic (Magic=0x55AA)。其中引导指令占用446字节(0~0x1BD),DPT占用64字节(0x1BE

cppgp的专栏 2163

Ubuntu零基础入门到精通【1.2讲】:Ubuntu 与 Linux 的关系 —— 你用的到底是什么?

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 3105

第03章 引导启动程序(1):bootsect.s 完整解析——512 字节里的“创世魔法”

它没有用到任何高深的算法,完全依靠对底层硬件(BIOS 中断)、内存寻址(实模式段偏移)和磁盘结构(磁道、磁头、扇区)的深刻理解。软盘知识小科普:一张 1.44MB 的软盘,有 80 个磁道(柱面),每个磁道有 2 个磁头(0 和 1),每个磁道每个磁头下有 18 个扇区(每扇区 512 字节)。在一片漆黑的物理世界里,CPU(中央处理器)复位,它的程序计数器被强行设置为 0xFFFF0。运行这个模拟器,你会真切地感受到,一个操作系统不是“凭空被解压”的,而是。这个距离内核的最终目的地足够远,不会被波及。

weixin_42108533的博客 543

boot.S详细注释

深入理解 GNU GRUB - 02 boot.S 2.4 boot.S详细注释 分类: Bootloader2011-04-25 11:08 239人阅读 评论(0) 收藏 举报 转载注明出处(cppgp: http://blog.csdn.net/cppgp )   boot.S位于grub-1.98/boot/i386/pc/目录,采用AT&T汇编语法编写。

zeflove的专栏 4000

微带天线理论学习笔记(1)

微带天线的概念是由Deschamps于1953年提出来的,它是在一块厚度远小于工作波长的介质基片的一面敷以金属辐射片、一面全部敷以金属薄层作接地板而成。辐射片可以根据不同的要求设计成各种形状。微带天线具有质量轻、体积小和易于制造等优点,广泛应用于个人无线通信中。

qq_36521926的博客 6223

深入理解 GNU GRUB - 03 diskboot.S 3.1 diskboot.S执行时的环境 & 3.2 diskboot.S代码结构

转载注明出处(cppgp: http://blog.csdn.net/cppgp )diskboot.S位于目录boot/i386/pc/,最终生成diskboot.img。这部分指令被加载到0x8000~0x81FF。diskboot.img加载GRUB内核到0x8200开始的内存位置,并将系统控制权交给GRUB内核。用到的BIOS例程和boot.S中相同。因此本章只描述如下内容:   1)    diskboot.S执行时的环境   2)    diskboot.S代码结构   3)    di

cppgp的专栏 1894

CAPL编程入门:从零开始掌握汽车通信脚本语言

本文详细介绍了CAPL编程的基础知识,从开发环境搭建到核心语法精要,再到总线通信实战和高级调试技巧。CAPL作为汽车通信脚本语言,专为CAN、LIN等网络协议设计,帮助工程师高效完成车载网络测试。通过实战案例和性能优化建议,读者可以快速掌握CAPL编程技能。

s1t2u3的博客 978

图形学基础|球谐光照(Spherical Harmonics Lighting)

球谐光照(Spherical Harmonics Lighting) 文章目录球谐光照(Spherical Harmonics Lighting)一、前言二、球谐函数2.1 基函数2.2 投影与重建2.3 应用三、漫反射环境光3.1 IrradianceMap3.2 数学推导3.3 实践参考博文 一、前言 在学习图形渲染的过程中,一直對球谐函数(球谐光照)有一点了解,但没有亲手实现过。 关于球谐函数的数学概念是比较复杂的,笔者也实在无法完全理解,这篇文章只能从做东西的角度来说,公式是如何和代码进行对应的。

【黑键】 1万+

boot.S代码结构

深入理解 GNU GRUB - 02 boot.S 2.2 MBR结构 2.3 boot.S代码结构 分类: Bootloader2011-04-25 11:05 252人阅读 评论(0) 收藏 举报 转载注明出处(cppgp: http://blog.csdn.net/cppgp )   2.2 MBR结构  历史悠久的MBR结构自从IBM兼容PC出现以来一直就没变过(

zeflove的专栏 988

SLAM轨迹评估神器evo实战:从GPS到TUM格式的完整转换指南(附Python代码)

本文详细介绍了如何使用evo工具将GPS数据转换为TUM格式,以便进行SLAM轨迹评估。通过Python代码实现GPS到笛卡尔坐标的精确转换,并提供了完整的处理流程和实战案例,帮助开发者轻松完成从原始GPS数据到精确轨迹评估的全过程。特别适用于ORB-SLAM等视觉SLAM算法的性能验证。

weixin_29074295的博客 292

grub 和 中断解析

深入理解 GNU GRUB - 02 boot.S 2.1 相关BIOS例程 分类: Bootloader2011-04-25 10:59 252人阅读 评论(0) 收藏 举报 转载注明出处(cppgp: http://blog.csdn.net/cppgp )   2. boot.S: GRUB引导第一步  boot.S位于目录boot/i386/pc/。这部分指令被加

zeflove的专栏 1005

概率质量函数(PMF)、概率密度函数(PDF)、累积分布函数(CDF)

1.概率分布函数(Probability Distribution Functions) 笔记来源:Probability Distribution Functions (PMF, PDF, CDF) 1.1 离散型:PMF和CDF 1.2 连续型:PDF和CDF 累积分布函数的导数 === 概率密度函数的函数值 dF(x)dx=f(x) \frac{dF(x)}{dx}=f(x) dxdF(x)​=f(x) 概率密度函数与 xxx 轴围成的面积 === 累积分布函数的函数值 ∫−∞xf(x)d

一个搬运知识的笨小孩 3万+

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 762

Ubuntu开机进入GRUB命令行?手把手教你修复系统引导

GRUB(GRand Unified Bootloader)是Linux系统的核心引导加载程序,负责在计算机启动时加载操作系统内核。其工作原理是通过读取配置文件定位内核与初始化内存盘,完成系统启动的交接。当GRUB配置文件丢失、指向错误或关键分区无法访问时,系统将无法正常引导,转而进入基础的GRUB命令行界面,这凸显了引导程序在系统启动链中的关键价值。此类问题常见于系统更新失败、磁盘分区变动、双系统环境冲突或/boot分区空间不足等场景。本文聚焦于Ubuntu系统,针对开机直接进入GRUB命令行这一典型故障

weixin_28702105的博客 320

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

双系统引导翻车自救指南:当Clover、Grub和Windows Boot Manager打架时怎么办?

本文详细解析了双系统引导冲突的解决方案,涵盖Clover、Grub和Windows Boot Manager的故障处理。从引导原理到实战修复,提供Windows和Linux环境下的诊断工具与分步修复指南,帮助用户有效解决多系统引导问题,确保系统稳定运行。

weixin_31310913的博客 333

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3867

efm32 入门.pdf

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

Ventoy:重新定义多系统启动盘的技术架构与实现原理

Ventoy是一款革命性的开源启动盘制作工具,它彻底改变了传统U盘启动盘的工作模式。传统方法中,每个ISO镜像都需要单独写入U盘并格式化,而Ventoy允许用户将多个ISO/WIM/IMG/VHD(x)/EFI文件直接复制到U盘中,通过智能引导技术实现按需启动。该项目支持x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI、ARM64 UEFI和MIPS64EL UEFI等多

gitblog_01120的博客 415

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 深入理解 GNU GRUB - 02 boot.S 2.2 MBR结构 2.3 boot.S代码结构
下一篇: 深入理解 GNU GRUB - 02 boot.S 2.5 MBR过程模拟实现
cppgp
博客等级 码龄20年 47粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值