uboot

嵌入式Linux学习笔记

冷暖自知 提交于 2020-01-03 19:27:03
一:uboot 1:uboot要能够开机启动,必须根据具体的SoC的启动设计来设计uboot 2:uboot必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件就是具体处理了这一块。 3:能引导操作系统内核启动并给内核传参(1)uboot的终极目标就是启动内核(2)linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定的位置然后传给内核,内核启动后会到这个特定的位置去取uboot传给它的参数,然后在内核中解析这些函数,这些函数将来被用来指导linux内核的启动过程。 4:uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后,uboot本身就死了,要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot,重启只是uboot的另一生)。 5:uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行下继续执行uboot命令

uboot启动流程

时光总嘲笑我的痴心妄想 提交于 2019-12-30 02:34:32
分两阶段,第一阶段主要用汇编完成,第二阶段主要用 c 完成。 个人觉得两个阶段的分工并没有什么明显的要求,很多硬件的初始化可以放到第一阶段也可以放到第二阶段。只不过有一些复杂工作用汇编比较麻烦。 一般来说第一阶段工作: 1. 硬件设备初始化。 2. 为加载 bootloader 的第二阶段代码准备 RAM 空间。 3. 复制 bootloader 的第二阶段代码到 RAM 空间中。 4. 设置好栈。 5. 跳转到第二阶段代码的 c 入口点。 第二阶段: 1. 初始化本阶段要用到的硬件设备。 2. 检测系统内存映射。 3. 将内核映像和根文件系统映像从 flash 督导 RAM 空间。 4. 为内核设置启动参数。 5. 调用内核。 B ootloader 与内核的交互: B ootloader 与内核的交互是单向的,他们不能同时运行, bootloader 将各类参数放在某一个约定好的位置,再启动内核,内核启动后从这个位置获得参数(比如内存的起始和结束地址)。 下面这个文件就是某个 bootloader 设计的详细架构。 来自为知笔记(Wiz) 来源: https://www.cnblogs.com/dchipnau/p/5256052.html

uboot学习之uboot启动流程简述

情到浓时终转凉″ 提交于 2019-12-30 02:32:14
一、uboot启动分为了三个阶段BL0、BL1、BL2; BL0 表示上电后运行ROM中固化的一段程序,其中ROM中的程序是厂家写进去的,所以具体功能可能根据厂家芯片而有所不同。功能如下: 初始化系统时钟、特殊设备的控制器、启动设备、看门狗、堆栈、SRAM等硬件; 验证B1镜像,并且加载BL1镜像到SRAM中,然后跳转到BL1镜像的地址上。 BL0需要将BL1加载到对应的RAM上,这就涉及到它的启动模式,详细如下: 1.OneNand Boot模式 要了解OneNAND先得了解NOR Flash和NAND Flash。与NOR Flash相比,NAND Flash的读数据速度稍慢,但是擦写速度快得多,并且在容量、使用寿命、成本上也占有较大优势。NOR Flash的编程简单,而NAND Flash的编程较为复杂(因为它的flash管理需要特殊的接口)。NAND Flash一般用于存储数据,而NOR Flash一般用于存储启动代码。 NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节(有限的地址引脚是限制其容量的因素之一)。NAND Flash使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。为了弥补NAND Flash的不足,三星公司在NAND Flash芯片内集成了一个RAM接口,命名为OneNAND Flash

uboot下搭建tftp环境下载内核与根文件

纵饮孤独 提交于 2019-12-27 05:40:14
Tftp出现下载失败,错误信息: Retry count exceeded;starting again 如下图 解决: 按照网上教程搭建了环境,之后错误问题即可解决。 1)我搭建的环境如图1所示, 2)进入Ubuntu,我的是16.04版本,按照入下设置桥接模式,保存确定。 3)进入编辑,虚拟网络编译器,更改设置 4)选择桥接模式,不要选自动,选择有限网卡(搭建环境的那个网线口) 5)在启动Ubuntu,进入命令行,查看IP地址是否和PC机的有线网卡地址在一个网段; 6)在uboot下,设置开发板的IP地址(同一网段),服务器IP地址是PC机。 7) 在uboot模式下,即可进行tftp传输文件 来源: CSDN 作者: Ternence_zq 链接: https://blog.csdn.net/Ternence_zq/article/details/103643358

海思demo板子启动

北城以北 提交于 2019-12-26 20:55:01
首先要先加两根线连起来才能烧写uboot、内核、文件系统。 烧写时选择串口很慢,默认有uboot了,可选择通过网络烧写。 烧写配置: 烧写完启动时提示(ERROR: can’t get kernel image!): 在uboot设置: setenv bootargs 'mem=256M console=ttyAMA0,115200 clk_ignore_unused root=/dev/mtdblock2 rw rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),32M(rootfs)' setenv bootcmd 'nand read 0x42000000 100000 400000; bootm 0x42000000' saveenv 然后重启就进入linux了。 默认烧的系统不会启动telnetd,要手动跑一下telnetd才能用telnet登录到板子上。 来源: CSDN 作者: yangyang031213 链接: https://blog.csdn.net/yangyang031213/article/details/103720575

IMX6ULL系列学习记录-Uboot篇

