title: u-boot(一)启动简介

tags: linux

date: 2018-09-21 19:56:05

u-boot(一)启动简介

启动概述

U-boot的终极目的,是从FLASH中读出内核,加载到SDRAM中

系统
Win BIOS 引导win 识别C盘等 运行应用程序
Linux Bootloader 引导启动linux内核 挂载根文件系统 运行应用程序

阶段一引导

这里包含芯片自身的引导,BIOS固件的引导,以及bootloader的引导,jz2440这里首先可能有4ksram的搬运,然后执行sram的程序,或者直接是Bootloader.所以Bootloader目的就是加载内核,传递内核参数

阶段二Linux内核

内核的启动参数分为固定参数和Bootloader传递参数.

阶段三文件系统

应用程序都是存放在文件系统上的,不像win的C盘D盘,linux的目录结构就是一个树形,树形的顶部也就是/,这个称之为根文件系统,根文件系统有一些特殊的含义,比如shell命令等都是在根文件系统中存放的.

文件系统包含了应用程序,以及库,和动态链接需要的glibc或者Uclibc等.

阶段四应用程序

跑到这里,就是我们自己的应用程序执行的时候了.

内部存储布局

常见的内部空间布局如下:

Bootloader Boot parameters Kernel Root filesystem
u-boot,它会在内存的某个地方存放着内核启动的一些参数,也称为tag u-boot 参数,包含传递给内核的一些东西 内核 根文件系统

Bootloader概述

一般情况下,Bootloader分为两个阶段,第一个阶段为汇编阶段,我理解为为C语言提供环境.第二个阶段就是C语言的阶段,实现复杂的功能.

  • 汇编阶段

    • 硬件初始化,比如关看门狗,设置时钟(这个也可以在C阶段)
    • 如果Bootloader需要在SDRAM中运行,则需要①sdram驱动②搬运代码到sdram
    • 设置C函数调用、运算所需要的栈(Sp)
  • C阶段
    • 初始化硬件设备
    • 内存映射,这里指的是检测内存有多大,告诉内核
    • 读取内核
    • 读取根文件系统,有些格式的根文件系统不需要复制到RAM
    • 设置启动参数,启动内核
  • 内核启动须知
    • 内核入口函数有三个参数,所以R0=0,R1=机器ID,R2=启动参数的内存地址
    • CPU处于SVC模式,禁止中断
    • Cache和MMU
      • MMU必须关闭
      • 指令cache不相关
      • 数据Cache关闭

内核启动参数 taggedlist

内核是这么读取参数的:

  1. 先判断是什么类型的参数,长度为多少
  2. 将读取指定长度的内容识别为该格式的参数

所以很自然的,内存单元的参数就是

size
tag
data

体验一下实际的Uboot

  1. 解压官方源码,注意这里是u-boot-1.1.6,不是u-boot-2012.04.01_100ask
  2. 使用补丁包
  3. 配置并编译
tar xjf u-boot-1.1.6.tar.bz2
cd u-boot-1.1.6/
patch -p1 <../u-boot-1.1.6_jz2440.patch #p1表示忽略应用位置第一个父目录,具体参考diff补丁格式
make 100ask24x0_config
make
  1. 烧录,oflash到nandflash或者norflash

  2. 备份下补丁文件(压缩文件包)

U-boot的使用帮助

  1. 使用命令q退出菜单,命令menu进入菜单

  2. 使用help查看所有命令

  3. 退出菜单后可以使用或者help+具体命令来查看帮助

  4. 使用print或者printenv来查看环境变量,使用set命令来设置环境变量,比如使用倒计时时间 set bootdelay 8,注意需要最后使用save来保存

U-boot基本要求

核心功能

  1. 需要有FLASH读取的能力,内核存储在FLASH
  2. 能够操作SDRAM,将读取到的内核加载到SDRAM

需要以下程序模块

  1. 初始化时钟,看门狗等其他基本操作
  2. 支持串口方便调试
  3. 读写FLASH
  4. 读写SDRAM
  5. 其他模块,比如网卡,USB等,支持内核烧写

