redboot的启动流程

19、深入探究系统启动流程与常用引导加载器 本文深入探讨了系统启动的各个关键步骤,包括第一阶段和第二阶段引导加载器、内核解压、硬件初始化、挂载初始RAM磁盘和根文件系统,以及运行初始程序。文章详细介绍了常见的引导加载器如RedBoot、YAMON、Das U-Boot、LILO和GRUB的功能、特点、获取源代码、构建流程和使用方法,并通过mermaid流程图展示了系统启动流程与引导加载器的关联。同时,文章还分析了内核空间与用户空间的分工与协作、闪存内存的分区管理,并总结了引导加载器的适用场景及调试建议,为系统开发和优化提供了实用指导。 阅读详情

如下述:

以下是从ecos的官网文档中抄录下来的。但在浩瀚的文档中找到这些信息也非易事,在此记录下来,以备查用。

 

其中reset vector定义在packages/hal/arm/arch/v3_0/src/vector.S中。

 

PLATFORM_SETUP1定义在packages/hal/arm/arch/v3_0/include/hal_platform_setup.h中。

 

cyg_start定义在packages/redboot/v3_0/src/main.c中。

 

 

 

Getting RedBoot Going
=====================

Startup
=======

1. Reset entry point. At location 0.
   Transfer control to ROM entry point: reset_vector.

2. Here we call invoke PLATFORM_SETUP1 macro. This does the following:
   - disable interrupts
   - disable and clear caches
   - Init memory controllers. may involve discovery of what RAM is
     present.
   - Set up clock frequencies.
   - Init MMU table
     - sets up TTBR and DACR to default values
     - fills in MMU table to map
       - DRAM at 0x00000000 cacheable/buffered
       - Device registers elsewhere uncacheable/unbuffered usually 1-1
       - DRAM at 0xF0000000 uncacheable/unbuffered (1-1 in aaed2000)
       - remap ROM at 0 elsewhere
   - Enable MMU
   - Relocate image to RAM for ROMRAM startup
   - Any other CPU setup required
     
3. Jump to HAL startup.
   - Plant vector intructions at 0+
   - copy .data section to RAM
   - Init CPSR and SPSR
   - Set SP
   - Clear .bss
   - Call hal_hardware_init()
   - call initialize_stub() if GDB stubs included
   - call hal_ctrlc_isr_init()
   - call cyg_hal_invoke_constructors()
   - call cyg_start()


HAL Serial support
==================

Set up CDL in platform CDL file.
    CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS
    number of channels usually 0, 1 or 2
    CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL
    channel to use for GDB
    CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD
    initial baud rate
    CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL
    channel to use for console
    CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD
    initial baud rate
    CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT
    default console channel

The code in hal_diag.c need to be converted to the new serial device.
If this the same as a device already supported, copy that.

Things that need to be written:

struct channel_data_t;
       Structure containing base address, timeout and ISR vector
       number for each serial device.

xxxx_ser_channels[];
    Array of channel_data_t, initialized with parameters of each
    channel.

void cyg_hal_plf_serial_init_channel(void *__ch_data)
    Initialize the serial device. parameter is a pointer to a
    channel_data_t.

void cyg_hal_plf_serial_putc(void * __ch_data, char *c)
        Send a character to the serial device.
    Poll for ready, write the char.
    Maybe poll for char sent.

bool cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch)
        Look for a character and return it if available.
    If none available, return false.

int cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t
__func, ...)
    An IOCTL-like function for controlling various aspects of the
    serial device.
    May need to do some work in __COMMCTL_IRQ_ENABLE and
    __COMMCTL_IRQ_DISABLE cases to enable/disable interrupts.

int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc,
                       CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
        Interrupt handler, specifically for dealing with Ctrl-C.
    - Check for an incoming character.
    - Read the character and call cyg_hal_is_break().
    - If result is true, set *__ctrlc to 1.
    - return CYG_ISR_HANDLED;

