内核空间和用户空间有什么区别?内核空间,内核线程,内核进程和内核堆栈是否意味着相同的事情?另外,为什么我们需要这种区别?
用户模式和内核模式之间有什么区别,为什么以及如何激活它们中的任何一个,以及它们的用例是什么?
我一直在学习Windows中驱动程序开发的基础知识我一直在寻找Ring 0和Ring 3这两个术语.这些是指什么?它们与内核模式和用户模式相同吗?
我一直在阅读 gcc 生成的一些不同的arm汇编代码,并且遇到了一些我在规范中找不到的东西。
movw r0, #39784
movt r0, 1
Run Code Online (Sandbox Code Playgroud)
显然,第一个是将值 39784 移动到底部 16 位或 r0,但 movt 的操作数“1”很奇怪,因为它前面没有哈希,而且我的印象是立即值需要哈希。在某些情况下它是可选的吗?或者我错过了一些神奇的东西?
我正在尝试交叉编译一个文件以闪入 Beaglebone Black。一切正常,但如果我尝试启用 FPU
#define set_en_bit_in_fpexc() do { \
int dummy; \
__asm__ __volatile__ ("fmrx %0,fpexc\n\t" \
"orr %0,%0,#0x40000000\n\t" \
"fmxr fpexc,%0" : "=r" (dummy) : :); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Error: selected processor does not support `fmrx r3,fpexc' in ARM mode
Error: selected processor does not support `fmxr fpexc,r3' in ARM mode
Run Code Online (Sandbox Code Playgroud)
我也尝试过thumb mode
,但我遇到了同样的错误。当然,如果我删除初始化 FPU 的代码部分,它就可以正常工作。
为什么我会收到这些错误?
生成文件
[...]
CROSSPATH?=/usr/bin
CROSSPFX=$(CROSSPATH)/arm-none-eabi-
CC=$(CROSSPFX)gcc
AS=$(CROSSPFX)as
LD=$(CROSSPFX)ld
NM=$(CROSSPFX)nm
OBJCOPY=$(CROSSPFX)objcopy
OBJDUMP=$(CROSSPFX)objdump
CFLAGS=-Wall -Wextra -O2 -ffreestanding
ARCHFLAGS=-mcpu=cortex-a8 -march=armv7-a -mfpu=neon
CCARCHFLAGS=$(ARCHFLAGS) -marm …
Run Code Online (Sandbox Code Playgroud) 我发现ptrace将在__ptrace.S中使用__ptrace及其代码,如下所示:
ENTRY(__ptrace)
.save {r4, r7}
stmfd sp!, {r4, r7}
ldr r7, =__NR_ptrace
swi #0
ldmfd sp!, {r4, r7}
movs r0, r0
bxpl lr
b __set_syscall_errno
END(__ptrace)
Run Code Online (Sandbox Code Playgroud)
我不知道的是这个过程如何继续在swi#0和r7在这里做什么?
谢谢你的任何提示.
arm ×3
gcc ×2
android ×1
assembly ×1
driver ×1
kernel ×1
linux-kernel ×1
newlib ×1
terminology ×1