【读书笔记】UEFI原理与编程(1)概述及开发环境的搭建

一、概述:

0.为什么会有这篇文章

  说实在的,在2016初的时候,我就萌生了写一个操作系统的念头,但是这对于我一个菜鸟来说,犹如登天。

  既然想了就去写,即使最后做不完,也不后悔。

  抱着这样的念头,我开始查阅各种写操作系统的书,最后我得出的结论就是,先试着写一个BootLoader,就这样作为BIOS的继任者,UEFI进入了我的研究范围。

  为什么选择UEFI呢,主要有两个方面的考虑:

    一个是UEFI的功能极其强大

    另一个是这是项新技术,掌握了它,或许会为以后的工作等机会提供一定的帮助吧!

1.图书简介:

书的样子如下:

  有兴趣的话你也可以读一下,有钱就买,没钱就图书馆借,再不济就网上搜PDF格式的自行下载。

2.BIOS与UEFI的区别

  当你读到这里的时候我无法得知你是否熟悉对于装系统的一些流程和问题较为了解,但是在这个地方多说一些是很有好处的。

  自windows8以后,你如果使用原版的微软镜像进行装机且你的机子自身支持EFI的话,默认会以UEFI的方式进行装机,这样子很容易出问题,

前提是这样,原来的机子中装有老版的windows系统且主板默认打开了EFI的功能,你调整了开机启动项为安装介质(光盘、优盘之类的),机子开启,这时电脑读取的是介质中的bootmgr.efi,如下图

  你在不知情的情况下,选择继续,安装程序可能会提示你,你想安装的分区不是GPT格式?无法继续...

发生这种情况的主要原因是,原来的电脑使用的是BIOS+MBR的安装方式,而你却使用了UEFI+GPT的安装方式,最简单的方式就是关掉UEFI功能让电脑默认加载bootmgr,而不是bootmgr.efi,关于bios如何设置这种问题,就不在这里赘述了,自行百度脑补之!

从这里我们引申出了两个组合:

BIOS+MBR

UEFI+GPT
对,你可以认为他们是配套存在的,前者传统一些,后者更为先进。

这里的先进自然是有其优点喽,抄书时刻到了O(∩_∩)O哈哈~

1.开发效率高

2.可扩展性高

3.性能更强大

4.安全性更高

5.更适应64位平台

想找更多的优点就可以找书了,或者问度娘,比我说的详细。

附一张书上的图,作为UEFI的启动过程的了解:

  UEFI定义了操作系统和平台固件之间的接口。UEFI接口可分为以下两个部分:

  1)启动服务:主要包括事件服务、内存管理、protocol管理、protocol使用类服务、驱动管理、Image管理以及ExitBootServices服务。

  2)运行时服务:时间服务、读写UEFI系统变量的服务、虚拟内存服务、重启系统的服务。

关于UEFI的概述就说这么多,太多的话不容易记住,也不助于理解。

二、环境的搭建

  我使用的是windows10的企业版和vs2013,除此之外,还需要以下软件SDK、EDK2(UDK2015)、IASL编译器

推荐的步骤如下:

1.下载解压配置EDK2:

下载页面:https://sourceforge.net/projects/edk2/files/UDK2015_Releases/UDK2015/

下载地址:https://sourceforge.net/projects/edk2/files/UDK2015_Releases/UDK2015/UDK2015.Complete.MyWorkSpace.zip/download

下载完成后,内部结构如下:

图中,BaseTools(Windows).zip和UDK2015.MyWorkSpace.zip是我们将会用到的,解压的顺序如下:

在C盘中的根目录下创建文件夹:EDK2

将这两个压缩包中的文件依次解压至EDK2

EDK2目录下的edksetup.bat,此时会在该目录中的Conf中生成配置文件

在target.txt中,修改TOOL_CHAIN_TAG这一行为这样:

TOOL_CHAIN_TAG        = VS2013

然后打开tools_def.txt,找到如下关于SDK的信息:

# Microsoft Visual Studio 2013 Professional Edition
DEFINE WINSDK8_BIN = c:\Program Files\Windows Kits\8.0\bin\x86\
DEFINE WINSDK8x86_BIN = c:\Program Files (x86)\Windows Kits\8.0\bin\x64

从这里可以看到,我们应该下载并安装sdk8.0

但是微软官网给出如下描述:

The Windows Software Development Kit (SDK) contains headers, libraries, and tools you can use when you create apps that run on Windows operating systems. With the Windows SDK, you can begin building Universal Windows apps and desktop apps for Windows 10, Version 1511. This SDK also supports building Windows apps and desktop applications for Windows 8.1, Windows 8, Windows 7, Windows Vista, Windows Server 2012, Windows Server 2008 R2, and Windows Server 2008.

从这里我们知道下载win10的sdk即可。

2.安装windows的SDK

下载地址:https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk

安装完成后,我继续下一步

3.安装iasl编译器:

官网:https://www.acpica.org/downloads

打开右侧某一日期:

拉到页面的最底部,我们可以找到编译器的下载链接

下载地址:https://acpica.org/sites/acpica/files/iasl-win-20160422.zip

之后,将里面的工具解压至C:/ASL(新建一个文件夹)即可。

 