void cyg_hal_plf_serial_init()
        Initialize each of the serial channels.
    - call cyg_hal_plf_serial_init_channel() for each channel.
    - call CYGACC_COMM_IF_* macros for each channel -
          cut/paste/edit these.

       
Interrupt Controller
====================

ARM platforms have interrupt controller access in functions in variant
or platform source file.

void hal_interrupt_mask(int vector)
        Manipulate interrupt controller to mask the interrupt.

void hal_interrupt_unmask(int vector)
        Manipulate interrupt controller to unmask the interrupt.

void hal_interrupt_acknowledge(int vector)
        Manipulate interrupt controller to acknowledge the interrupt.
    May not be needed in some platforms.

void hal_interrupt_configure(int vector, int level, int up)
        Set interrupt detection: level vs. edge; high/low
        rising/falling.
    Leave empty where not implemented.   

void hal_interrupt_set_level(int vector, int level)
        Set interrupt priority level.
    Leave empty where not implemented.   


Redboot Configuration
=====================

Having done all of the above, you should be in a position to get
RedBoot running.

If the platform you copied has redboot, there should be some .ecm
files in the misc directory. Named redboot_<startup>.ecm.

Choose a startup and edit the .ecm file.
       - remove any options that are not relevant
       - comment out FLASH, ETH and COMPRESS packages

Configure for redboot:

% setenv ECOS_REPOSITORY <path to source repository>
% ecosconfig new xxxxxxxx redboot
% ecosconfig import $ECOS_REPOSITORY/hal/arm/arm9/xxxxxxxx/current/misc/redboot_ROM.ecm
% ecosconfig tree
% make

Repeat until successful.

redboot命令.pdf dg dg dgfdsf fffffffffffffffggggggggggg 立即下载

相关推荐

频偏估计技术:从原理到5G应用的实战解析

本文深入解析了5G通信中的频偏问题及其核心技术。频偏如同调不准的旋钮,会导致信号失真与载波间干扰。文章详细拆解了整数倍与小数倍频偏估计两大核心方法,重点剖析了基于循环前缀和基于同步信号块的算法原理与优劣,并结合eMBB、mMTC、URLLC三大5G应用场景,提供了实战算法选择策略与参数调优避坑指南。

weixin_29218963的博客 263

制作RedBoot启动光盘以及下载调试eCos应用

eCos是开源免版税的抢占式实时操作系统。其最大亮点是可配置,与其配套的图形化配置工具提供组件管理、选项配置、自动化单元测试等。eCos官网http://ecos.sourceware.org,eCos技术网http://www.52ecos.net,eCos技术网QQ群144940146。 http://blog.youkuaiyun.com/zoomdy/article/details/17099953...

zoomdy's blog 2068

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

mx31板子运行过程

  Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object classi

beny610的专栏 928

用Matlab搞定Delta并联机器人运动学:从建模到正逆解完整流程(附代码)

本文详细介绍了如何使用Matlab实现Delta并联机器人的运动学分析,包括几何建模、正逆解求解及可视化验证。通过符号计算和数值迭代法,解决非线性方程组问题,并提供完整代码示例,帮助读者快速掌握Delta机器人的运动学计算与应用。

weixin_30955617的博客 177

教程:使用树莓派连接Pixhawk飞控

