大壮嘎嘎壮

  • 2025-01-20
  • 加入了学习《自己动手写嵌入式操作系统》,观看 自己动手写操作系统

  • 2025-01-19
  • 发表了主题帖: 《Linux内核深度解析》初见 - 第一章 内核引导和初始化

    本帖最后由 大壮嘎嘎壮 于 2025-1-19 17:26 编辑 .globl   _start _start:     岁聿云暮,一元复始,最近终于得空抽出时间来阅读这本《Linux内核深度解析》。     一、Boot阶段     在嵌入式系统中,BOOT(引导加载程序)扮演着至关重要的角色,它负责初始化硬件、加载操作系统内核或其他应用程序,并为系统的正常运行做好准备。     本文介绍的是嵌入式设备常用的U-Boot引导程序,U-Boot分为SPL和正常的U-Boot程序两部分。SPL(Secondary Program Loader)意为第二段程序加载器,明明作为引导程序首先出场的角色为什么要叫第二段呢,这个第二段是相对于固化在芯片内部的bootrom来说的。处理器启动时首先执行的是芯片内部固化的程序,固化程序加载SPL,SPL加载正常的U-Boot程序。由于芯片内部寸土寸金,片上内存比较小,所以才采用这种方式进行初始化内存和储存设备及一些外设,为内核的加载或者固件的更新下载做准备。Uboot最后调用boot_Jump_linux函数,跳转到linux内核。至此,uboot使命结束,CPU控制权交给内核。                                                                                                                                        二、Kernel阶段     1.初始化     内核初始化分为汇编语言和C语言部分。     汇编语言中主要执行了以下几个函数进行了一些基本的初始化流程:         (1)el2-setup:配置执行内核的异常级别。         (2)__create_page_tables:页表映射         (3)__primary_switch:开MMU         (4)__primary_switched:栈、异常向量表。数据段等初始化,调用start_kernel函数     内核初始化的C语言的入口函数是start_kernel函数,start_kernel函数的主要职责如下:         (1)设置页表和内存管理:             初始化页表,确保内核能够正确地管理内存。设置内存管理单元(MMU)的配置。         (2)初始化硬件:             初始化处理器和硬件架构相关的设置。设置中断和异常处理。         (3)内核数据结构初始化:             初始化各种内核数据结构,如调度器、进程控制块(task_struct)、内存管理等。         (4)设备驱动初始化:             初始化设备驱动框架,为内核支持的设备做好准备。         (5)文件系统初始化:             初始化虚拟文件系统(VFS)和根文件系统。         (6)启动内核线程:             启动内核守护进程和必要的内核线程,如 kswapd(内存回收守护进程)、kworker(工作线程)等。         (7)用户空间启动:             挂载根文件系统。启动第一个用户空间进程(通常是 init 进程)。     2.init进程     init进程是用户空间的第一个进程,主要有以下作用:     (1)启动系统服务:         init进程负责启动各种系统服务,如网络服务、打印服务等。这些服务通常通过运行级别(run levels)来管理,不同的运行级别对应不同的系统状态和服务组合。     (2)管理用户登录:         init进程还负责启动getty进程,用于用户登录。在系统完全启动后,init会为每个用户已退出的终端重启getty,以便下一个用户可以登录。     (3)处理孤儿进程:         当一个进程启动了一个子进程并且在子进程之前终止时,这个子进程会成为孤儿进程。init进程会接管这些孤儿进程,确保它们不会成为僵尸进程(zombie process)。     (4)系统初始化:         init进程还承担挂载文件系统、初始化属性系统和Klog、selinux的初始化等重要任务。它通过解析init.rc脚本来初始化系统daemon服务进程。

  • 2024-12-11
  • 回复了主题帖: 读书入围名单: 《Linux内核深度解析》

    确认,可以完成阅读分享计划

  • 2024-11-28
  • 加入了学习《基于Arduino玩转pico RP2040》,观看 基于Arduino玩转pico RP2040

最近访客

  • nmg

    昨天 19:18

< 1/1 >

统计信息

已有5人来访过

  • 芯积分:19
  • 好友:--
  • 主题:1
  • 回复:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言