基于RK3328平台构建ATF固件

实验环境

硬件设备:GDK8

GDK8是我的主力开发机,可以非常方便的在ARM上编译代码,免去了交叉编译的苦恼,而它最大的特色就是可以进行JTAG调试。
相信现在非常多的领域都需要研究Linux内核,而传统的内核调试方法就是printk,而像kgdb这样的软件调试器又有调试不了的“盲区”,基于这种情况就只能使用JTAG技术,但市场上的芯片又不给你把JTAG引脚弄出来,于是想要使用JTAG进行调试是非常困难的,但是GDK8可以非常轻松的通过挥码枪与底层的Coresight协议进行交互,进行JTAG调试,大大提高了我解决问题的效率。

在这里插入图片描述

挥码枪上手指南
Nano Code下载链接

ATF与BL31的介绍

可信固件(Trusted Firmware)是ARM从ARM-v8时期开始引入的安全方案,主要作用在提高了启动过程的安全性和细化了运行过程的特权级区间,对于ARM而言,可信固件可以分成两类,分别是针对A核的TF-A和针对M核的TF-M。

当机器启动后,会从Boot Rom内启动bl1_entrypoint.S,bl1的主要目的是建立Trusted SRAM、exception vector、初始化串口等,bl1完成之后,会从Trusted Boot Firmware内运行bl2_main.c,在这里面会去初始化硬件和寻找bl3,当然bl3有很多,如bl31、bl32、bl33,bl31是通过SMC为Non-Secure持续提供设计安全的服务,并寻找bl32和bl33,其中bl32负责OPTee OS的运行,bl33则是不可信固件。

1. 下载ATF源代码

git clone https://github.com/ARM-software/arm-trusted-firmware.git

2. 编译ATF

编译ATF固件可以参照下面的命令进行编译。

make realclean

CFLAGS='-gdwarf-2' \
CROSS_COMPILE=aarch64-linux-gnu- \
make PLAT=rk3328 DEBUG=1 ERROR_DEPRECATED=1 bl31

其中PLAT=指对应芯片类型,由于GDK8的芯片是RK3328,所以指定PLAT=rk328,也可以根据具体的芯片型号指定不同的平台。
DEBUG=用于决定生成的二进制是否带有符号信息,比如设置DEBUG=1就会生成符号信息,而设置DEBUG=0就不会生成调试信息。
完成编译后,可以在build/rk3328/目录下找到编译出来的二进制文件,生成的固件位于bl31目录下,名字是bl31.elf

ls build/rk3328/debug/
bl31  lib  libc  libfdt  libwrapper  romlib

ls build/rk3328/debug/bl31/
16550_console.d         cache_helpers.o          errata_report.d        plat_gicv2.o        psci_on.d
16550_console.o         cci.d                    errata_report.o        plat_helpers.d      psci_on.o
aem_generic.d           cci.o                    generic_delay_timer.d  plat_helpers.o      psci_setup.d
aem_generic.o           context.d                generic_delay_timer.o  plat_log_common.d   psci_setup.o
arm_arch_svc_setup.d    context_mgmt.d           gicdv2_helpers.d       plat_log_common.o   psci_suspend.d
arm_arch_svc_setup.o    context_mgmt.o           gicdv2_helpers.o       plat_pm.d           psci_suspend.o
backtrace.d             context.o                gicv2_helpers.d        plat_pm.o           psci_system_off.d
backtrace.o             cortex_a53.d             gicv2_helpers.o        plat_psci_common.d  psci_system_off.o
bakery_lock_coherent.d  cortex_a53.o             gicv2_main.d           plat_psci_common.o  rockchip_gicv2.d
bakery_lock_coherent.o  cpu_data_array.d         gicv2_main.o           plat_topology.d     rockchip_gicv2.o
bl31_context_mgmt.d     cpu_data_array.o         interrupt_mgmt.d       plat_topology.o     runtime_exceptions.d
bl31_context_mgmt.o     cpu_data.d               interrupt_mgmt.o       pmu.d               runtime_exceptions.o
bl31.dump               cpu_data.o               misc_helpers.d         pmu.o      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
atf_sendllc是指"Automated Test Framework - Send Low Level Command",即自动化测试框架 - 发送低级命令。 在软件开发和测试中,自动化测试是一种重要的方法,可以有效地减少测试时间和提高测试的准确性。而atf_sendllc是自动化测试框架中的一个功能,用于发送低级命令。 低级命令通常指的是与操作系统或硬件直接交互的指令,比如读写寄存器、修改配置等。通过使用atf_sendllc,测试团队可以模拟和发送这些低级命令,以验证系统在不同条件下的行为和反应。 atf_sendllc的使用可以帮助测试人员实现以下目标: 1. 测试功能的完整性:通过发送低级命令,测试人员可以确保系统对各种不同的指令和参数做出正确的响应。这有助于发现和解决功能上的问题和缺陷。 2. 测试系统的稳定性:通过模拟低级命令的发送,测试团队可以评估系统在不同负载下的稳定性和可靠性。这有助于发现潜在的系统崩溃或异常行为,并采取相应的措施修复问题。 3. 进行性能测试:atf_sendllc可以用于发送不同的指令和参数,以模拟不同的负载情况。通过监测系统的性能指标,如响应时间和资源使用率,测试团队可以评估系统在不同负载下的性能表现。 总之,atf_sendllc是自动化测试框架中的一个重要功能,可以帮助测试团队验证系统在低级命令级别上的功能完整性、稳定性和性能。它提供了一种有效的方式来自动化测试,并提供了更细粒度的控制和监测能力,以确保系统的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值