支持linux与32的开发版,在ARM64位开发板上兼容ARM32位的可执行程序

邮箱:[email protected]

概述

在嵌入式开发时,经常会通过编译busybox来制作rootfs,然后在上面跑可执行程序。那么如何通过修改配置,让一个rootfs同时兼容32位和64位的可执行程序呢?

我们知道,如果EL1运行在64位时,那么EL0既可以运行在64位,也可以运行在32位。具体到这里,我们让内核运行在64位(EL1),然后在EL0运行64位或者32位的可执行程序,在加载32位的可执行程序时,会先陷入Linux内核(EL1),然后通过解析elf文件发现EL0要运行在32位模式,那么在eret异常返回到EL0时会通过SPSR将当前cpu切到32位模式运行。

正文

1、配置linux kernel

使kernel支持在EL0上运行32位可执行程序:(arch/arm64/Kconfig中)

config COMPAT

bool"Kernel support for 32-bit EL0"depends on ARM64_4K_PAGES || EXPERT

select COMPAT_BINFMT_ELF if BINFMT_ELF

select HAVE_UID16

select OLD_SIGSUSPEND3

select COMPAT_OLD_SIGACTION

help

This option enables support for a32-bit EL0 running under a 64-bit

kernel at EL1. AArch32-specific components such as system calls,

the user

你可能感兴趣的:(支持linux与32的开发版)