4.继续回到EDK的设置中来:

在Conf文件夹中找到tools_def.txt,然后修改如下项目:

DEFINE VS2013_BIN = D:\soft\Microsoft Visual Studio 12.0\Vc\bin
DEFINE VS2013_DLL = D:\soft\Microsoft Visual Studio 12.0\Common7\IDE;DEF(VS2012_BIN)
DEFINE VS2013_BINX64 = DEF(VS2013_BIN)\x86_amd64

DEFINE VS2013x86_BIN = D:\soft\Microsoft Visual Studio 12.0\Vc\bin
DEFINE VS2013x86_DLL = D:\soft\Microsoft Visual Studio 12.0\Common7\IDE;DEF(VS2013x86_BIN)
DEFINE VS2013x86_BINX64 = DEF(VS2013x86_BIN)\x86_amd64

DEFINE WIN_ASL_BIN_DIR         = C:\ASL

当然我vs2013安装在了D盘,iasl放在了C盘,所以会有上图,改完路径后保存。

5.编译UEFI模拟器和工程

在开始菜单中找到VS2013的文件夹,打开其中的“VS2013开发人员提示”

切换到EDK2目录下:

如果编译NT32pkg则

执行:

edksetup.bat --nt32

build

如果编译nt32pkg工程则

执行

edksetup.bat

build 加上需要的参数

 

至此,环境就配好了!

 

6.运行模拟器:

使用命令build run

来张截图:

转载于:https://www.cnblogs.com/purstar/p/5451463.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着国家十四五新战略规划的推出,众多国内企业都参与到国产芯片替代浪潮中来,可以预测未来越多的国产芯片会被设计、生产和使用在我们日常所使用的电子产品中,国产芯片拥有巨大的市场前景。 目前国产芯片采用的体系架构主要有X86、ARM、MIPS、RISC V、PowerPC、Alpha等。我们知道电子产品正常工作必须要有操作系统和各种应用软件,没有操作系统和应用软件的芯片就是一堆废铁,而大多数人并不知道的是没有系统固件来加载操作系统的电脑亦是一堆废铁, UEFI就是由UEFI行业协会提出和维护一种行业标准的系统固件,它支持目前市面上的大多数芯片体系结构和操作系统,随着标准的不断演进相信越来越多的体系结构的芯片和操作系统会被支持。 笔者从事BIOS开发已有十余年的时间,见证了Legacy BIOS辉煌与隐退,也有幸了参与了新世纪初系统固件从Legacy BIOS往UEFI BIOS的迁移的全过程。科技行业风起云涌新技术新架构日新月异,每每回望不禁感慨我辈可谓是“眼见着他起高楼,眼见着他宴宾客”的那一波BIOS人。曾经系统固件江湖还是Legacy BIOS的天下,BIOS人使用汇编语言编码、通过中断来与操作系统沟通。自UEFI框架被广泛使以来开我们的发环境从纯汇编变成了99%的C语言加1%的汇编语言的模式,开发效率大大的加强了。 虽然UEFI框架大大加快了开发效率,但是由于系统固件开发属于比较偏门和专业的领域,学习和入门门槛比较高,现有的BIOS工程师又分布在大大小小的各个公司内部缺乏有效沟通和交流,同时BIOS源码又属于敏感和机密数据受到各种NDA限制,市面上对UEFI框架介绍的资料少之又少,因此笔者从2000左右开始就陆续以Cstyle_0x007为ID在https://blog.csdn.net/CStyle_0x007发布一系列博文,现已有数十篇原创文章。刚开始的想法是把博文当作工作笔记方便自己随时查阅,后来慢慢发展成了与业内外感兴趣的朋友的沟通交流的平台。 随手写的博文难免有错误与纰漏为了避免误导大众,准备把博文重新整理在纠正谬误同时也会补充一些新的内容,尽量做到所写的每句话都是无误的,也欢迎有兴趣的朋友踊跃提出意见和建议。组建了微信公众号,目的在于方便有兴趣的朋友一起交流,名字初步定为“固件C字营”,其中“固件”泛指一切固化的软件,这里主要指UEFI BIOS系统固件,“C”泛指“China“,我们可以把这里当作大家沟通交流的营地,我们会不定时发布一些行业资讯、工作、学习心得,感兴趣扫描下面二维码就可以加入,也可以发邮件到CstyleFirmWareCamp@outlook.com投稿分享你的想法。 本文取名《UEFI内核的导读》这里的UEFI专指“UEFI BIOS”,全文专注于对UEFI内核的梳理与分享,同时兼顾对X86系统固件生态中常用的工程技术的介绍,主要包含以下内容:UEFI启动流程以及各个阶段主要完成的任务及参考的实现方式导读UEFI及PI规范中的常见Protocol的实现与使用技巧UEFI固件生态中常见外设、总线、行业标准的协议内容及使用方法 雄关漫道真如铁,而今迈步从头越,系统固件雄起之路道阻且长,相信我们的BIOS人一定可以为国产芯片的起飞助力、为系统固件团队的壮大贡献自己的一份微薄之力,为每一个不畏艰难、不惧寂寞坚守在工作岗位的BIOS人加油,好样的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值