UEFI开发编程汇总 (持续更新)

在开发UEFI过程中,会经常遇到开发调试问题、开发技巧等。
我开一篇UEFI相关的持续更新的博客记录一下,如果有你刚好遇到的UEFI问题 那就更好了。

  • UEFI中添加.S汇编文件
    这个只需要在.inf文件中添加如下代码即可
[Sources.AARCH64]
  sha256-armv8.S	
  
[Sources.ARM]
   sha256-armv8.S

假设你想在UEFI代码中调中.S中的代码,比如我这里想要调用sha256_block_data_order函数,extern一下,然后就可以调用了。

extern void sha256_block_data_order(uint32_t state[8], const uint8_t *data,
                            size_t num_blocks);
  • 在UEFI中编译遇到两个.h头文件重复定义 问题解决
    比如一个.c中引用了两个不同的.h头文件,但是两个.h头文件中又都typedef了相同的内容,编译会报错。
    我的解决办法是添加一个SIZET_宏,在两个typedef的地方都加上这个宏的判断,这样就不会编译报错了。
#ifndef SIZET_
typedef unsigned long size_t;
#define SIZET_
#endif

  • UEFI中增加静态库.a文件
    如果想在模块中引用ARM64构架的libxxx.a文件,可以在.inf配置文件中添加如下code
[BuildOptions.AARCH64]
	GCC:*_*_AARCH64_CC_FLAGS  = $(PLATFORM_EXTRA_FLAGS)
	GCC:*_*_AARCH64_DLINK2_FLAGS  = $(WORKSPACE)/yourpath/libxxx.a
  • UEFI中如何通过SMC指令与ATF交互数据
    发送数据给ATF,我这里带了四个参数。
ARM_SMC_ARGS ArmSmcArgs;
ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));

ArmSmcArgs.Arg0 = yourcode; //指定一个ATF中唯一的识别码即可
ArmSmcArgs.Arg1 = 1;
ArmSmcArgs.Arg2 = 2;
ArmSmcArgs.Arg3 = 3;
ArmSmcArgs.Arg4 = 4;

ArmCallSmc (&ArmSmcArgs);

接收从ATF中返回的数据,ArmSmcArgs.Arg0、ArmSmcArgs.Arg1、ArmSmcArgs.Arg2、ArmSmcArgs.Arg3是分别返回的参数值。

  ARM_SMC_ARGS ArmSmcArgs;
  ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));
  
  ArmSmcArgs.Arg0 = yourcode; //ATF中定义的唯一识别码

  ArmCallSmc (&ArmSmcArgs);

持续更新中。。。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值