APP截图
应用介绍
08:c0801fe4:50000100// atags 指针的 值
07:c0801fe0:65a// board id
06:c0801fdc:c0387d // 变量 cr_alignment 的值
05:c0801fd8:51// cp15 Register 3: Domain access control 的值
04:c0801fd4:c0700330 // 这个看样子是 __mmap_switched_data 中的 processor_id的地址
03:c0801fd0:0
02:c0801fcc:0
01:c0801fc8:0
00:c0801fc4:0
//c0801fc4 存了第一个变量 char * command_line;
BOTTOM
2 C0801FF8 - C0800000 中的 KEEP((.data…init_task)) KEEP(
(.data…init_thread_info)) 是什么?
先回答一下,该地址空间共 8KB左右
C0801FF8
pt_regs 的值(18个,最上面为r0-r15,cpsr,最下面为old_r0)
stack(栈)
0x57AC6E9D // set_task_stack_end_magic 在 此地址(init_thread_info的前面四字节)(栈底) 填充了一个32bit整数,用来标识栈底
struct thread_info init_thread_info;
struct task_struct init_task;
C0800000
current 与 task_struct (以 init_task为例)
include/asm-generic/current.h
7 #define get_current() (current_thread_info()->task)
8 #define current get_current()
arch/arm/include/asm/thread_info.h
91 static inline struct thread_info *current_thread_info(void)
92 {
93 return (struct thread_info *)
94 (current_stack_pointer & ~(THREAD_SIZE - 1));
95 }
arch/arm/include/asm/percpu.h
8 register unsigned long current_stack_pointer asm ("sp");
include/linux/init_task.h
43 #define __init_task_data __section(".data..init_task")
init/init_task.c
60 /*
61 * Set up the first task table, touch at your own risk!. Base=0,
62 * limit=0x1fffff (=2MB)
63 */
64 struct task_struct init_task
65 #ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
66 __init_task_data
67 #endif
68 __aligned(L1_CACHE_BYTES)
69 = {
...
75 .stack = init_stack,
...
216 };
217 EXPORT_SYMBOL(init_task);
init/init_task.c
224 struct thread_info init_thread_info __init_thread_info = INIT_THREAD_INFO(init_task);
include/linux/init_task.h
49 #define __init_thread_info __section(".data..init_thread_info")
[1] [2]
关键字: 编辑:什么鱼 引用地址:OK6410A 开发板 (八) 8 linux-5.11 OK6410A 详细解析 start_kernel运行时的 栈