- 博客(19)
- 收藏
- 关注
原创 Linux 下调用UEFI的函数
Linux 下调用UEFI的函数摘要64bits C 语言cdecl三级目录摘要这篇主要介紹64bits linux调用64bits UEFI 函數,目前linux 內核也支持CONFIG_EFI_MIXED 是32bit UEFI 启动64bits linux内核,那里面会多出一个efi_thunk_64.c 负责64bits—>32bits的转换。64bits C 语言cdecl64bits C程序对比32bitC程序在函数调用传参的时候增加了寄存器传参数,但是不同编译器传参还是有些差异
2020-12-09 11:27:57 1908
原创 UEFI Runtime Drivers
UEFI Runtime DriversUEFI runtime driver 是当OS 调用ExitBootServices 之后继续给OS 提供服务的驱动,UEFI Driver Writer Guide 也提到了一个比较好的UEFI runtime driver 是UNDI driver,其实写过网卡驱动的同学知道,在UEFI 环境一下我们只要提供SNP 驱动就可以了(参考VirtNet),提供UNDI 驱动是为了支持有的OS 启动的时候也可以直接调用UNDI 提供的接口去收发网络包。(感兴趣可以参
2020-08-07 10:54:24 1928
原创 UEFI 软中断
UEFI EventEvent 是UEFI 架构对于中断的一种实现方式(软中断)熟悉linux 的朋友会知道linux对于中断实现方法。简单讲linux 把一个外部中断分为两部分顶半部和底半部,这样设计目的是因为中断来了,需要快速响应,会抢占当前的进程,但是中断一般需要和外设打交道,这样会导致他们执行需要执行很长时间,有的还需要睡眠,这样会导致系统的吞吐量下降,所以linux 为了解决这个...
2018-09-01 23:52:33 2367
原创 Memory Management (DXE) 实例分析
这篇通过实例分析AllocatePages() 来对之前的知识点进行巩固加深并且串联起来。 先来看一下UEFI 下AllocatePages的定义typedefEFI_STATUS(EFIAPI *EFI_ALLOCATE_PAGES) (IN EFI_ALLOCATE_TYPE Type,IN EFI_MEMORY_TYPE MemoryType,IN UINTN Pages,IN
2017-01-11 11:28:37 4978 3
原创 Memory Management (DXE) 代码简析
关于代码分析,这次先来CoreInitializeMemoryServces (DxeMain.c) 这个函数是DXE 阶段初始化内存相关的第一个函数,先来理清这个函数,主要做了以下三件事情:1 初始化Pool 内存分配相关的数据结构 2 通过查找Hob ,找到能容纳DxeCore 的内存地址 3 通过CoreAddMemoryDescriptor 函数给接下来内存分配的servic
2017-01-02 14:20:40 2858
原创 Memory Management(5)DXE 内存管理流程
OS 也好或者UEFI Firmware 也好,都有各自的应用领域,为了更好的完成自己的角色,就会用适合自己的策略方法。由于UEFI Firmware 是现代化软件,所以有些思想和目前主流软件思想有类似的地方,所以有人会去对UEFI Firmware 和 OS 做比较。比较是可以的,但是首先得非常准确你比较的内容的应用场景,技术限制,等等。举例Firmware 就是你房子装修前的那种毛坯房,它会把水
2016-12-30 23:10:28 2527
原创 Memory Management (4) DXE GCD 机制
上一篇大概介绍了,关于UEFI 资源管理与汇报的大概流程。这篇就主要介绍一下GCD 机制。关于GCD 的讲解主要spec 有 PI Vol2_DXE_CIS_1_5 7.2 和 Beyond BIOS2nd chapter8 . GCD: GCD (Global Coherency Domain ) 这些function 主要是管理对于处理器可见的 memory 和 IO 的资源。memory
2016-12-28 14:24:40 3808
原创 Memory Management (3) DXE 概括
学习一个知识点,就和去一个陌生的城市很像,你首先要对这个城市有大概的了解,和一些准备工作,包括查询城市地图,人文地理等等。然后在这个城市多住一段时间,慢慢去感受每一条街头巷尾,特色小吃,人文环境。这样你才能对这个城市有比较具体全面的了解。总览 : 首先UEFI Firmware 它要向OS 汇报内存资源(这里的内存不单单指system memory,也包括地址线上映射的其他设备的memory),它
2016-12-28 13:27:47 1428
原创 Memory Management(2) PEI 内存分配
PEI 阶段内存分配的函数有两个:AllocatePage()AllocatePool()具体请参考Vol1_PEI_1_5 4.6 还是看图,有的时候,我看spec,我就喜欢看总纲的图,每次都看,每次看会有不同的理解。 关于这两个函数AllocatePage(),AllocatePool()。如果仅仅通过字面上,一个是分配比较大内存,一个是比较小的内存。但是两个fu
2016-12-27 21:41:39 3623
原创 Memory Management (1)PEI 信息建立
PEI 阶段有它自己的使命,其中非常重要的一个就是初始化内存,建立内存信息,然后传给下一个阶段。为了完成PEI 的这些任务,它也需要有内存管理。1 PEI 阶段和内存相关的,我们又不得不提一个重要的结构HOBHOB (Hand-Off Block) Hob 主要功能就是记录信息并且可以传递出去。(关于HOB 初始化,还有例如PEI 阶段临时内存到恒定内存,堆栈转换等等,会在之后PEI Core 里
2016-12-27 15:40:57 2247 1
原创 Memory Management (0) 前言
对于现代软件,内存管理是很重要的内容,了解一个软件的内存管理对于了解这个软件架构或者编写程序有很大的帮助。所以接下来的系列博客就会介绍UEFI 的内存管理。博客大纲基本是如下:PEI 阶段内存管理DXE 阶段内存管理汇报内存资源给OSOS 如何读取和利用uefi firmware 汇报的内存资源这系列博客也是本人学习的记录,现在分享给想学习UEFI 的同学,大家一起进步。 因为是按照自己
2016-12-27 14:14:31 1351
原创 UEFI 文件类型 .efi (二)
上一篇博客讲了一个例子关于在一个C 程序里如何动态去load 一个可执行文件,并且让这个文件能够跑起来,代码里有几处是hard code 写的,没有去根据读取的可执行文件类型去分析它。上篇也说了,如果那个例子理解透了,那么对于efi 文件加载和执行理解起来就不成问题了。这篇博客介绍一下,efi 文件内容。其实不用去看代码,也不用怎么翻spec, 看看下面的几个图片,应该就会很清晰,efi 文件的重定
2016-12-24 15:24:52 5731 1
原创 UEFI 文件类型.efi
我们首先先看一些UEFI 的框架图: 无论是从功能划分还是各个文件划分,我们都可以看到这种模块话思想。模块话是现在软件的主流,这样能让不同的人独立开发自己的模块,通过统一的接口添加整合到一个firmware file里。我们uefi firmware 模块,是通过几个core 联系到一起的,这几个core 包括(SEC core, PEI core, Dxe core, SMM core)。如
2016-12-24 00:45:18 18761 1
原创 UEFI-Fv
关于UEFI Firmware volume 的相关信息,请参考UEFI PI Specs 里面的内容会在之后的博客里分别具体介绍。
2016-12-23 16:50:55 1955
原创 UEFI - VTF
这篇文章主要介绍UEFI 架构的VTF(Volume Top File), 这个架构讲的是我们bios rom 各个Firmware Volume 组成架构,不是指软件架构 :注 : (CPU X86_64)VTF: A Volume Top FIle(VTF) is a file that must be located such that the last byte of the file i
2016-12-21 11:12:52 3213
原创 UEFI - 启动
每次想写点东西,又不知道写点什么,今天没事,就从头开始写把,写哪算哪吧。因为本人工作都是接触的是intel X86 PC 平台,所以写的东西都是基 于目前市场上比较新的PC 平台。关于目前PC 的启动(G3),从按power button 那一下,到跑UEFI firmware 要等好久好久,因为,在这之间有几个firmware 是要先跑的,其中有一个是最重要的—> CSE, 目前intel 退出
2016-12-03 17:56:17 2107 2
原创 UEFI Console Splitter 2nd
为了巩固对 Console Splitter 这只driver 认知上的巩固,这么篇文章我们会写一个虚拟的简单的输入设备。
2015-11-10 22:55:31 2223
原创 第一篇博客
写第一个博客总是感觉很困难,之前总感觉自己也是刚入行,写的东西也不会很准确,写错了那就更糟糕会被同行笑话的等等。之前也看过一篇博客是鼓励技术人员应该多写博客,无论自己是否是这个行业的权威,也不管是不是有人看。有兴趣的可以看一下这篇博客 为什么有些技术人员不写博客 如何写一篇好的技术博客参加工作三年多了,也有自己的一些体会。所以就把三年工作的经验总结一下:1.书本上的知识不经过实战是没用的
2015-11-07 16:46:40 951 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人