嵌入式面经-linux系统移植

  • Boot loader、Linux内核、根文件系统之间的关系是怎样的

    • Boot loader:引导加载程序、位于计算机固件和操作系统之间的软件,负责在计算机启动时加载并执行操作系统。其首先会进行硬件初始化,并接管计算机的控制权。然后,它会加载Linux内核到内存中。

    • Linux内核:是操作系统的核心部分,它负责管理计算机的硬件资源和提供各种系统服务。一旦被Boot loader加载到内存中,Linux内核就开始执行,并完成一系列初始化工作,如设置进程调度器、初始化设备驱动程序等。同时,内核还会检测并挂载根文件系统

    • 根文件系统:是Linux操作系统的基本目录结构,包含了所有其他文件和目录。它通常存储在磁盘上,并通过挂载与操作系统关联起来。

    • 在Linux启动过程中,Boot loader首先将Linux内核加载到内存中,并将控制权转交给内核。然后,Linux内核进行初始化,并挂载根文件系统,使得操作系统可以通过根文件系统访问和管理文件。这样,整个Linux系统就能够顺利启动并正常运行

  • Bootloader的启动过程分为哪两个阶段

    • 引导加载程序阶段:在计算机启动时,固件将控制权交给引导加载程序。引导加载程序位于固件和操作系统之间,负责初始化硬件、加载并执行操作系统的内核。在这个阶段,引导加载程序会进行以下步骤

      • 初始化硬件设备:包括处理器、内存等硬件的设置和检测

      • 选择操作系统

      • 加载内核映像:从磁盘上读取Linux内核镜像文件,并将其加载到内存中

      • 设置内核参数:为了正确启动内核,引导加载程序可能需要设置一些参数

    • 内核引导阶段:一旦引导加载程序将内核加载到内存中,它会跳转到内核的入口点并将控制权交给内核。在这个阶段,Linux内核开始执行,并完成以下任务

      • 初始化系统资源:初始化各种设备驱动程序、建立进程调度器等

      • 挂载根文件系统:查找并挂载根文件系统作为整个操作系统的起点

      • 启动init进程:启动init进程,它是用户空间的第一个进程

  • linux内核的启动过程

    • 引导加载程序(Bootloader):计算机加电后,BIOS会将控制权交给引导加载程序(如uboot)。引导加载程序从磁盘上读取内核映像到内存中的指定位置

    • 启动汇编代码:引导加载程序在将控制权交给内核前,通常会执行一些必要的设置和初始化操作。然后,它跳转到汇编代码入口点

    • C语言入口:汇编代码的入口点会调用C语言函数 start_kernel()。该函数位于 init/main.c 文件中,并负责进一步初始化内核数据结构、硬件设备、中断处理等

    • 内核初始化:start_kernel() 函数完成基本的系统初始化工作,包括设置页表、初始化进程管理、驱动模块和文件系统等

    • 平台相关初始化:根据具体平台的不同,Linux内核还会进行平台相关的初始化。例如,处理器架构相关的代码可能需要设置缓存、中断控制器和时钟等

    • 创建第一个用户进程:经过前面的初始化阶段后,Linux内核最终会创建第一个用户进程(init进程),并将控制权转移给它。这样,在用户空间中的应用程序可以开始执行

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值