uboot,内核,根文件系统的启动过程

2023-05-16

复习了下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进程去解析配置文件,然后根据配置文件去执行程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uboot,内核,根文件系统的启动过程 的相关文章

  • petalinux uboot源码在哪的问题

    petalinux uboot源码在哪的问题 提出问题解决问题注意 xff1a 要知道自己的版本 1 uboot2 kernel 提出问题 petalinux 源码目录存放在哪里的问题 xff0c 也就是petalinux工程的uboot和
  • petalinux uboot源码怎么打补丁

    petalinux的源码 petalinux工程对于我来说 xff0c 就是有一点不能直接起修改源码 xff0c 你需要间接的修改源码的内容 xff1f 这个修改你还需要遵从petalinux的规章流程 当你不知道的时候你会感到无从下手 x
  • uboot移植Linux-SD驱动代码解析

    一 uboot与linux驱动 1 1 uboot本身是裸机程序 1 狭义的驱动概念是指 xff1a 操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指 xff1a 凡是操控硬件的代码都叫驱动 2 裸机程序中是直接使用寄存器的物理地
  • U-Boot常用命令

    U Boot常用命令 一 信息查询命令 1 查看开发板信息 bdinfo 2 查看环境变量信息 printenv 3 查看U Boot版本号 version 二 环境变量操作命令 1 修改环境变量 setenv 2 保存环境变量 savee
  • linux文件系统初始化过程(2)---挂载rootfs文件系统

    一 目的 本文主要讲述linux3 10文件系统初始化过程的第一阶段 挂载rootfs文件系统 rootfs是基于内存的文件系统 所有操作都在内存中完成 也没有实际的存储设备 所以不需要设备驱动程序的参与 基于以上原因 linux在启动阶段
  • 紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net qq 29729577 article details 51130209 此文章基于U Boot 2014 04版本 烧写工具为mfgtool 开发
  • uboot中printf( )函数实现分析

    1 前言 这部分涉及uboot中串口的初始化 参考博客 uboot中串口 控制台 初始化详解 2 printf 函数实现思路分析 1 uboot中的printf 函数的用法和利用C库编写C语言程序时是一样的 本身uboot中printf 函
  • bootloader 详细介绍

    Bootloader 对于计算机系统来说 从开机上电到操作系统启动需要一个引导过程 嵌入式Linux系统同样离不开引导程序 这个引导程序就叫作Bootloader 6 1 1 Bootloader介绍 Bootloader是在操作系统运行之
  • uboot启动第一阶段详解——汇编代码部分start.S

    前言 uboot启动第一阶段是用汇编语言实现的 大部分都是Soc内部的初始化 可以理解成一些通用的初始化 只要使用该款Soc 第一阶段的初始化流程基本是一样的 不直接用C语言进行初始化是因为 C语言运行需要一定的环境 比如栈的设置 而汇编代
  • 23. 基于Cortex-A9 uboot代码启动分析

    本篇文章是彭老师第一次在B站直播间 边直播边记录笔记 视频已经上传到B站 现在完善整理成该篇文章 有想学习uboot启动的代码详细流程的老铁可以进入我B站空间配合视频一起学习 视频地址 B站用户名 一口Linux 目录 前言 一 uboot
  • linux的进程1:rootfs与linuxrc

    在内核启动的最后阶段启动了三个进程 进程0 进程0其实就是刚才讲过的idle进程 叫空闲进程 也就是死循环 进程1 kernel init函数就是进程1 这个进程被称为init进程 进程2 kthreadd函数就是进程2 这个进程是linu
  • uboot以tag方式给内核传参

    1 tag方式传参 1 struct tag tag是一个数据结构 在uboot和linux kernel中都有定义tag数据机构 而且定义是一样的 2 tag header和tag xxx tag header中有这个tag的size和类
  • linux rootfs制作

    作一个嵌入式Linux rootfs 并且实现 web 服务 1 文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来 且不需要运行用户进程的话 是不需要文件系统的 文件系统简单的说就是一种目录结构 由于 linux操作系统的设备在系统
  • Linux下uboot编译出错(/bin/bash: arm-none-linux-gnueabi-gcc: command not found )

    unboot压缩包解压 tar xz 在终端进入解压目录 xz d tar xz tar xvf tar 向Makefile添加编译路径 在makefile的开头添加本机的编译路径 ARCH arm CROSS COMPILE opt fs
  • Linux编译 |入口点无效

    我正在编译一个linux内核使用 mipsel 工具链 一切工作正常 除了最后一点指出无效的入口点 sh 0 Can t open arch mips boot tools entry rm f arch mips boot vmlinux
  • 如何从 U-Boot 启动裸板二进制文件?

    我们如何从 U Boot 启动独立的裸板二进制文件 不是使用 U Boot 环境运行的独立二进制文件 而不是 Linux 内核 我的要求是使用我的二进制文件重新初始化主板和驱动程序 我可以用我的二进制文件替换启动介质 此处为 NOR 闪存
  • Yocto 添加自定义 UBoot 环境变量

    我正在尝试通过 Yocto 构建过程添加两个新的 u boot 环境变量 My file u boot imx 2021 04 bbappend包含 FILESEXTRAPATHS prepend THISDIR PN SRC URI fi
  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin

