1. memblock 1.1. 结构体 memblock相关的全局变量是编译时静态初始化的。 1/// mm/memblock.c 2 3/// INIT_MEMBLOCK_MEMORY_REGIONS和INIT_MEMBLOCK_RESERVED_REGIONS见arch/arm64/include/asm/memory.h 4static struct memblock_region memblock_memory_init_regions[INIT_MEMBLOCK_MEMORY_REGIONS] __initdata_memblock; 5static struct memblock_region...
1. 动态链接和静态链接 1.1. 编译命令 1aarch64-linux-gnu-gcc -o dummy_arm64 dummy.c 2aarch64-linux-gnu-gcc -static -o dummy_arm64_static dummy.c 1.2. 查看文件格式信息 1$ file dummy_arm64* 2dummy_arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1,...
1. 运行队列:runqueue Linux内核使用运行队列来管理每个CPU上运行的任务,要运行的任务抽象成“调度实体”,调度实体可以是进程、线程或任务组。 对于cfs、rt、dl的任务,调度实体分别由struct sched_entity、struct sched_rt_entity、struct sched_dl_entity表示。这些结构体直接由struct task_struct包含。 1/// kernel/sched/sched.h 2DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); 3 4#define cpu_rq(cpu)...
1. namespace简介 namespace是Linux提供的一种内核级别环境隔离的方法,很多编程语言也有namespace这样的功能,例如C++,Java等。编程语言的namespace是为了解决项目中能够在不同的命名空间里使用相同的函数名或者类名。而Linux的namespace也是为了实现资源能够在不同的命名空间里有相同的名称,比如在A命名空间有个pid为1的进程,而在B命名空间中也可以有一个pid为1的进程。 有了namespace就可以实现基本的容器功能,著名的Docker就是使用了namespace来实现资源隔离。 Linux支持多种资源的namespace: Type Parameter Linux...
1. 基本概念 Linux内核中没有使用单独的数据结构来描述进程和线程,而是将它们统一起来,使用task_struct结构体来描述,这就是“Linux不区分进程和线程”的来源。 内核态: 所有线程都由kthreadd创建,运行在内核态,由独立的task_sturct描述。内核中不区分进程和线程,为了方便区分,这里统称为内核线程 用户态: 单线程进程:仅有一个线程,也就是主线程,内核中由一个task_struct描述,进程id就是task_struct.pid。 多线程进程:包含多个线程,每个线程都有自己的task_struct,有几个线程(包含主线程)就会有几个task_struct,所有task_struct...
1. 进程状态切换 state value desc TASK_NEW 0x00000800 新建 TASK_RUNNING 0x00000000 就绪或占有cpu运行 TASK_INTERRUPTIBLE 0x00000001 可中断睡眠 TASK_UNINTERRUPTIBLE 0x00000002 不可中断睡眠 TASK_WAKEKILL 0x00000100 可以在stopped/traced/killable的情况下唤醒 TASK_WAKING 0x00000200 正在被唤醒 __TASK_STOPPED 0x00000004 和其他状态组合,用于唤醒包含此状态标记的进程 TASK_STOPPED 0x00000104...
1. ARM64 Crash调试环境搭建 主要参考资料: 内核源码 Documentation/admin-guide/kdump/kdump.rst或者Documentation for Kdump - The kexec-based Crash Dumping Solution Crash白皮书:https://crash-utility.github.io/crash_whitepaper.html Crash github:https://github.com/crash-utility/crash Oracle: Using the crash Debugger 1.1. x86_64主机编译ARM64 Crash工具 ...
Crash帮助信息,来自于crash -h
1. Crash命令介绍 虽然使用硬件设备来调试有很多优点和方便之处,但是我一直希望代码是可以自己调试自己的,从而避免使用一些昂贵的外部的的设备。 crash version: 8.0.2 gdb version: 10.2共51个命令。 1* files mod sbitmapq union 2alias foreach mount search vm 3ascii fuser net set vtop 4bpf gdb p sig waitq 5bt help ps struct whatis 6btop ipcs pte swap wr 7dev irq ptob sym q 8dis kmem ptov sys 9eval...
保证内核启动安全的几种方式 禁止修改cmdline 禁止修改根文件系统 使能内核地址空间布局随机化(KASLR)