教程:使用树莓派连接Pixhawk飞控树莓派可以与Pixhawk飞控相连,读取飞控中的状态信息,同时对飞控发送指令。树莓派作为一个更高性能的计算平台,可以运行图像识别、机器学习、实时路径规划等程序,为开源无人机带来了无限可能。本文将介绍如何在树莓派上使用APSync。不需要了解Linux,即可将树莓派连接到Pixhawk飞控。使用的器材为: Pixhawk飞控 树莓派3B(Raspberry Pi

Roger今天好好搬砖了吗 5万+

ecos代码分析(1)

ecos代码分析(1) 前面分析了u-boot,再分析一下ecos,听说ecos比较复杂,所以还是采取挨船下竿的原则,分析u-boot相似的smdk2410这块开发板。 1. 首先找到链接文件       7 MEMORY       8 {       9     ram  : ORIGIN = 0, LENGTH = 0x4000000

mrwangwang的专栏 2198

从ADC校准到精准测量:避开PY32F030小信号采样的那些坑

本文深入探讨了PY32F030微控制器进行ADC小信号采样时面临的挑战与解决方案。从硬件设计、软件滤波算法到系统级校准策略,详细分析了如何避开常见陷阱,实现精准测量,特别是在25mV以下小信号场景中的应用实践。

ujm567890的博客 759

烧写linux内核的步骤,启动redboot后,向目标机烧写一个linux内核的全过程

命令说明对一个没有内核和根文件系统的板子是不可以运转的,当通过一种方式下载了RedBoot引导程序以后,我们可以通过下面的方式下载内核和根文件系统。在本系统中,我们对内核和根文件系统的下载是通过tftp服务完成的。整个Flash空间是16M ,它的地址范围:0x50000000 – 0x50fe0000 ,共有128块,每一块的大小是128K 。0x50000000 – 0x50080000范围放...

weixin_32025789的博客 794

FAST-LIVO2 源码精读(五):IMU 运动模型、离散传播与去畸变原理

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第五篇,数学基础篇章(第 4–7 篇)的第二篇。上一篇在 SO(3) 流形上建立了姿态表示与右扰动模型;本篇聚焦 IMU 预积分的核心问题:一帧激光扫描横跨约 100 ms,帧内每一个点的采集时刻各不相同,如何利用 200 Hz 的 IMU 量测将全帧点云统一对齐到帧末时刻?答案完整封装在(587 行)的函数中,本篇逐段拆解其四阶段逻辑,并推导协方差矩阵随误差状态转移矩阵F_x逐帧演化的物理含义。

PX4-SLAM-PNC 158

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了无线充电系统面临的核心挑战,提出LCC补偿网络解决方案,阐述了其恒流输出和输入阻抗解耦原理。通过Simulink分步演示了系统建模过程,包括松耦合变压器、LCC+LC补偿网络、功率变换级搭建以及频率跟踪控制实现。仿真结果表明,LCC补偿系统在气隙变化和负载跳变下能保持输出电压稳定(波动±3%),效率达89%。文章还总结了工程实现要点,并探讨了动态充电、多负载系统等扩展应用。该教程为开发高效智能的无线充电系统提供了实用指导

amy_mhd的博客 63

Redboot教程

新浪 Redboot用户手册 ping -h 192.168.1.82 -v -n 4 fis list fis init -f (除启动区全部檫除) fis free ip_address Load命令详解   =========================================================== load --  下载程序或数据到Red

固本培元的专栏 2051

179、瑞芯微RK3588在边缘盒子中的多摄同步架构——基于PLL的帧同步与曝光同步的实测调优

第一,RK3588的多摄同步,硬件上确实支持,但软件配置的坑比想象的多。第三,传感器的tPD差异是最大的不确定因素,选型时尽量选同一批次,而且要在量产前做全温测试——我遇到过低温下tPD变化超过3微秒的情况,直接导致同步失效。我遇到过一批IMX415,tPD差异达到±8微秒,直接超出SYNC控制器的补偿范围,最后只能挑芯片,把差异小的装到同一台设备里。别用100MHz,虽然分辨率更高,但高频信号在PCB走线上更容易引入EMI,边缘盒子的结构件往往没有很好的屏蔽,实测100MHz下同步信号边沿抖动明显增大。

zzfmlxs的博客 39

基于x86的Redboot启动流程分析

Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。当前Redboot的最新版本是Redboot-2.0.1,Redhat公司将会继续支持该项目Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader。Redboot是在ECOS的基础上剥离出

shenbin1430的专栏 2130

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

i386 Redboot启动流程

i386 Redboot启动流程Redboot(i386)启动流程(一) - [源码分析]原始出处  http://redboot.blogbus.com/logs/21270390.html现在将通过阅读代码,看看redboot是如何启动的,这是每个系统执行的第一步,也是不可缺少的一步。这部分会分几篇完成,这是第一部分,主要是一个概要介绍。由于系统启动跟硬件的紧密关系,所以在不同

@塘外人 1546

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Redboot启动流程

现在将通过阅读代码,看看redboot是如何启动的,这是每个系统执行的第一步,也是不可缺少的一步。这部分会分几篇完成,这是第一部分,主要是一个概要介绍。由于系统启动跟硬件的紧密关系,所以在不同的硬件平台下,这部分都会有相应不同的处理。下面这幅图来自《EMBEDDED SOFTWARE DEVELOPMENT WITH ECOS》书中,介绍了一款PowerPC的设备启动流程。 而这里

1057

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ecos 浅析eCos系统Redboot单元启动流程

 http://blog.chinaunix.net/u1/38994/article_56618.html http://sources-redhat.mirrors.airband.net/ecos/releases/ecos-3.0/ http://blog.chinaunix.net/u1/38994/showart_1856869.html浅析eCos

devehe的山寨 1865

Redboot(i386)启动流程(一)

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://redboot.blogbus.com/logs/21270390.html现在将通过阅读代码,看看redboot是如何启动的,这是每个系统执行的第一步,也是不可缺少的一步。这部分会分几篇完成,这是第一部分,主要是一个概要介绍。由于系统启动跟硬件的紧密关系,所以在不同的硬件平台下,这部分都会有相应不同的处理。

九层之台,起于累土;千里之行,始于足下。 752

redboot启动过程

 <!--收藏-->  

linuxjackaroo的专栏 2339

Redboot 代码分析

    注: 1. 分析RedBoot的代码结构;为以后移植、修改RedBoot做准备;            2. 尝试分析Redboot 启动初始化流程,增强对系统启动和相应初始化过程的了解; 根据下一篇《如何构建eCos嵌入式系统 》分析整理基于mx3*的启动过程;            3. 尝试深入了解Redboot 数据传输以及RedBoot 命令部分代码的实现,留待以后能否增

tianruxishui的专栏 2600

Redboot 代码分析 .

注: 1. 分析RedBoot的代码结构;为以后移植、修改RedBoot做准备;             2. 尝试分析Redboot 启动初始化流程,增强对系统启动和相应初始化过程的了解; 根据下一篇《如何构建eCos嵌入式系统 》分析整理基于mx3*的启动过程;             3. 尝试深入了解Redboot 数据传输以及RedBoot 命令部分代码的实现,留待以后能否增加一些命

mrwangwang的专栏 754

redboot startup process

Redboot is a choice for us if we need to implement our boot loader without do it all by ourselves.  It is a portion of eCos package and we get the whole eCos pacakge when we want to get redboot source

aaaaatiger--寻路 607

mysql ecos_ecos代码分析(4)

ecos代码分析(4)下面开始看cyg_start()< redboot/v3_0/src/main.c>void cyg_start(void):: an no parameters routineèCYGACC_CALL_IF_MONITOR_VERSION_SET(RedBoot_version):: hal_virtual_vector_table[14]= RedBoot_v...

weixin_42500477的博客 201

ecos编译redboot,vmware运行redboot,执行hello world(图形配置)

1- 下载源文件 :~/ecos$ ls -lrt total 80 drwxr-xr-x 7 XXXX XXXX 4096 Mar 27 2009 ecos-3.0 -rw-r--r-- 1XXXX XXXX60197 Jul 3 11:45 ecos-install.tcl drwxr-xr-x 3XXXX XXXX 4096 Jul 5 09:15 gnut...

weixin_30363817的博客 179

ecos代码分析(4)

ecos代码分析(4) 下面开始看cyg_start() < redboot/v3_0/src/main.c> void cyg_start(void) :: an no parameters routine èCYGACC_CALL_IF_MONITOR_VERSION_SET(RedBoot_version) ...

weixin_30633507的博客 100
上一篇: 把redboot移植到s3c44b0x平台上
下一篇: ecos 跑在s3c44b0x
newkelt
博客等级 码龄19年 18粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值