一个UEFI引导程序的实现
5推荐 收藏
5.0K阅读

一个UEFI引导程序的实现

《一个64位操作系统的设计与实现》续
田宇 (作者)
本书是《一个64位操作系统的设计与实现》的补充内容,开发环境请参照《一个64位操作系统的设计与实现》相关章节:http://www.ituring.com.cn/book/tupubarticle/26323(免费开放)搭建。
本书作为《一个64位操作系统的设计与实现》的补充内容,讲述了一个UEFI引导程序的实现过程。通俗的讲,读者们可以将UEFI理解为一种用于取代BIOS的新型固件程序。与BIOS固件程序相比,UEFI引导程序在性能、可扩展性、安全性和开发效率等诸多方面都得到了提升。

全书首先介绍了BIOS和UEFI两类固件的结构与启动流程;然后从UEFI的优点与BIOS的缺点作为切入,讲述UEFI取代BIOS的原因;最后通过若干个程序实例,逐步对现有系统进行改造,使其支持UEFI引导启动。

收藏本书能做什么?

有情况的时候会收到通知,比如电子书发布等。

电子书
¥20.00
格式
mobi

出版信息

  • 书  名一个UEFI引导程序的实现
  • 执行编辑关于本书的内容有任何问题,请联系 杨帆
  • 出版日期2019-07-22
  • 书  号EA040
  • 印刷方式黑白
  • 开  本16开
  • 出版状态上市销售
  • 原书名一个UEFI引导程序的实现

所属分类

本书特色

自《一个64位操作系统的设计与实现》一书问世以来,我们已经收到广大操作系统爱好者的诸多反馈,有褒奖、有批判也有诚恳的意见。虽然《一个64位操作系统的设计与实现》一书已经向读者们展示了如何搭建一个操作系统的雏形框架,但是对于一个健壮的操作系统而言,他仅仅迈出了第一步。

本书作为《一个64位操作系统的设计与实现》的补充内容之一,将会继续对这个64位操作系统进行升级,并逐步引入更多新鲜功能和高级设备驱动程序。

目录

作者介绍

田宇:Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与过多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。

