【发布时间】:2015-07-04 22:13:21
【问题描述】:
我正在尝试编写一个发出一个 SMC 调用的程序。搜索了前面的问题,我的理解是Linux内核中没有真正的API来实现ARM SMC?我正在开发基于 msm8974 的原型,想知道最好的方法是什么。
我仍在学习节魔法以及链接器如何映射程序集导出“标签”?宏? (不知道他们叫什么)到C程序。请告诉我是否真的需要通读 GNU 链接器文档以了解这是如何发生的。
@Ross Ridge- 谢谢。 SMC,Secure Monitor Call,是与 ARM Trust Zone 服务交互的指令。我的问题是如何实现这个调用。这里的大多数帖子和答案都暗示这样的接口在 Linux 内核树上还不可用。所以,我知道我必须在汇编中编写它。 @Notlikethat - 嘿伙计。我正在使用不同的平台。为我的平台(Qualcomm Snapdragon)实施这些其他实施在高层次上涉及什么?
@Notlikethat - 这是我在 /arch/arm/kerel 下看到的:
sansari@ubuntu:~/WORKING_DIRECTORY/arch/arm/kernel$ ls
arch_timer.c entry-common.S kprobes-arm.c perf_event_v6.c suspend.c
armksyms.c entry-header.S kprobes.c perf_event_v7.c swp_emulate.c
arthur.c etm.c kprobes-common.c perf_event_xscale.c sys_arm.c
asm-offsets.c fiqasm.S kprobes.h pj4-cp0.c sys_oabi-compat.c
atags.c fiq.c kprobes-test-arm.c pmu.c tcm.c
atags.h ftrace.c kprobes-test.c process.c tcm.h
bios32.c head-common.S kprobes-test.h ptrace.c thumbee.c
calls.S head-nommu.S kprobes-test-thumb.c relocate_kernel.S time.c
compat.c head.S kprobes-thumb.c return_address.c topology.c
compat.h hw_breakpoint.c leds.c sched_clock.c traps.c
cpuidle.c init_task.c machine_kexec.c setup.c unwind.c
crash_dump.c insn.c Makefile signal.c update_vsyscall_arm.c
debug.S insn.h module.c signal.h update_vsyscall_arm.h
devtree.c io.c opcodes.c sleep.S user_accessible_timer.c
dma.c irq.c patch.c smp.c vmlinux.lds.S
dma-isa.c isa.c patch.h smp_scu.c xscale-cp0.c
early_printk.c iwmmxt.S perf_event.c smp_tlb.c
elf.c jump_label.c perf_event_msm.c smp_twd.c
entry-armv.S kgdb.c perf_event_msm_krait.c stacktrace.c
也许我需要一个更新的内核?
@Notlikethat - 请您指出有关您提到的 EXINOS 和 ... 实现的文档?
@all- 感谢您的帮助和解释。阿伦 - 这绝对有帮助。
【问题讨论】:
-
您需要更好地描述您要完成的工作。您的大部分帖子只是猜测在黑暗中随机刺伤的解决方案可能是什么。
-
真的不清楚你在这里得到什么 - 关于引导加载程序和链接器的所有这些东西是什么?发出一个 SMC 调用,最简单的,不超过
asm volatile("smc #whatever");- 我知道内核中已经有至少 3 个实现(arch/arm/kernel 中的 PSCI 代码,以及一些 Tegra 和 Exynos 固件驱动程序),你可以画在。或者您实际上是在谈论编写安全固件来处理该调用? -
你还没有解释你想要完成什么。
标签: assembly linux-kernel arm linux-device-driver trust-zone