最近基于UEF在写代码的时候,发现由于粗心总是出现很多问题,而且都是一些小问题。虽然UEFI玩了挺久,但是也没梳理一下思路。借此机会整理一下:

UEFI对复杂的BIOS代码做了很好的封装和模块化。   而且UEFI的标准库函数也十分丰富,多数情况下需要跨模块调用各种丰富的库函数来进行功能开发,这其中重点是了解整个代码的框架。在写代码之前要对当前调用的函数了然于胸,不然就会发生总是因为一些小的问题导致编译错误,BIOS的编译是需要一些时间的,过多的花时间来试错编译的过程,会极大的影响我们的开发效率,大概梳理了下编程的思路:

1. 从框架入手

要对代码的框架有个了解,所调用的库函数以及变量是否属于本模块内,如果不属于,则要在inf文档中添加模块声明。此外gRT的某些服务是在gST中,因此学会相互转换

2. 对形参入手

函数可以识别到以后,则要关注形参的类型以及格式,UEFI对于类型标准的非常严格,因此定义形参变量时,一定要确定类型是否一致。另外的一点就是形参的类型,着重关注是否为指针,是一级指针还是二级指针。不要错用。

3.GUID等全局变量的包含使用

如果有涉及到GUID,则要看下目前的包含结构有没有包括GUID,如果没有则要在inf文件中添加GUID的声明

4.头文件的包含

此外包含某个.h文件时,要关注当前.h文件是否包含了其他模块的.h文件,如果包含了,则要在调用的inf文件中添加Pkg的声明

【UEFI】---基于UEFI编程的基本思路的更多相关文章

  1. 基于UEFI和GPT模式下U盘安装windows8.1和Linux双启动教程

    首先作以下准备: 1.一个8G以上的U盘,用的时候会格式化,建议为空 2.分区助手软件,官网下载链接 3.一个linux系统,这里用同学推荐的Fedora 26,官网下载链接 4.rufus 创建U盘 ...

  2. Eclipse 基于接口编程的时候,快速跳转到实现类的方法(图文)

    Eclipse 基于接口编程的时候,要跳转到实现类很麻烦,其实Eclipse已经实现该功能. 只要按照Ctrl键,把鼠标的光标放在要跳转的方法上面,第一个是跳转到接口里面,第二个方法是跳转到实现类的位 ...

  3. 《Essential C++》读书笔记 之 基于对象编程风格

    <Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...

  4. redux:基于函数式编程的事件处理和状态维护机制

    redux = monand + pipeline + highorder componet + decouple + middleware redex = store based + event h ...

  5. Shell编程——脚本编写思路与过程

    Linux系统Shell编程——脚本编写思路与过程 “ 前段时间有小伙伴问我一些问题,涉及到shell脚本的编写问题,事后,我深入思考了下,实际生产环境的确也会经常用到,因此如何写这个脚本?它的思路在 ...

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

    一.概述: 0.为什么会有这篇文章 说实在的,在2016初的时候,我就萌生了写一个操作系统的念头,但是这对于我一个菜鸟来说,犹如登天. 既然想了就去写,即使最后做不完,也不后悔. 抱着这样的念头,我开 ...

  7. JavaScript基于对象编程

    js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...

  8. 基于网络编程 TCP协议 及 socket 基本语法

    socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...

  9. js面向(基于)对象编程—类(原型对象)与对象

    JS分三个部分: 1. ECMAScript标准--基础语法 2. DOM  Document Object Model 文档对象模型 3. BOM  Browser Object Moldel 浏览 ...

随机推荐

  1. phpStudy中升级MySQL版本到5.7.17的方法步骤

    http://www.jb51.net/article/120263.htm 前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON U ...

  2. linux的iptables和firewall的区别

    firewall是centos7里面的新的防火墙命令,它底层还是使用 iptables 对内核命令动态通信包过滤的,简单理解就是firewall是centos7下管理iptables的新命令 Linu ...

  3. ant 脚本 available 及条件判断功能

    1. 通过<available property="属性名"  file | classname | resource = "被判定是否存在的东西"  v ...

  4. 整理了一下react16.7.0的webpack模板

    基本上react需要方法和依赖的库都引配好了.github地址:https://github.com/qianxiaoning/demo-react16.7.0 欢迎大家star或者fork呀~ te ...

  5. linux kgdb 补丁

    目前为止我们看到的 2 个交互式调试方法( 使用 gdb 于 /proc/kcore 和 kdb) 都缺乏 应用程序开发者已经熟悉的那种环境. 如果有一个真正的内核调试器支持改变变量, 断点 等特色, ...

  6. js操作改变原数组的解决方法

    最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...

  7. POJ 1797 Heavy Transportation(Dijkstra运用)

    Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can no ...

  8. HTML是什么?

    HTML,即超文本标记语言,它不是一种编程语言,而是一种标记语言,是网页制作所必备的.“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素.超文本标记语言的结构包括“头”部分.和“主体 ...

  9. qt添加cef库嵌入web,linux 下Qt WebEngine 程序打包简单记录

    http://www.cnblogs.com/oloroso/p/6051631.html http://www.cnblogs.com/oloroso/p/6149000.html

  10. 拒绝FileNotFoundException!总结了这几个读取jar包外配置文件的知识点

    前言 相信很多人遇到过这个问题:本地运行的好好的程序,怎么部署到线上就报找不到配置呢? 初识getResource 案例一 FieldMapConfig.class.getResource(" ...