当前位置: 首页 > news >正文

LINUX进程管理之进程管理初始化

基于 RK3588 (ARM64)+Linux5.15 进程管理初始化逐函数逐行源码级精讲
前置环境:
芯片:RK3588(ARM64,8 核 SMP:4xA76+4xA55)
内核版本:Linux 5.15(RK 官方 SDK 内核)
启动链:ATF (BL31)→U-Boot→Image→stext→start_kernel
核心对象:0 号 init_task、init_mm、调度器、1 号 / 2 号进程
约定:只保留核心源码,剔除冗余调试 / 宏,每行必解释,串联 RK3588 硬件特性
一、前置:内核入口 汇编阶段(ARCH 初始化,为进程管理铺路)

  1. arch/arm64/kernel/head.S 内核真正入口
// 1. 关闭Cache、MMU,重置寄存器adrp x0,_text add x0,x0,:lo12:_text bl __cpu_setup// RK3588配置A76/A55内核EL1特权模式// 2. 搭建最早内核页表 swapper_pg_dir(绑定init_mm)bl create_idmap// 建立恒等映射bl create_pgd_mapping// 映射DDR、RK3588外设寄存器(GMAC/NPU/MMU)// 3. 开启MMU,跳C语言ldr x1,=_start br x1

解释:
此时还没有进程,只有裸核执行流;
swapper_pg_dir 是 init_mm 的底层页表,后续所有内核进程共享;
RK3588 大小核都要走这套 EL1 初始化流程。

二、C 语言总入口:start_kernel () 全程拆解
文件:init/main.c

asmlinkage __visiblevoid__initstart_kernel(void){//===== 1. 基础架构/内存初始化(进程依赖前提)=====set_task_stack_end_magic(&init_task);// 给0号进程栈设置栈底魔数,栈溢出检测,绑定init_task静态栈smp_setup_processor_id();// RK3588 SMP多核ID初始化,区分A76/A55核心编号cgroup_init_early();// 早期cgroup,后续进程资源限制(NPU/GPU算力划分依赖)local_irq_disable();// 关中断:初始化阶段禁止中断抢占,防止流程乱套boot_cpu_init();// 标记当前为主核(CPU0,RK3588默认A76主核启动)//===== 2. 内存管理初始化(直接关联init_mm)=====page_address_init();// 初始化物理页与虚拟页映射池,为task_struct分配做准备pr_notice("%s",linux_banner);// 打印内核版本串口log(RK3588开机串口必看)setup_arch(&command_line);// ★ARM64架构核心:解析设备树DTS、映射RK3588 DDR/寄存器// 最终固化 swapper_pg_dir → 挂入 init_mm.pgdmm_init();// 初始化内存SLUB池,准备分配task_struct/mm_struct//===== 3. 【进程管理核心初始化 正式开始】=====fork_init
http://www.jsqmd.com/news/610631/

相关文章:

  • 告别root权限烦恼:在Ubuntu 22.04上无sudo安装OpenFHE全同态加密库
  • ESP32嵌入式持久化环形缓冲区LFRing设计与应用
  • 如何快速掌握暗黑3智能宏:5大技巧打造终极自动化助手
  • 避坑指南:在Ubuntu 20.04 + ROS Noetic上搞定cam_lidar_calibration(含Anaconda环境冲突解决)
  • 智枢获客系统正式发布 以智能化采集与整理能力助力企业高效拓客
  • 尚硅谷2025最新SpringCloud速通-实战避坑指南
  • 嵌入式LCD驱动架构设计与优化实践
  • 分布式锁为什么经常用错?一次讲清 setnx、锁续期、误删锁与 Redisson 实战
  • 数据隐私工程:PII 识别、脱敏、最小留存与访问控制的组合方案
  • Linux C线程池实现与性能优化指南
  • WINUI3新手避坑指南:从安装到运行第一个C#桌面应用(Win10/Win11通用)
  • 告别编译噩梦:用Rider调试UE5.2源码前的必备环境检查清单
  • RFTransmitter库:433MHz OOK发射的轻量级前向纠错实现
  • 别再死记硬背了!用这两个工业相机选型实战题,手把手教你搞定面试和项目
  • **发散创新:基于Python的提示注入防御机制实战解析**在当前大模型广泛应用的时代,
  • 轻量服务器镜像导出避坑指南:为什么你的共享镜像无法导出?
  • 医疗诊断Agent辅助:AI医生的现实与未来
  • 从斐波那契到链表:在Linux虚拟机里玩转CSAPP Lab2的六个汇编关卡
  • CANoe AutoSequence实战:手把手教你配置Visual Sequence实现周期报文发送与条件触发
  • 别再只用DWA了!ROS Melodic下TEB、DWB等5种局部规划器保姆级配置与实战对比
  • 阿里架构调整:李飞飞任阿里云CTO 雷雁群任淘宝闪购CEO
  • Codesys可视化实战:从静态显示到双向交互的数据控件
  • 周红伟:OpenClaw新手指南:理解workspace和如何轻松安装skills
  • 淘天面试必考:Agent记忆机制保姆级教程(非常详细),看这篇就够了!
  • 告别ArcGIS!用Excel+地理探测器(GeoDetector)搞定空间因子分析,保姆级教程
  • Span<T>不是语法糖!透过CoreCLR源码看JIT如何为ref struct生成特殊栈帧——稀缺的底层机制白皮书
  • uView Popup组件实战:如何精准控制底部弹窗高度(附z-index避坑指南)
  • 从“流量”到“信任”:中小品牌出海的深层困境与系统性破局
  • 串口与网络调试助手:工控与网络开发的双重利器
  • CPPTasks:嵌入式C++11轻量协程与状态机框架