大家也喜欢

  • 一个64位操作系统的设计与实现

    田宇  

    本书讲述了一个64位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框...

  • 跟阿铭学Linux(第3版)

    李世明  

    本书是一本入门级的Linux学习教材,适合初学者阅读。本教程由浅入深,内容精湛,案例丰富,通俗易懂!书中分两部...

  • macOS软件安全与逆向分析

    丰生强   邢俊杰  

    本书深入介绍了macOS系统的软件安全、逆向分析与加密解密技术,主要包括macOS软件的开发基础、macOS系...

  • Linux命令行与shell脚本编程大全(第3版)

    Richard Blum   Christine Bresnahan   门佳   武海峰   译

    这是一本关于Linux命令行与shell脚本编程的全方位教程,主要包括四大部分:Linux命令行,shell脚...

  • 精通Linux(第2版)

    Brian Ward   姜南   袁志鹏   译

    <内容简介> 本书讲解了Linux操作系统的工作机制以及运行Linux系统所需的常用工具和命令。根据系统启动...

  • 下期预告,一个内核模块化功能的实现
    田宇  发表于 2019-07-22 15:06:24
    推荐
    • 已购买此书,期待下期尽快出!

      VitalyR  发表于 2019-07-29 23:06:18
    • 请尽快实现,我好像看续集

      青藤木子  发表于 2019-09-15 15:02:18
  • 要求提供PDF版本,mobi在电脑上真的不容易阅读(Mac电脑上也没有比较好的mobi阅读器)
    zysyyz  发表于 2019-08-09 01:41:53
    推荐
    • 自己用软件转一下格式呢?

      田宇  发表于 2019-10-24 16:15:15
    • @田宇 自己转的排版会乱

      memcpy  发表于 2019-10-25 14:47:07
  • 第一章提到:“开机后,CPU首先跳转到物理地址0x0FFFF0处执行程序”。

    错!应该是0x0FFFFFFF0处执行程序。详情见Intel system developer manuals第三卷第九章Processor Management and Initialization。摘录如下:

    9.1.4 First Instruction Executed
    The first instruction that is fetched and executed following a hardware reset is located at physical address
    FFFFFFF0H. This address is 16 bytes below the processor’s uppermost physical address. The EPROM containing the
    software-initialization code must be located at this address.
    The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor while in real-address mode. The
    processor is initialized to this starting address as follows. The CS register has two parts: the visible segment
    selector part and the hidden base address part. In real-address mode, the base address is normally formed by
    shifting the 16-bit segment selector value 4 bits to the left to produce a 20-bit base address. However, during a
    hardware reset, the segment selector in the CS register is loaded with F000H and the base address is loaded with
    FFFF0000H. The starting address is thus formed by adding the base address to the value in the EIP register (that
    is, FFFF0000 + FFF0H = FFFFFFF0H).
    The first time the CS register is loaded with a new value after a hardware reset, the processor will follow the normal
    rule for address translation in real-address mode (that is, [CS base address = CS segment selector * 16]). To
    insure that the base address in the CS register remains unchanged until the EPROM based software-initialization
    code is completed, the code must not contain a far jump or far call or allow an interrupt to occur (which would
    cause the CS selector value to be changed).
    hecto2  发表于 2019-07-30 15:43:04
    推荐
    • 是的,根据9.1.4 First Instruction Executed的描述,CPU是从物理地址FFFFFFF0H处开始执行的,但是电脑在启动的时候A20地址线是关闭的,这就导致超过0x0FFFFF物理地址的访问都会回环到0~0x0FFFFF范围内,所以CPU才会从物理地址0x0FFFF0处执行程序。

      田宇  发表于 2019-07-30 21:21:45
    • @田宇 你理解错了,开机时不会回环,A20关闭不影响CPU在FFFFFFF0H处执行。不信你用VMWare调试一下第一条指令,地址就是FFFFFFF0H。固件必须将第一条指令挂载到FFFFFFF0H,不然也得不到执行。CPU reset时,CS和背后的基址是不一致的,基址并非CS左偏移4位,也就是说这时CPU执行地址不用CS << 4 + IP计算,更不用提A20了。当CPU执行到第一条long jmp之后,CS的值得到刷新,背后的基址部分置为CS左偏移4位,这是A20才起作用。

      hecto2  发表于 2019-07-31 11:02:29
    • @hecto2 我又调查了一下,在386以后的CPU是从物理地址FFFFFFF0H处开始执行的,但是芯片组好像会有比较复杂的映射,将物理地址0x0FFFFF处的BIOS跳转程序映射到FFFFFFF0H,这个错误我已经更正了,感觉您的关注。

      田宇  发表于 2019-07-31 22:01:45
    • @田宇 那如果只插入 2g memroy, 怎麼有辦法從 FFFFFFF0 執行?

      descent  发表于 2019-10-24 16:01:01
    • @descent 这个地址是固定的,与内存容量无关。

      田宇  发表于 2019-10-24 16:14:46
    • @田宇 真神奇。

      descent  发表于 2019-10-24 17:41:20
  • 感謝,終於出版了。
    descent  发表于 2019-07-22 16:30:22
    推荐
    • 谢谢关注与支持

      田宇  发表于 2019-07-24 10:12:17
    • @田宇 雖然我已經寫出來 uefi os loader, 但我還是購買本書, 我的作法也和你不同, 不使用 edk2, 類似於 gnu efi 的作法。我實在不喜歡用 edk2 這個大怪物。

      descent  发表于 2019-10-24 15:59:16
    • @descent 学习EDK2可以更好的理解UEFI标准,总之适合自己的方法最好

      田宇  发表于 2019-10-24 16:17:50
  • 不是每周半价么。怎么是15/20?
    Wenyang  发表于 2019-07-24 01:49:46
    推荐
    • 这是本新上市的电子书,15/20是上市的限时优惠活动

      田宇  发表于 2019-07-24 10:11:31
  • 买了,支持大佬!
    EXEC  发表于 2019-10-13 19:29:02
    推荐
    • 感谢您的支持与关注,希望本书能帮助到您。

      田宇  发表于 2019-10-15 15:53:07
  • 希望出个pdf的,电脑很不方便
    小平同学  发表于 2019-11-10 13:18:45
    推荐
  • 希望有pdf
    CharleySlg  发表于 2019-11-11 01:14:12
    推荐