本书偏重于实战,面向UEFI的爱好者和使用者。全书共12章,大致可以分为三部分。
1. 第1部分为介绍UEFI的基础框架,搭建开发和调试环境,并熟悉代码框架的搭建和编译方法。让读者能把握整体框架,并能为后续的实践做好准备;
2. 第2部分详细讲解UEFI如何访问外设、构建GUI、编写Option ROM等,并辅以实际的项目实例,加深对UEFI编程的理解。所提供的项目极具实践价值,基本上可以直接用在实际项目中;
3. 第3部分介绍目前国产计算机上UEFI的发展情况,详细讲解如何在国产计算机上进行UEFI项目的开发,包括搭建开发环境、测试方法等。
通过阅读本书,读者可以清晰地了解UEFI的编程方法,学习到如何以UEFI的方式去思考计算机的底层架构。书中提供了大量的实例训练,大部分来自作者曾经实战过的商业项目,极具参考价值,能有效帮助读者快速构建自己的UEFI相关产品。
目录
- 序一
- 序二
- 前言
- 第1章UEFI的世界1
- 1.1Legacy BIOS1
- 1.1.1Legacy BIOS的启动过程2
- 1.1.2Legacy BIOS的不足之处4
- 1.2UEFI BIOS6
- 1.2.1UEFI标准概述6
- 1.2.2UEFI BIOS的优点8
- 1.2.3UEFI BIOS的启动过程9
- 1.2.4国产计算机与UEFI13
- 1.3本章小结15
- 第2章UEFI开发和调试环境搭建16
- 2.1搭建Windows下的UEFI开发环境17
- 2.1.1安装开发工具17
- 2.1.2配置开发环境18
- 2.1.3编译UEFI模拟器和UEFI程序20
- 2.1.4使用模拟器运行UEFI程序22
- 2.2Windows下调试UEFI程序24
- 2.2.1使用Visual Studio调试UEFI程序24
- 2.2.2使用WINDBG调试UEFI程序27
- 2.3搭建Linux下的UEFI开发环境30
- 2.3.1安装开发工具31
- 2.3.2配置开发环境32
- 2.3.3编译UEFI模拟器和UEFI程序32
- 2.3.4使用模拟器运行UEFI程序33
- 2.4Linux下调试UEFI程序34
- 2.4.1使用GDB调试UEFI程序34
- 2.4.2使用Intel UDK Debugger Tool和GDB调试UEFI程序37
- 2.5制作UEFI启动盘40
- 2.6本章小结41
- 第3章构建UEFI应用42
- 3.1模块和包概述42
- 3.2搭建UEFI工程模块44
- 3.2.1DSC文件44
- 3.2.2INF文件50
- 3.2.33种入口函数的UEFI应用55
- 3.2.4库模块的编写61
- 3.2.5其他工程文件63
- 3.3搭建UEFI包72
- 3.3.1包的DSC和DEC文件72
- 3.3.2添加并编译模块73
- 3.4用C++编写UEFI应用74
- 3.4.1支持基础功能75
- 3.4.2支持全局类77
- 3.5使用UEFI Protocol81
- 3.5.1Protocol概述81
- 3.5.2支持使用Protocol的函数 83
- 3.5.3使用Protocol示例91
- 3.6本章小结93
- 第4章图形与汉字显示94
- 4.1UEFI图形显示95
- 4.1.1图形显示的Protocol 95
- 4.1.2图形显示基本函数的实现101
- 4.2UEFI汉字显示—写像素点的方式107
- 4.2.1点阵字的显示与字库提取108
- 4.2.2写像素点的汉字显示110
- 4.3UEFI汉字显示—HII方式115
- 4.3.1HII字体与字库提取116
- 4.3.2HII汉字显示119
- 4.3.3HII字符串127
- 4.4本章小结132
- 第5章图像显示及特效133
- 5.1UEFI图像显示—写屏方式134
- 5.1.1BMP图像显示 134
- 5.1.2PCX图像显示140
- 5.1.3JPEG图像显示145
- 5.2UEFI图像显示—HII方式150
- 5.2.1图像处理Protocol150
- 5.2.2HII图像显示153
- 5.3图像显示的特效 157
- 5.3.1图像块处理基本函数的实现157
- 5.3.2颜色变换特效161
- 5.3.3镜像显示165
- 5.3.4图像块显示与清屏166
- 5.4本章小结170
- 第6章GUI开发与移植172
- 6.1支持GUI的基础服务 172
- 6.1.1UEFI事件处理 173
- 6.1.2UEFI键盘处理179
- 6.1.3UEFI鼠标处理 185
- 6.1.4构建GUI框架186
- 6.2开源GUI框架191
- 6.2.1GuiLite介绍191
- 6.2.2使用GuiLite编程 195
- 6.3GUI框架的移植200
- 6.4本章小结203
- 第7章UEFI环境下访问外设205
- 7.1访问PCI/PCIE设备205
- 7.1.1与PCI/PCIE设备通信的机制206
- 7.1.2支持访问PCI/PCIE设备的Protocol209
- 7.1.3访问PCI/PCIE设备示例213
- 7.2访问SMBus设备216
- 7.2.1SMBus协议简介216
- 7.2.2支持访问SMBus设备的Protocol218
- 7.2.3访问SMBus设备示例220
- 7.3访问串口设备223
- 7.3.1串口协议简介223
- 7.3.2支持访问串口设备的Protocol225
- 7.3.3访问串口设备示例228
- 7.4本章小结230
- 第8章UEFI驱动与Option ROM232
- 8.1服务型驱动233
- 8.1.1安装与卸载Protocol233
- 8.1.2构建服务型驱动236
- 8.1.3访问示例Protocol242
- 8.2UEFI驱动模型243
- 8.2.1EFI Driver Binding Protocol 243
- 8.2.2EFI Component Name Protocol247
- 8.2.3完成驱动框架及其测试248
- 8.2.4构建UEFI驱动及其测试程序251
- 8.2.5测试UEFI驱动256
- 8.3编写Option ROM258
- 8.3.1PCI Option ROM简介258
- 8.3.2编写UEFI Option ROM264
- 8.3.3编译及测试Option ROM268
- 8.4本章小结272
- 第9章UEFI与USB273
- 9.1USB规范简介274
- 9.1.1USB通信原理276
- 9.1.2USB描述符280
- 9.1.3USB标准命令285
- 9.1.4USB HID设备287
- 9.2支持USB访问的Protocol292
- 9.2.1EFI_USB2_HC_PROTOCOL292
- 9.2.2EFI_USB_IO_PROTOCOL294
- 9.2.3列举USB控制器和设备297
- 9.3访问USB HID设备299
- 9.3.1制作USB HID设备299
- 9.3.2在UEFI下访问USB HID设备305
- 9.4本章小结307
- 第10章UEFI与网络309
- 10.1准备UEFI网络测试环境311
- 10.1.1搭建Nt32模拟器的网络环境311
- 10.1.2在真实UEFI环境下使用网络313
- 10.1.3在虚拟机UEFI环境下使用网络:VirtualBox314
- 10.1.4在虚拟机UEFI环境下使用网络:QEMU314
- 10.1.5IPv6网络测试环境搭建316
- 10.2使用UEFI Protocol开发网络程序317
- 10.2.1开发Windows的TCP4服务端程序318
- 10.2.2开发UEFI的TCP4客户端程序323
- 10.3使用StdLib的Socket接口开发网络程序334
- 10.3.1使用Socket编写UEFI TCP4客户端程序334
- 10.3.2开发Windows的TCP6服务端程序337
- 10.3.3使用Socket编写UEFI TCP6客户端程序340
- 10.4本章小结342
- 第11章龙芯平台上开发UEFI程序343
- 11.1龙芯平台概述343
- 11.1.1龙芯产品介绍344
- 11.1.23A4000的CPU架构简介346
- 11.2龙芯汇编语言348
- 11.2.1安装Linux Lab349
- 11.2.2龙芯汇编语言实验351
- 11.3龙芯平台UEFI开发环境354
- 11.3.1搭建龙芯平台UEFI开发环境355
- 11.3.2编译示例工程356
- 11.4本章小结357
- 第12章飞腾平台上开发UEFI程序358
- 12.1飞腾平台概述359
- 12.1.1飞腾产品介绍359
- 12.1.2FT-2000/4的CPU架构简介361
- 12.2搭建飞腾平台UEFI开发环境363
- 12.2.1准备EDK2环境364
- 12.2.2使用Linux系统与gcc-arm365
- 12.2.3使用Linux系统与Linaro UEFI工具367
- 12.3飞腾平台的UEFI程序测试368
- 12.3.1Windows系统下的UEFI测试环境369
- 12.3.2Linux系统下的UEFI测试环境372
- 12.3.3测试示例工程372
- 12.4本章小结374
- 附录UEFI Shell内置命令375