4 扫地聖

尚未进行身份认证

我要认证

make your heart ...

等级
TA的排名 6w+

UEFI 中的Gmac网卡驱动实现

UEFI 中的Gmac网卡驱动实现最近在龙芯平台完成了Gmac网卡驱动的迁移,目前已经在UEFI上跑起来了,经过大量的测试,gmac搭配Rtl或者intel的网卡进行pxe启动都是没有问题的。也算是完成了一个里程碑的事件,从此之后,龙芯平台7A桥片内集成的gmac 千兆网卡就能在BIOS使用了。下面将调试过程中遇到的坑,需要注意的地方做个总结。网卡驱动框架UEFI中的网络框架大致如下:根据上面的框架,其实主要实现的就是UNDI层的代码,主要就是一些关于网卡硬件操作的代码,以及提供给SNP层调用的接

2020-09-29 20:27:17

UEFI中的Option ROM 驱动详解

最近在调试UEFI中 option rom 的支持,我们是和南京神易的合作伙伴一起,在他们的板卡上适配的。收货还是挺多的,下面就将收货做个总结吧,话不多少,直接上干货。PCI扫描过程中是如何确定PCI设备是否支持option rom的?在pci扫描设备的过程中,在函数PciSearchDevice中会调用函数GetOpRomInfo这个函数,函数调用关系如下:PciBusDriverBindingStart->PciEnumerator->PciRootBridgeEnumerator-&

2020-05-23 11:38:53

调试 intel 82580网卡在intel 8632 switch下扫不到的问题的收获

最近在调试intel 82580这款网卡在8632 switch下扫不到的问题。耗时了三个星期的时间,在这个过程中真的是学到了很多,所以还是决定将这些都记录下来吧。因为漫漫长河中,我们终将会将一些事遗忘。问题现象硬件环境: G1控制器(00:11:00) | 8632桥(03:00:00) ...

2019-12-06 20:23:23

UEFI下如何在C语言嵌入汇编

