1. Bootloader作用

PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。

简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如,S3C2410在复位后从地址0x00000000起开始执行。而嵌入式系统则将固态存储设备(比如:FLASH)安排在这个地址上,而bootloader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行BootLoader程序。

2. Bootloader 移植

每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader 还依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,外设芯片的类型等。这也就是说,对于两块不同的开发板而言,即使它们是基于同一种CPU而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的BootLoader程序也能在另一块板子上运行,还是需要作修改。

3. 移植流程

BootLoader 的启动过程可分为单阶段(Single-Stage)和多阶段(Multi-Stage)两种。

BootLoader 大多采用两阶段,即启动过程可以分为 stage1和 stage2:stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2。

Stage1:(汇编编写)

·硬件设备初始化(主要是CPU内部器件)
     ·为加载 BootLoader 的 stage2 准备 RAM 空间
     ·拷贝 BootLoader 的 stage2 到 RAM 空间中
     ·设置好堆栈(why??)  
     ·跳转到 stage2 的 C 入口点

Stage2:(C编写)

·初始化本阶段要使用到的硬件设备(主要是外设)
    ·将内核映像和根文件系统映像从 flash 上读到RAM 中
    ·调用内核

4. Uboot介绍

下载地址: ftp://ftp.denx.de/pub/u-boot/

文件目录介绍

5. Uboot编译

1. make mini6410_nand_config-ram256

2. make CROSS_COMPILE=arm-linux-

详解:

mini6410_nand_config-ram256 :  unconfig
@$(MKCONFIG) mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256

实际运行的是 ./mkconfig mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256 (8个参数)

查看mkconfig源码(实际为shell脚本), 配置成功后 在 ../include/  下生成config.mk 和 config.h 为编译时使用。

编译注意两步 :

a. 连接地址 ../board/samsung/mini6410/u-boot.lds(链接文件)   +   config.mk 里面的偏移地址(根据flash大小定地址)TEXT_BASE = 0xc7e00000

b. ../cpu/s3c64xx/start.S

命令实现: ../common/main.c   目录../common/ 有各种命令实现源码。。。

u-boot终极目的就是启动内核 。。。。分两步

a. 从flash读出内核UImage, 分区名不重要, 关键是代码中写死的 分区起始地址。。。

b. 启动内核, do_bootm_linux

do_bootm_linux又分两步,设置启动参数,告诉内核一些参数(有一个起始地址,按固定格式写入),跳到内核入口地址再启动内核,内核启动后要读取设置的参数可以从起始地址读取。。。

Linux嵌入式 -- Bootloader , Uboot相关推荐

  1. 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)

    知识架构及层次 Linux内核由三部分构成: Bootloader:启动引导系统(可执行文件) Kernel:内核(可执行文件) Root File System:根文件系统 嵌入式Linux系统构成 ...

  2. 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)

    前言: 最近在学习正点原子嵌入式Linux开发板uboot的移植实验,移植完之后想测试网络部分的驱动能否工作正常.最后经过测试发现tftp可以正常下载,nfs却一直报错无法下载文件,最后也是折磨了两天 ...

  3. 嵌入式BootLoader技术内幕

    嵌入式BootLoader技术内幕(一) 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软 件设计的主要任务以及结构框架等内容. 一.引言 在专用的嵌入 ...

  4. linux嵌入式在线升级,嵌入式linux Kernel 在线升级参考资料

    author:DriverMonkey phone:13410905075 qq:196568501 mail:bookworepeng@hotmail.com 承接:嵌入式外包项目(13410905 ...

  5. [架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法、常用命令

    目录 第1章 uboot简介 1.1 uboot与Linux的关系 1.2 bootloader的类型 1.3 uboot的主要版本 1.4 uboot的作用与功能 1.5 SoC支持的启动方式 第2 ...

  6. 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)

    接上部分---->嵌入式之uboot源码分析-启动第二阶段学习笔记(上篇) 注:如下内容来自朱老师物联网大讲堂uboot课件 3.2.14 CFG_NO_FLASH (1)虽然NandFlash ...

  7. Linux嵌入式学习过程

    Linux嵌入式学习过程 循序渐进学习嵌入式开发技术 一.练好基本功 二.嵌入式Linux应用开发 误区一.全身投入学习桌面或服务器版本linux系统 误区二.直接阅读linux内核源代码 如何正确的 ...

  8. 09 编译2022年最新的Linux kernel、U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行

    编译2022年最新的Linux kernel.U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行 作者 将狼才鲸 创建日期 2022-11-26 Gitee源码和工程地址:才鲸嵌入 ...

  9. Linux嵌入式环境搭建

    Linux嵌入式环境搭建 ​ 自从在记不清的某一年的时候,就有幸在一位老师(这位老师当然很厉害的咯)的手中见过一次树莓派,当时看到了树莓派的可玩性.一直想着去玩玩Linux嵌入这方面的滴,但一直没有机 ...

最新文章

  1. 熬夜与不熬夜,10年后差距到底有多大?惊了!
  2. EduCoder Linux文件/目录高级管理二
  3. 动态规划求解0-1背包
  4. P5437-[XR-2]约定【拉格朗日差值,数学期望】
  5. IntelliJ IDEA for Mac下载、安装、使用TunnelliJ插件(一种TCP/IP Monitor)
  6. 【LeetCode笔记】2. 两数相加(JAVA、链表)
  7. javascript 常用的一些事件和应用
  8. slf4j + log4j2配置日志引擎
  9. anaconda3环境整体打包放在Spark集群上运行
  10. access数据库窗体设计实验报告_Access2010实验报告
  11. 【重磅整理】180篇NIPS-2020顶会《强化学习领域》Accept论文大全
  12. 抖音短视频去水印网址 视频消重后,火山还是鉴别出来了
  13. 四大学术牛人教你如何阅读外国文献
  14. 【Bugs】Hbase:File system needs to be upgraded. You have version null and I want version(habse缓冲问题)
  15. Hibernate个版本下载地址
  16. 如何使用QQ邮箱账号发送加密邮件
  17. 乔布斯2005的演讲
  18. 激光雷达与毫米波雷达的区别
  19. 关于前端页面展示图片展示时改变方向的解决办法
  20. 数据库事务隔离标准分析

热门文章

  1. [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
  2. BootstrapTable(附源码) Bootstrap结合BootstrapTable的使用,分为两种模试显示列表。...
  3. 关于Java空指针的控制(转)
  4. 01.WPF中制作无边框窗体
  5. linux下,ssh服务安装和法git简单的使用方,整理实测。
  6. 12款优秀的 JavaScript 日历和时间选择控件
  7. 精通CSS+DIV网页样式与布局——CSS文字效果
  8. Redis 4.x/5.x未授权访问漏洞
  9. 【数据结构与算法】之深入解析“石子游戏VIII”的求解思路与算法示例
  10. 深度学习——02、深度学习入门 15-18