随机推荐

  • 网络ip段计算,网络地址计算,广播地址计算,主机号计算规则

    ip网段格式 一个ip段的范围通常是从网络地址 广播地址 xff0c 一般去除网络地址和广播地址后的范围就是一个可用的ip段 xff0c 也就是网络地址 43 1 至 广播地址 1 怎么计算ip的网络地址 xff1f 计算规则 使用ip的二
  • Windows使用Media Foundation采集摄像头数据

    文章目录 前言一 头文件二 MF对象三 示例总结 前言 在Windows上采集摄像头的数据的方法有几种 xff0c vfw directshow mf vfw过于老旧 xff0c directshow使用比较复杂 xff0c mf就是今天要
  • 第一篇:践履实录2006-2013

    2006年研究生毕业 xff0c 应聘到一家创办一年半左右的IC Startup公司从事Windows驱动软件的开发工作 xff0e 我们驱动组 xff08 我和我的师傅两个人 xff09 所面对的是一个全新项目 xff0c Microso
  • 51单片机DHT11温湿度传感器

    DHT11是一款有已校准数字信号输出的温湿度传感器 精度湿度 43 5 RH xff0c 温度 43 2 xff0c 量程湿度20 90 RH xff0c 温度0 50 一 电路连接分析 1 引脚图 2 接线图 DHT11 器件采用简化的单
  • 使用pytorch分布式进行训练的时候发生的错误

    在进行分布式训练的时候遇到这个错 xff0c 不知道怎么解决 xff0c 先记录一下 Traceback span class token punctuation span most recent call last span class
  • Linux驱动开发基础_在设备树中指定中断以及在代码中获得中断

    目录 1 设备树里中断节点的语法 1 1 设备树里的中断控制器 1 2 设备树里使用中断 2 设备树里中断节点的示例 3 在代码中获得中断 3 1 对于 platform device 3 2 对于 I2C 设备 SPI 设备 3 3 调用
  • Linux驱动开发基础__休眠与唤醒

    目录 1 适用场景 2 内核函数 2 1 休眠函数 2 2 唤醒函数 3 驱动框架 4 编程 4 1 gpio key drv c 4 2 button test c 4 3 Makefile 1 适用场景 在前面引入中断时 xff0c 我
  • Hive ddl语法使用详解

    一 前言 使用过关系型数据库mysql的同学对mysql的ddl语法应该不陌生 xff0c 使用ddl语言来创建数据库中的表 索引 视图 存储过程 触发器等 xff0c hive中也提供了类似ddl的语法 本篇将详细讲述hive中ddl的使
  • Linux驱动开发基础__POLL机制

    目录 1 适用场景 2 POLL机制的内核代码详解 2 1 sys poll 函数 2 2 do sys poll 函数 2 3 do poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6 1 gpio key
  • Linux驱动开发基础__异步通知

    目录 1 适用场景 2 使用流程 3 驱动编程 4 应用编程 5 代码 5 1 gpio key drv c 5 2 button test c 5 3 Makefile 6 异步通知机制内核代码详解 1 适用场景 在前面引入中断时 xff
  • Linux驱动开发基础__阻塞与非阻塞

    目录 1 引入 2 应用编程 3 驱动编程 4 代码 4 1 gpio key drv c 4 2 button test c 1 引入 所谓阻塞 xff0c 就是等待某件事情发生 比如调用 read 读取按键时 xff0c 如果没有按键数
  • Linux驱动开发基础__定时器

    目录 1 内核函数 2 定时器时间单位 3 使用定时器处理按键抖动 4 编程 4 1 gpio key drv c 4 2 button test c 4 3 Makefile 1 内核函数 所谓定时器 xff0c 就是闹钟 xff0c 时
  • Linux驱动开发基础__中断下半部tasklet

    目录 1 引入 2 内核函数 2 1 定义tasklet 2 2 使能 禁止 tasklet 2 3 调度tasklet 2 4 kill tasklet 3 tasklet 使用方法 4 tasklet 内部机制 5 代码 5 1 gpi
  • Linux驱动开发基础__工作队列

    目录 1 引入 2 内核函数 2 1 定义work 2 2 使用 work xff1a schedule work 2 3 其他函数 3 代码 3 1 gpio key drv c 3 2 button test c 4 内部机制 4 1
  • Linux驱动开发基础__中断的线程化处理

    目录 1 引入 2 内核机制 2 1 调用 request threaded irq 后内核的数据结构 2 2 request threaded irq 2 3 中断的执行过程 1 引入 复杂 耗时的事情 xff0c 尽量使用内核线程来处理
  • Linux驱动开发基础__mmap

    目录 1 引入 2 内存映射现象与数据结构 3 ARM 架构内存映射简介 3 1 一级页表映射过程 3 2 二级页表映射过程 4 怎么给 APP 新建一块内存映射 4 1 mmap 调用过程 编辑4 2 cache 和 buffer 4 3
  • 利用python批量下载百度图片

    某项目中需要训练高速火灾算法 但是手头没有数据集 因此需要利用python从网上下载图片 代码如下 coding utf8 import requests import json from urllib import parse impor
  • python将标注平台的数据格式转换成yolov5的txt格式

    标注平台得到的数据格式如下 annotation object bndbox xmax 1917 xmin 9 ymax 1037 ymin 474 groupid name 轻度雾气 size height 1080 width 1920
  • linux vnc常见命令

    linux vnc virtual network computing 1 新建一个vncserver xff1a 直接输入vncserver即可 xff0c 系统将从1开始计算桌面数 xff0c 当然也可以指定桌面的编号 xff0c 如
  • uboot,内核,根文件系统的启动过程

    复习了下uboot xff0c 内核 xff0c 根文件系统 xff0c 简单概括下三者的主要内容 1 uboot uboot的目的 xff1a 启动内核 uboot的功能可以分为两个阶段任务 1 2 1 uboot第一阶段 uboot第一