UEFI下如何在C语言内嵌入汇编有两种方法:分别是以内嵌汇编的形式和直接就是汇编的形式存在,内嵌汇编不够灵活,而且代码的可读性和维护性都比较差,强烈推荐第二种方式。内嵌汇编的形式 __asm__ __volatile__( ".set_noa...

2019-12-06 20:21:25

龙芯平台如何BIOS下如何读取pcie扩展配置空间

读取peie扩展配置空间中的信息硬件环境: G1控制器(00:11:00) | 8632桥(03:00:00) | ------------------------------------------------------------------------------------...

2019-12-06 20:15:31

如何查看内核的调用栈

如何查看函数的调用栈也就是根据当前cpu内寄存器的值,如何反推函数的调用栈,这种调试方法在内核调试过程中是很常见的,也算是常用的技巧。这个在追查死机等问题,可以用的上。(1)通过ejtag来读取当前pc的地址以及sp,ra寄存器的信息首先,我们的机器起来以后,我们用ejtag调试工具查看一下当前的寄存器的内容如下:cpu0 -set#setzero:0x0 at:0x5400cce1 ...

2019-12-06 20:12:43

反汇编及连接工具

######################################################################## this is a disassembly tool,convenient to debug## input Params:# $1: filename :*.dll that you want disassembly...

2019-08-16 14:25:54

读书笔记之PCI Express体系结构导读

第一章 PCI总线的基本知识PCI总线概念PCI(Peripheral Componnent Interconnect)在处理器体系结构中属于局部总线,局部总线作为系统总线的延伸,其主要的功能就是连接外部设备。随着处理器主频的不断提升,就要求速度更快带宽更高的局部总线。起初PC采用8位的XT总线作为局部总线,后来很快升级到16位的ISA(Industry Stadnard Architectu...

2019-07-20 11:12:55

32位和64位的那些事

32位和64位的那些事在我们日常使用和在编程中,常常涉及到32位机器64位机器以及32位操作系统和64位操作系统还有32位编译器和64位编译器等等相关的问题。这些问题经常让人迷糊,现在就这些问题,做一个简单的总结,希望对读者们有用。程序运行的平台个人理解(不知道对不对啊)程序运行的平台是由:处理器+OS(操作系统)+compiler(编译器来决定)三者组成的,下面将处理器简称位CPU,操作...

2019-07-20 11:10:46

UEFI中的PCI设备扫描及分配Mem/Io空间过程

最近在调试解决PCI设备相关的问题,然后对UEFI下面的这部分实现有了初步的了解,为了防止后面慢慢的又忘记了,所以还是决定将最近的收获都记录起来,各位读者如果发现哪里记录或者总结的不对,欢迎留言指正。PciHostBridgeDxe这个驱动是为pci bus驱动执行做前期准备的驱动,在这个驱动里面主要是建立相应的软件结构来描述Host主桥,以及注册一些protocol是为pci bus 驱动使...

2019-07-03 19:04:28

uefi的几种文件格式(.fdf .dec .dsc .inf)

在uefi 中fdf文件和dsc文件以及dec文件还有inf文件是每一个做uefi的人最开始接触的文件,那么这些文件到底有什么作用?以及文件中每个字段的意义又是什么呢?现在就让我们一个文件一个文件的看吧!(本文的所有内容都来自于uefi de spec,如果想详细了解spec中的内容,请自己参阅spec,本文只是自己在阅读过程中将重点记录下来)首先看一下uefi中的几种名词解释:HIIH...

2019-05-09 11:27:08

UEFI中的S3实现

这段时间在龙芯平台上,调试S3的功能。目前已经基本完成,现将遇到的问题来做个总结,和简单的介绍一下S3的实现原理!下面我们就从ACPI规范说起。。计算机的状态在ACPI 里面定义了很多个power state , 如果从用户的角度看,计算机一定是处理下图中的一个状态:S0:实际上这就是我们平常的工作状态,所有设备全开,功耗一般会超过80WS1:也称作为POS(p...

2019-05-09 11:25:38

UEFI Relocation 原理

本文主要介绍的是UEFI Relocation的原理,以及主要的代码流程。首先:为什么要重定位?UEFI和传统的BIOS不一样,运行的特点也不一样,在编译阶段,每个模块都被编译成.efi的文件,然后将多个efi文件又生成Fv,最后又生成.fd文件,以这种方式存储在BIOS芯片中。在二进制的代码段中,每条指令的地址都是基于本模块的基址的一个偏移,然而每个模块真正运行的基地址,可能随着环境的不...

2019-05-09 11:25:21

uefi中Sec阶段和Pei阶段的启动分析

本文的启动分析是基于龙心3A2000+780E桥片的处理器的。首先:SEC(安全性)阶段:系统开始执行第一条指令,这时的Memory没有被初始化。主要工作是建立临时的Memory,它可以是处理器的Cache,或是systemStaticRAM(SRAM)。另外,SECPhase需要知道一些早期的内存被映射到的位置以及BFV(BootFirmwareVolume)的位置。P...

2019-05-09 11:24:22

Grub调试总结

最近在龙芯平台调研Grub的实现,在这过程中仔细研究了Grub的代码,就做个总结吧!首先Grub在uefi上也是以一个Grub.efi的方式运行的,但是这个efi是放在操作系统下面的boot/EFI/下面的,uefi在运行过程总后期加载Grub的时候会去这个目录load这个Grub模块。load到内存之后,就开始执行。这里面不做详细的介绍是如何load以及如何运行的,这部分内容都在uefi中有源...

2019-05-09 11:20:29

计算机系统启动过程分析

本文基于MIPS架构龙芯3号处理器为例,介绍启动过程。启动过程分析无论采用何种指令系统的处理器,复位后的第一条指令都会从一个预先定义好的特定地址去取指。处理器的执行就从这条指令开始。处理器的启动过程实际上就是一个特定程序的执行过程,这个程序被成为固件,也就是BIOS,现在主流的BIOS都是采用UEFI软件架构。龙芯也自己研制了在MIPS架构上的UEFI版本。龙芯3号处理器的上电执行的第一条指令...

2019-03-02 15:53:34

读书笔记之计算机体系结构

知识要点此文章内容摘抄自计算机体系结构基础(胡伟武著),有些地方可能介绍的不是很详细,如果读者想仔细的了解,请自己阅读原著。第二章 指令系统无论是在什么架构上,都有自己的指令系统,如x86采用的是复杂指令集,而ARM/PowerPc等架构均采用的是精简指令集,这里面提到的指令集就是所谓的指令系统。因此不同平台上的要实现同样功能的指令可能会大部相同。指令是介于软件和硬件之间的桥梁,对于一个程序...

2019-03-02 14:11:47

start_kernel()之setup_arch()函数详解

该函数主要是根据处理器硬件平台具体的机器型号来设置系统。解析Linux系统的命令行,设置0号jin cheng 的内存描述结构init_mm,系统内存管理初始化,统计并注册系统各种资源,以及其他杂项的初始化功能。注意这个函数在具体的硬件平台上是有所差别的,我们这里以ARM平台为例开始讲解。下面是代码:void __init setup_arch(char **cmdline_p){_...

2019-02-25 06:41:22

UEFI下的FlashOperationProtocol的实现

UEFI下的FlashOperationProtocol的实现这个驱动其实就是读写flash所需要的最底层的驱动,其操作的就是最底层的flash的芯片,flash芯片有好多中,我们这里采用的是spi协议的。每种芯片的读写函数可能不太一样,但是都是大体相同的。下面是几种flash的介绍,大家知道自己的芯片使用的是哪种就好。几种flash芯片的介绍1、IIC EEPROM------容量小,采用...

2019-02-02 22:10:43

UEFI下FirmwareVolumeBlockService驱动的实现

这个驱动是和variable的驱动一起使用的,是variable驱动的下一层,variable是要使用这个驱动中的read和write函数的,然后这个驱动去调用FlashOperationProtocolsDxe中的read和write函数。下面看一下这个驱动的具体实现:下面是驱动入口的函数EFI_STATUSEFIAPIFvbInitialize ( IN EFI_HANDLE...

2019-02-02 21:04:58

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。