徘徊边缘 提交于 2019-12-25 12:04:09
主题:IX6ULL U-boot移植记录(参考官方文档i.MX_BSP_Porting_Guide) 硬件平台:野火IMX6ULL 软件:ubuntu19.04 交叉编译器:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf U-Boot:uboot-imx-rel_imx_4.1.15_2.1.0_ga kernel:linux-imx-rel_imx_4.1.15_2.1.0_ga 日期:2019-11-5 目的:把NXP官方的IMX6IMX6ULL参考板移植U-boot到用户IMX6ULL。 过程 2.1 U-boot版本选择 U-Boot v2016.03版本 2.2 准备代码 2.2.1 拷贝板级文件 cp board/freescale/mx6ullevk board/freescale/mx6ull_yh -rf 2.2.2 拷贝对应头文件 cp include/configs/mx6ullevk.h include/configs/mx6ull_yh.h 需要注意的地方: CONFIG_LOADADDR:zImage加载地址 CONFIG_SYS_MALLOC_LEN:堆大小 CONFIG_STACKSIZE:栈大小 CONFIG_NR_DRAM_BANKS:ddr块个数 PHYS_SDRAM_SIZE

uboot学习之五-----uboot如何启动Linux内核

风流意气都作罢 提交于 2019-12-24 12:58:13
uboot和内核到底是什么? uboot实质就是一个复杂的裸机程序;uboot可以被配置也可以做移植; 操作系统内核本身就是一个裸机程序,和我们学的uboot和其他裸机程序没有本质的区别;区别就是我们操作系统运行起来后可以分为应用层和内核层,分层后,两层的权限不同,内存访问和设备操作的管理上更加精细(内核可以随便方位各种硬件,而应用程序只能被限制的访问硬件和内存地址) 直观来看:uboot的镜像是u-boot.bin,Linux系统的镜像是zImage,这两个东西其实都是两个裸机程序镜像。从系统启动的角度来讲的。内核和uboot就是裸机程序; 部署在SD卡中特定分区内 (1)一个完整的软件+硬件的嵌入式系统,静止时(未上电)bootloader、kernel、rootfs等必须的软件都以镜像的形式存储在启动介质中(x210中是inand/SD卡);运行时都是在DDR内存中运行的,与存储介质无关。上面两个状态都是稳定状态的,第三个状态是动态过程,即从静止态到运行态的过程,也就是启动过程。也就是这整个过程。 (2)动态启动过程就是从SD卡逐步搬移到DDR内存,并且运行启动代码进行相关硬件初始化和软件架构的建立,最终达到运行时稳定状态。 (3)静止时u-boot.bin zImage rootfs都在SD卡中,他们不可能随意存在SD卡的任意位置,因此我们需要对SD卡进行一个分区

Uboot启动流程分析(二)

纵然是瞬间 提交于 2019-12-24 06:58:52
1、前言 在前面的文章Uboot启动流程分析(一)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12000889.html 已经简单地分析了low_level_init函数,其调用流程如下: save_boot_params_ret | cpu_init_crit |   | |   lowlevel_init |   | |   s_init | _main 接下来,则继续往下分析_main函数。 2、_main函数 在save_boot_params_ret的最后,会运行bl _main这句代码,Uboot则将会跳转到_main函数中去运行,该函数的定义在arch/arm/lib/crt0.S文件中,_main函数的功能已经在文件中注释得很清楚了,先来看看_main函数实现的功能是什么,注释如下: /* * This file handles the target-independent stages of the U-Boot * start-up where a C runtime environment is needed. Its entry point * is _main and is branched into from the target's start.S file. * * _main execution

uboot的常用命令及用法

拥有回忆 提交于 2019-12-24 03:54:13
转自:https://blog.csdn.net/jklinux/article/details/72638830 https://blog.csdn.net/dagefeijiqumeiguo/article/details/51314856 uboot是bootloader的一种,主要是用于引导内核启动. uboot除此功能外, 还带有很多其它功能. 功能是通过命令来调用. uboot的命令: help //列出当前uboot所有支持的命令 help 命令 //查看指定命令的帮助 reset //重启uboot bootm //用于启动内核 用法: bootm 0x42000000 //从内存地址0x42000000启动内核, 启动前需把内核镜像uImage存放到指定的内存地址 printenv //打印所有环境变量的值 printenv 环境变量名 //查看指定的环境变量值 常用环境变量: bootdelay // uboot启动后, 倒计时多少秒后自动执行环境变量bootcmd的语句 bootcmd // 倒计时到0后,自动执行里面的语句 bootargs // 是用于提供给内核的启动参数语句 setenv //设置/修改/删除环境变量的值 用法: setenv 环境变量名 //删除指定的环境变量 setenv myargs "hello" //设置环境变量myargs

嵌入式系统烧写uboot/bootloader/kernel的一般方法

只谈情不闲聊 提交于 2019-12-24 03:54:02
嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误, www.2cto.com 引导失败等情况时如何重新烧写uboot/kernel. 烧写uboot/kernel的方式一般有两种,一种是在linux本身(shell中),直接将uboot/kernel的影像文件(二进制文件)使用操作烧写flash的命令烧写到flash特定分区上, 另一种是在uboot界面上,通过配置serverip,ipaddr,使用tftp命令 下载 uboot/kernel到flash上 例子如下: //一,在linux的shell中烧写uboot/kernel mtd write命令是自定义的烧写flash命令。 //烧写uboot ,/dev/mtd0 是bootloader 的特定分区 mtd write u-boot.bin /dev/mtd0 //烧写kernel, mtd1 是kernel的特定分区 mtd write vmlinux.elf /dev/mtd1 //重启 reboot //二,在uboot界面中烧写uboot/kernel,以kernel为例子 //在bootloader 界面中 //本机uboot 的ip地址 setenv ipaddr