UEFI开发探索100 – 《UEFI编程实践》发布啦
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)
《UEFI编程实践》发布
- 1 内容简介
- 第一部分 UEFI环境搭建及UEFI应用构建:sparkles:
- 第1章 UEFI的世界
- 第2章 UEFI开发和调试环境搭建
- 第3章 构建UEFI应用
- 第二部分 图形图像、汉字显示和GUI构建:sparkles:
- 第4章 图形与汉字显示
- 第5章 图像显示及特效
- 第6章 GUI开发与移植
- 第三部分 UEFI下访问各类总线设备:sparkles:
- 第7章 UEFI环境下访问外设
- 第8章 UEFI驱动与Option ROM
- 第9章 UEFI与USB
- 第10章 UEFI与网络
- 第四部分 国产计算机与UEFI:sparkles:
- 第11章 龙芯平台上开发UEFI程序
- 第12章 飞腾平台上开发UEFI程序
- 2 代码库
- 3 实验用开发板
- 4 其他
经过四百多天的奋斗,新书终于上市了(京东官方书店 https://item.jd.com/13406126.html):
每天晚上9点,在安排好孩子睡觉后,就坐在书桌前敲打键盘;每个周末,都逼迫自己进入代码和Spec的海洋,一句句调试,一点点查询。
看到书稿成型的那一刻,感觉一切的付出都值得了!
封面以红色色调为主,占据视觉中心的芯片,周边的器件和数字0、1,表明这是本计算机底层实践的书。在各种器件间专心走着的漫画小人,让我想起每个专心调试的日日夜夜。我很喜欢这个封面的感觉,工程师的文化感扑面而来。
书中提供了33个UEFI应用和驱动示例,以及多个用来配合实验的Windows程序、Linux程序和嵌入式程序。涵盖了构建程序架构、调试方法、构建GUI、各种总线外设的访问、网络应用开发、UEFI驱动和Option ROM开发等内容,特别介绍了国产计算机下的UEFI开发,是偏实战操作的技术性书籍。
1 内容简介
《UEFI编程实践》总共12章,可分为四个部分,其内容编排如下。
第一部分 UEFI环境搭建及UEFI应用构建✨
第一部分介绍UEFI的基本知识,包括UEFI的发展、开发和调试环境的搭建,以及UEFI程序的构建。特别是调试部分,是后续开发中经常需要使用的。这部分包括第1章、第2章和第3章。
第1章 UEFI的世界
概览了Legacy BIOS和UEFI BIOS的组成部分,并分析比较了UEFI BIOS和Legacy BIOS的优缺点。介绍了UEFI BIOS的组成部分和启动过程,以及它在国产计算机发展中所起的作用;
第2章 UEFI开发和调试环境搭建
介绍了如何在Windows和Linux主机上,搭建UEFI的开发环境和调试环境。为方便测试和调试UEFI程序,本章还介绍了如何制作Legacy BIOS和UEFI BIOS下的UEFI启动盘。
第3章 构建UEFI应用
介绍了UEFI各种工程文件的规范,包括DSC文件、INF文件和DEC文件等。详细描述了构建UEFI应用和UEFI Package的方法,以及如何使用C++语言编写UEFI程序。
第二部分 图形图像、汉字显示和GUI构建✨
第二部分开始,进入实际的项目试验。此部分包括第4章、第5章和第6章。介绍了UEFI图形编程、汉字显示、图像显示,并在这些知识的基础上构建了UEFI的GUI(图形用户接口)。
第4章 图形与汉字显示
介绍UEFI图形显示的原理,实现了各种基本图形的显示。并基于这些函数,使用点阵显示的方式,在UEFI环境下显示汉字。另外还介绍了UEFI提供的HII(人机接口基础架构),以及使用HII实现汉字和字符串的显示。
第5章 图像显示及特效
介绍如何在UEFI环境下,显示BMP格式、PCX格式和JPEG格式的图像。以及如何使用HII方式,进行图像的显示。介绍并实现了各类图像特效,可直接应用于各类项目中。
第6章 GUI开发与移植
介绍了UEFI下GUI的基本组成和实现,构建了初级的UEFI GUI框架。并将开源GUI框架GuiLite,移植到了UEFI环境下。
第三部分 UEFI下访问各类总线设备✨
实际项目中,需要通过各种总线将软硬件有机地结合起来。第三部分介绍了如何在UEFI下通过各种总线访问硬件设备,以及使用相关的协议,包括PCI/PCIE、SMBus、串口、USB和网络,并介绍了UEFI驱动以及Option ROM的编写方法。本部分包括第7章、第8章、第9章和第10章共四章。
第7章 UEFI环境下访问外设
介绍如何使用UEFI提供的API访问各类外设,包括PCI/PCIE设备、SMBus设备和串口设备。
第8章 UEFI驱动与Option ROM
详细介绍了UEFI驱动,包括服务型驱动和UEFI驱动模型。以笔者自制的开发板YIE001为例,介绍了如何编写一种特殊的UEFI驱动-Option ROM,它在显卡、网卡等板卡设备上有比较广泛的作用。
第9章 UEFI与USB
介绍了USB规范,以及UEFI下对USB访问的支持。使用开发板YIE002,实现了自制的USB HID设备,并使用它演示如何在UEFI下访问USB HID设备。
第10章 UEFI与网络
介绍了如何在实际UEFI环境下,以及各种虚拟机中,搭建UEFI的网络测试环境。本章还介绍了UEFI对网络的支持,以及如何编写UEFI下的TCP4和TCP6的网络程序。
第四部分 国产计算机与UEFI✨
本部分介绍了国产计算机龙芯和飞腾的现状,以及如何使用X86的Windows/Linux主机,搭建跨平台的UEFI开发和编译环境。第11章和第12章属于第四部分。
第11章 龙芯平台上开发UEFI程序
介绍了龙芯的发展历史,以及其目前的产品线。以龙芯主打的桌面级产品3A4000为例,介绍了龙芯CPU架构和指令集,以及如何使用Linux Lab学习龙芯的指令集和汇编语言。另外还介绍了如何使用厂商提供的代码和工具,配合开源的EDK2代码,搭建龙芯平台的UEFI开发环境。
第12章 飞腾平台上开发UEFI程序
介绍了飞腾平台的系列产品,以桌面级产品FT2000/4为例,对飞腾CPU架构和指令集进行了概括性描述。并使用ARM提供的开源工具,配合EDK2代码,搭建了支持包括飞腾在内的ARM64的UEFI开发环境。为方便没有实际飞腾硬件平台的开发人员,还介绍了如何使用Qemu搭建飞腾平台的UEFI测试环境。
2 代码库
为方便读者阅读,我在Gitee和Github上建好了本书的代码仓库,地址如下:
⚡️ Github代码仓库 https://github.com/luobing/uefi-practical-programming
⚡️ Gitee代码仓库 https://gitee.com/luobing4365/uefi-practical-programming
代码库中的文件可以分为几类:
- 示例工程。为阐述某个议题而编写的代码,包括UEFI应用和UEFI驱动,主要包含在RobinPkg
文件夹下; - 框架工程。包括开发用的几种UEFI应用框架,调试时用的框架工程,分散在每章的文件夹中;
- 辅助工具。每章的实验中,需要用到的测试代码和工具。比如第4章的汉字提取工具、第9章的USB HID设备代码等。
书中的UEFI代码,基本上是在Win10下,使用UDK2018+Visual Studio 2015进行编译开发的。辅助工具中的代码,则包含了嵌入式工程、Windows的MFC工程和Linux下的工程。主要使用了以下几种开发工具:
- 嵌入式工程:MDK-ARM 5.14.0.0
- Windows MFC工程: Visual Studio 2015
- Windows Application工程:Visual Studio 2015
- Linux工程(主要是网络程序):GCC 7.5.0
更多的信息,请参考Gitee代码库或Github代码库中的说明,以及书中的介绍。
3 实验用开发板
《UEFI编程实践》的实验,基本都可以使用EDK2模拟器,或者在实际硬件环境的UEFI Shell中进行。有些实验,可以使用虚拟机来进行。不过,有两个实验,是必须要实际的硬件设备支持的。
第8章介绍的UEFI驱动和PCI Option ROM开发,以及第9章介绍的UEFI下的USB开发,必须用到PCIE板卡和支持USB开发的嵌入式开发板。
为此,我特别做了两个开发板,也即博客中介绍过的YIE001和YIE002。如下图所示:
YIE001开发板是为开发UEFI Option ROM而制作的,其目的为了演示Option ROM代码如何调用Protocol、如何控制硬件。它是一块PCIe的板卡,提供了拨动开关控制、LED灯的控制以及I2C的接口。
YIE002开发板则是一块U盘大小的开发板,主要目的是为了进行USB HID设备的开发。实际上在此开发板上,提供了LED等、按键、TTL串口、RS232串口和RS485串口的功能,是一个便于携带的小型开发板。
书中使用它们,是为了便于讲解。笔者目前没有计划去打样生产,想到硬件生产那一堆的工作,头有点大。
读者完全可以使用自己手中的开发板,去进行第8章和第9章的实验。YIE001作为PCIE开发板,可能不容易找到,开发板卡(比如网卡、显卡)的读者应该会有这方面的资源,书中的代码稍作修改就可运行。
YIE002作为实现USB HID设备的开发板,有很多可以替代的。比如正点原子的F1战舰和F4探索者开发板,都可以使用。笔者手上有款F4探索者,最早的USB HID嵌入式工程,就是在它上面实现的。代码库的chap09文件夹下,把这个项目工程STM32F4_UEFI放进去了,供读者参考。
针对YIE001开发板和YIE002开发板,笔者做了十几个有趣的实验,有兴趣的读者也可以看看。
-
UEFI开发探索100 – 《UEFI编程实践》发布啦相关推荐
- UEFI开发探索99 – UEFI Shell下截屏工具
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI Shell下截屏工具 1 PrintScreenLogger的代码结构 1)Print ...
- UEFI开发探索95 – 弹跳小游戏
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的弹跳小游戏 1 Bounce游戏 1.1 游戏架构 1.2 移植和编写代码 1)编写 ...
- UEFI开发探索85- YIE002USB开发板(08 制作HID设备)
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) YIE002USB开发板之制作HID设备-编程 1 YIE002-STM32的USB编程 2 调 ...
- UEFI开发探索97 – EDK2模拟器搭建网络环境
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) EDK2模拟器搭建网络环境 1 搭建EDK2开发环境 1)工具安装 2)下载代码库 3)更新子模 ...
- UEFI开发探索QA – 问题辑录(持续更新)
最近正在尝试在Unbutu16上搭建开发和调试环境,其中过程一言难尽,到现在也没完成到符合我要求的程度. 正是因为遇到障碍,我今天早上回到Win10+UDK2018的环境下,想重新编译下AppPkg, ...
- 树莓派Pico迷你开发板MicroPython多线程编程实践
内容目录: 一.多线程基本知识 二.MicroPython/Python低层多线程API介绍 三.树莓派Pico 开发板MicroPython多线程编程实践举例 3.1 Pico RP2040 MCU ...
- UEFI开发探索74- YIE002USB开发板(03 Windows编程)
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) YIE002USB开发板之Windows编程 1 添加库文件 2 枚举HID设备 2.1 Set ...
- UEFI开发探索81- YIE002USB开发板(04 制作HID设备)
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) YIE002USB开发板之制作HID设备-USB系统概述 1 USB规范简介 2 软件工程师眼中 ...
- UEFI开发探索94 – 迷宫小游戏
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的迷宫小游戏 1 Maze程序结构分析 1)定义全局变量 2)设置迷宫 3) 游戏控制 ...
最新文章
- Find Large Files in Linux
- 更新!带你认识推荐系统全貌的论文清单
- 使用MySQL自带工具mysqlhotcopy快速备份mysql数据库
- Netiler annotation 用法
- Hadoop的NameNode与SecondaryNameNode,DataNode
- WebBrowser(IE) 与 JS 相互调用
- Flutter 踩坑 在bottomNavigationBar下显示bottomSheet
- freecplus框架-tcp网络通信
- 深入浅出MySQL出版了
- 使用struts2未登录,不能操作
- 2 创建型模式之 - 工厂模式
- Java ConcurrentHashMap
- 希望相对路径关于background-image:url()在样式表里设置后有不管用的办法
- 9.3(使用Date类) 编写程序创建一个Date对象,设置它的流逝时间
- CSDN新版个人空间介绍之二——个人主页
- centos8 修改root密码
- EasyRecovery最新MacBook版本安装包下载地址
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之【05EC20模组TCP/IP模块AT指令说明】
- Unity3D——添加剑痕效果(PocketRPG Trail插件)
- html5 meter,html5 meter标签是什么意思?html5 meter标签的用法及属性介绍
热门文章
- UEFI开发探索99 – UEFI Shell下截屏工具