u-boot(一)启动简介的更多相关文章

  1. Linux Kernel 0.12 启动简介,调试记录(Ubuntu1804, Bochs, gdb)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. spring boot无法启动,或者正常启动之后无法访问报404的解决办法

    以前用spring boot都是用idea的自动创建,或者是用的Jhipster创建的,就没有深究怎么去搭建.但是今天晚上心血来潮,想自己搭一个demo来整合一些技术,于是就花一点时间来手动搭.因为今 ...

  3. spring boot容器启动详解

    目录 一.前言 二.容器启动 三.总结 =======正文分割线====== 一.前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是约定大于配置,但是原理呢?为 ...

  4. 让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean

    让Spring Boot项目启动时可以根据自定义配置决定初始化哪些Bean 问题描述 实现思路 思路一 [不符合要求] 思路二[满足要求] 思路三[未试验] 问题描述 目前我工作环境下,后端主要的框架 ...

  5. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  6. Spring boot自定义启动字符画(banner)

    spring boot项目启动时会打印spring boot的ANSI字符画,可以进行自定义. 如何自定义 实现方式非常简单,我们只需要在Spring Boot工程的/src/main/resourc ...

  7. spring boot 项目启动无任何反应

    遇到的问题 spring boot项目启动后无任何报错,ps有进程,nohub无日志 定位 更换jar包,问题依然存在,将jar包放到其他服务器,运行正常,排除打包问题 同服务器其他系统运行正常,但停 ...

  8. Spring Boot定制启动图案

    启动图案 Spring Boot在启动的时候会显示一个默认的Spring的图案,对应的类为SpringBootBanner. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_) ...

  9. Spring Boot 设置启动时banner

    Spring Boot项目再启动的时候默认会在控制台输出一个字符banner图案,如下图: 我们可以通过下面的方法关闭启动时显示字符banner图案: 关闭banner方法一: public stat ...

随机推荐

  1. 一、Java多人博客系统-开篇

    作为一个程序员,工作之外的不断学习是必须的.这个项目是我个人课外学习和练手的项目.最开始是一个个人网站.当时发现京东云可以免费部署网站的,就立即写了一个网站,当时就使用jsp技术,可以实现发布博客.评 ...

  2. Codeforces 798D Mike and distribution

    题目链接 题目大意 给定两个序列a,b,要求找到不多于个下标,使得对于a,b这些下标所对应数的2倍大于所有数之和. N<=100000,所有输入大于0,保证有解. 因为明确的暗示,所以一定找个. ...

  3. Gedit浏览器常用快捷键备注

    此处只记录常用的,而通常意义上的应知应会不做汇总 搜索 : Ctrl +F : 查找字符串 Ctrl + G : 查找字符串的下一实例 Ctrl + Shift + G : 查找字符串的前一实例 Ct ...

  4. kubernetes 利用label标签来绑定到特定node运行pod

    利用label标签来绑定到特定node运行pod: 不如将有大量I/O的pod部署到配置了ssd的node上或者需要使用GPU的pod部署到某些安装了GPU的节点上 查看节点的标签: kubectl ...

  5. 微信小程序——引入背景图片【六】

    前言 之前写了一些小程序的博文只是看文档边看边写,了解下他,这次可是真枪真刀的做了! 框架使用的是美团的mpvue,我也是一边学习,一边写的,如有错误之处,还望大家指出. 在这里我有个问题,为什么微信 ...

  6. P1035 调和级数

    两种解法如下: 1.模拟 这种做法的思路是枚举n从1开始,直到Sn>k结束,只需要一个循环即可实现. 代码: #include<cstdio> int main() { ; scan ...

  7. python+appium里的等待时间

    为什么要用等待时间: 今天在写App的自动化的脚本时发现一个元素,时而能点击,时而又不能点击到,很是心塞,原因是:因为元素还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了.解决方式:可以 ...

  8. 【BZOJ1580】【USACO2009Hol】杀手游戏 计算几何

    题目描述 一个平面上有很多个点在运动.给你每个点的初始坐标和每个点的速度,求出最多有多少个点到\(0\)号店的距离同时不超过\(r\). \(n\leq 50000\) 题解 我们先把\(0\)号点平 ...

  9. 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)

    学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新. 区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想: 就是在数据结构中,树形结构可以线性存储(线性表 ...

  10. dbForge Studio for MySQL V8.0 Enterprise

    上篇文章:JetBrains全家桶破解思路(最新更新:2018-12-24) 最适合从SQLServer转向MySQL的人使用(用起来基本上差不多) 最适合Net开发人员的MySQL IDE (不装V ...