Raspberry Pi 上的 .NET Core 运行时环境抛出分段错误
.NET Core runtime environment on Raspberry Pi throws segmentation fault
我尝试按照此处的答案之一安装 .NET Core 运行time 环境:Is it possible to run .NET Core on Raspberry PI?
我已经检查过我是否安装了所有需要的包,但是当我 运行 "dotnet --info" 我只是遇到分段错误。 Strace 没有给出关于可能缺少什么的好主意:https://pastebin.com/rBUbiYkV
mmap2(NULL, 180536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c9f000
mprotect(0xb6cbb000, 61440, PROT_NONE) = 0
mmap2(0xb6cca000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0xb6cca000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "7ELF[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]([=11=][=11=][=11=][=11=]@h[=11=]04[=11=][=11=][=11=]"..., 512) = 512
lseek(3, 1231820, SEEK_SET) = 1231820
read(3, "[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]"..., 2880) = 2880
lseek(3, 1228284, SEEK_SET) = 1228284
read(3, "A.[=11=][=11=][=11=]aeabi[=11=]$[=11=][=11=][=11=][=11=]56[=11=]\t\n"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1234700, ...}) = 0
mmap2(NULL, 1303888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6b60000
mprotect(0xb6c8a000, 61440, PROT_NONE) = 0
mmap2(0xb6c99000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x129000) = 0xb6c99000
mmap2(0xb6c9c000, 9552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6c9c000
close(3) = 0
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f25000
set_tls(0xb6f256d0, 0xb6f25dc8, 0xb6f2b050, 0xb6f256d0, 0xb6f2b050) = 0
mprotect(0xb6c99000, 8192, PROT_READ) = 0
mprotect(0xb6cca000, 4096, PROT_READ) = 0
mprotect(0xb6d49000, 4096, PROT_READ) = 0
mprotect(0xb6e8a000, 20480, PROT_READ) = 0
mprotect(0xb6eb8000, 4096, PROT_READ) = 0
mprotect(0xb6ecd000, 4096, PROT_READ) = 0
mprotect(0xb6ee4000, 20480, PROT_READ|PROT_WRITE) = 0
mprotect(0xb6ee4000, 20480, PROT_READ|PROT_EXEC) = 0
cacheflush(0xb6ee4000, 0xb6ee9000, 0, 0x15, 0) = 0
mprotect(0xb6ef8000, 4096, PROT_READ) = 0
mprotect(0x21000, 4096, PROT_READ) = 0
mprotect(0xb6f2a000, 4096, PROT_READ) = 0
munmap(0xb6ecf000, 83008) = 0
set_tid_address(0xb6f25278) = 24092
set_robust_list(0xb6f25280, 12) = 0
rt_sigaction(SIGRTMIN, {sa_handler=0xb6e972b0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0xb6b8c6c0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0xb6e97390, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0xb6b8c6c0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
ugetrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
brk(NULL) = 0x100b000
brk(0x1030000) = 0x1030000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x6011e} ---
+++ killed by SIGSEGV +++
Segmentation fault
接下来我应该尝试什么?
Raspberry Pi 1 个包含 an ARMv6 processor.
.NET Core 需要一个可以 execute the ARMv7 instruction set 的处理器,因为这是 JIT 发出的:
Note: Pi Zero is not supported because the .NET Core JIT depends on armv7 instructions not available on Pi Zero.
所以这是行不通的。对不起。尝试使用 Raspberry Pi 2 或 3。
(如果你有疯狂的冒险精神,你可以尝试自己移植 JIT。我不会尝试这个,除非你非常非常擅长编写 ARM 汇编、C、C++、C# 并且深入了解编译器)
我尝试按照此处的答案之一安装 .NET Core 运行time 环境:Is it possible to run .NET Core on Raspberry PI?
我已经检查过我是否安装了所有需要的包,但是当我 运行 "dotnet --info" 我只是遇到分段错误。 Strace 没有给出关于可能缺少什么的好主意:https://pastebin.com/rBUbiYkV
mmap2(NULL, 180536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c9f000
mprotect(0xb6cbb000, 61440, PROT_NONE) = 0
mmap2(0xb6cca000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0xb6cca000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "7ELF[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]([=11=][=11=][=11=][=11=]@h[=11=]04[=11=][=11=][=11=]"..., 512) = 512
lseek(3, 1231820, SEEK_SET) = 1231820
read(3, "[=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=][=11=]"..., 2880) = 2880
lseek(3, 1228284, SEEK_SET) = 1228284
read(3, "A.[=11=][=11=][=11=]aeabi[=11=]$[=11=][=11=][=11=][=11=]56[=11=]\t\n"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1234700, ...}) = 0
mmap2(NULL, 1303888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6b60000
mprotect(0xb6c8a000, 61440, PROT_NONE) = 0
mmap2(0xb6c99000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x129000) = 0xb6c99000
mmap2(0xb6c9c000, 9552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6c9c000
close(3) = 0
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f25000
set_tls(0xb6f256d0, 0xb6f25dc8, 0xb6f2b050, 0xb6f256d0, 0xb6f2b050) = 0
mprotect(0xb6c99000, 8192, PROT_READ) = 0
mprotect(0xb6cca000, 4096, PROT_READ) = 0
mprotect(0xb6d49000, 4096, PROT_READ) = 0
mprotect(0xb6e8a000, 20480, PROT_READ) = 0
mprotect(0xb6eb8000, 4096, PROT_READ) = 0
mprotect(0xb6ecd000, 4096, PROT_READ) = 0
mprotect(0xb6ee4000, 20480, PROT_READ|PROT_WRITE) = 0
mprotect(0xb6ee4000, 20480, PROT_READ|PROT_EXEC) = 0
cacheflush(0xb6ee4000, 0xb6ee9000, 0, 0x15, 0) = 0
mprotect(0xb6ef8000, 4096, PROT_READ) = 0
mprotect(0x21000, 4096, PROT_READ) = 0
mprotect(0xb6f2a000, 4096, PROT_READ) = 0
munmap(0xb6ecf000, 83008) = 0
set_tid_address(0xb6f25278) = 24092
set_robust_list(0xb6f25280, 12) = 0
rt_sigaction(SIGRTMIN, {sa_handler=0xb6e972b0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0xb6b8c6c0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0xb6e97390, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0xb6b8c6c0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
ugetrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
brk(NULL) = 0x100b000
brk(0x1030000) = 0x1030000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x6011e} ---
+++ killed by SIGSEGV +++
Segmentation fault
接下来我应该尝试什么?
Raspberry Pi 1 个包含 an ARMv6 processor.
.NET Core 需要一个可以 execute the ARMv7 instruction set 的处理器,因为这是 JIT 发出的:
Note: Pi Zero is not supported because the .NET Core JIT depends on armv7 instructions not available on Pi Zero.
所以这是行不通的。对不起。尝试使用 Raspberry Pi 2 或 3。
(如果你有疯狂的冒险精神,你可以尝试自己移植 JIT。我不会尝试这个,除非你非常非常擅长编写 ARM 汇编、C、C++、C# 并且深入了解编译器)