菜单

作者:kaoqi

论init_mm

init_mm是内核早期用来进行内存管理的一种工具结构,内部集成了页表结构本身、内存的一部分权限描述、锁还有一些其他的不疼不痒的数据辅助结构。总的来讲,init_mm是一个在gcc和lds阶段声明的静态的数据结构,它在加载到内存后,最主要的作用就是完成物理内存到虚拟内存的静态映射的。 init_mm

kaoqi 发布于 2026-09-23

WSL下编译PHYkernel

1、首先需要下载kernel并准备环境: 下载kernel git clone https://gitee.com/phytium_embedded/phytium-linux-kernel.git 准备环境 sudo apt-get install build-essential libncurs

kaoqi 发布于 2026-09-23

再论kernel的PER-CPU

之前的文章讨论过,DEFINE_PER_CPU这个宏展开实际上是下面这个东西:/include/linux/percpu-defs.h #define __PCPU_ATTRS(sec) \ __percpu __attribute__((section(

kaoqi 发布于 2026-09-22

kernel的第6个函数展开

从这个函数开始,boot_cpu_init,开始正式初始化CPU。 这是一个位于/kernel/cpu.c处展开的函数: void __init boot_cpu_init(void) { int cpu = smp_processor_id(); /* Mark the boot cpu "

kaoqi 发布于 2026-09-22

kernel的Per-CPU机制

随着kernel的展开,发现不讲清楚kernel在不同CPU上的逻辑结构不行,所以需要再次专门讨论Per-CPU机制。 Per-CPU的核心目的是为每个逻辑CPU提供一份独立的数据副本,从而避免多核竞争带来的锁开销,并提高缓存局部性。简单的讲,就是同样的一份C代码,被不同的CPU加载运行时,可以由P

kaoqi 发布于 2026-09-22

kernel的第5个函数的展开

local_irq_disable函数其实是一个保险函数,具体含义为再执行依次CPU的中断关闭操作,给后续真正启动cpu的初始化铺路。 这个函数的展开位于/include/linux/irqflags.h文件中: #define local_irq_disable() \ do {

kaoqi 发布于 2026-09-21

kernel第4个函数展开

第四个函数cgroup_init_early();的实现是在/kernel/cgroup/cgroup.c int __init cgroup_init_early(void) { static struct cgroup_fs_context __initdata ctx; struct cg

kaoqi 发布于 2026-09-21

kernel第3个函数展开

第三个函数是debug_objects_early_init,其定义在/lib/debugobjects.c文件中: void __init debug_objects_early_init(void) { int i; for (i = 0; i < ODEBUG_HASH_SIZE; i+

kaoqi 发布于 2026-09-20

kernel第2个函数第2段展开

具体来说就是smp_setup_processor_id函数中如下几个部分: set_cpu_logical_map(0, mpidr);设置CPU逻辑地图数组变量。 set_my_cpu_offset(0);设置Per-CPU变量。 pr_info打印相关信息 建立CPU逻辑地图 所谓的CPU逻辑

kaoqi 发布于 2026-09-20

kernel第2个函数第1段

smp_setup_processor_id是kernel的第2个函数,其主要作用是: 读取CPU寄存器中唯一标识符MPIDR_EL1 建立逻辑与物理CPU的映射关系 初始化Per-CPU偏移量 输出启动信息 这个函数的具体实例化在/arch/arm64/kernel/setup.h: void _

kaoqi 发布于 2026-09-20
上一页 下一页