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

uboot,内核,根文件系统的作用

复习了下uboot,内核,根文件系统,简单概括下三者的主要内容。

1 uboot

uboot的目的:启动内核。

uboot的功能可以分为两个阶段任务。

1.2.1 uboot第一阶段

uboot第一阶段主要负责硬件相关的初始化,主要在cpu/arm920t/start.S中:

  • 关闭看门狗
  • 初始化SDRAM
  • 设置栈
  • 设置时钟
  • 代码重定位(从flash拷贝到SDRAM中)
  • 调用start_armboot函数。

1.2.2 uboot第二阶段

第二阶段是在start_armboot这个C函数中做的,

  • norflash初始化和nandflash初始化
  • 然后main_loop等待输入的命令,在里面有一个s=getenv(bootcmd),然后在倒计时到达之前没有收到空格命令的话(假如我们在倒数记时的时候输入了空格,就会等待输入命令),就会执行run_command(s,0),这里的s就是bootcmd,也就是bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm ox30007FC0。这条命令的意思是,从nandflash上面的kernel分区把内核读到SDRAM的ox30007FC0地址,然后从这个地址启动。
  • 然后从flash上读出内核放入SDRAM中。
  • 设置启动参数:uboot源码中用getenv("bootargs")读取bootarg参数,bootargs就是类似bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,读出来之后放到一个tag地址那里,然后启动内核的时候会把这个tag地址传给启动函数,然后内核就可以去tag那里读到bootarg的那些环境变量。
  • 跳到入口地址启动内核。

2 内核

内核的目的:运行应用程序。

内核启动分两个阶段:

  • 第一阶段:主要是head.S,读取第二个参数看一下是否支持这个单板;
  • 第二阶段:主要是start_kernel,首先进行了各种初始化,然后处理uboot传过来的第三个参数,根据这个第二个参数初始化控制台以及挂接根文件系统,然后再init_post里面启动应用程序。

3 根文件系统

应用程序位于根文件系统上面,要想运行应用程序,我们还要构建根文件系统。

  • 启动第一个程序:内核在init_post里面启动应用程序,首先打开/dev/console(一般也就是串口),然后判断如果我们的命令行参数里面有“init=”,例如init=/linuxrc,那么就会启动这个程序,如果命令行中没有“init=”,那么就会启动/sbin/init, /etc/init, /bin/init/ /bin/sh这五个程序中的一个,所以一般来说我们内核启动的第一个应用程序是execute_command或者/sbin/init。
  • init进程分析:sbin/init应该会有一个配置文件,配置文件里面指定了后续要用哪些应用程序,然后init进程去解析配置文件,然后根据配置文件去执行程序。

http://www.lryc.cn/news/17030.html

相关文章:

  • Vue3通透教程【四】Vue3组合API初体验
  • coco数据集训练nanodet详细流程
  • 关于Kubernetes不兼容Docker
  • MySql_基础篇_从下载mysq到数据库操作
  • 当我尝试问了chatGPT几个问题之后,我感到了危机......
  • 如何生成全局唯一ID
  • 基于node vue的电商系统 mongodb express框架
  • 【03-JVM面试专题-JVM中你知道的类加载器有哪些?作用是什么?分别用来加载什么文件?什么内容的呢?】
  • 面试纪要FFFFF
  • gma 1.1.3 (2023.02.22) 更新日志
  • 现有安全技术
  • Qt QMAKE_MSC_VER
  • 如何通俗地理解原码、反码和补码
  • 在vite vue3 前端架构中,切换环境,切换项目的架构设计方案
  • 华为OD机试真题Python实现【跳格子】真题+解题思路+代码(20222023)
  • Python 入门之文件和异常处理
  • 操作系统作业
  • 【计算机网络 -- 期末复习】
  • 三、(补充)接口是对类的一部分行为的抽象
  • CIMCAI intellgent ship product applied by world top3 shipcompany
  • 媒体见面会怎么做?
  • Nginx面试题一步到位
  • 华为OD机试真题 用 C++ 实现 - 括号检查
  • Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】
  • Git 分支操作
  • 【面试题】TCP如何保证传输可靠性?TCP流量控制实现、拥塞控制、ARQ协议、停止等待ARQ、连续ARQ
  • MySQL一隐式转换
  • 风光并网对电网电能质量影响的matlab/simulink仿真建模
  • 浅谈Spring循环依赖
  • 华为OD机试题 - 拼接 URL(JavaScript)| 包含代码编写思路