Что такое простой способ реализации ARM SMC

Я пытаюсь написать программу, которая выполняет один вызов 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- Спасибо за вашу помощь и объяснения. Арун - это определенно помогает.

1 ответ

Решение

Я считаю, что есть недопонимание относительно реализации зоны доверия ARM.

Вся среда исполнения делится на безопасные и незащищенные миры. Linux находится в небезопасном мире. Обычно (безопасный) сертифицированный кусок кода работает в безопасном мире. Этот защищенный образ обычно выпускается поставщиком SoC и не может быть подделан.

Защищенный код загружается в защищенную память перед загрузкой Linux. С этого момента SMC-вызов действует как мост, который переносит режим выполнения в безопасный мир. Вызов SMC переводит режим выполнения в режим Secure Monitor (который реализован в безопасном коде), который имеет более высокий уровень привилегий и находится вне сферы действия ядра Linux.

Поскольку вы не можете вмешиваться в реализацию зоны доверия поставщика SoC, вы не можете добавлять к ней новые API. Если вам нужно вызвать существующий безопасный API, вам нужно знать соглашения о вызовах и определение API. Если поставщик SoC предоставит эту информацию, вы сможете вызвать существующий безопасный API.

Другие вопросы по тегам