笔记整理—uboot启动过程(8)uboot启动二阶段结束

news2024/12/28 12:39:46

        前文说到,uboot实现了malloc()可以申请堆内存了,今天这章将会对uboot进行一个了结。

        Ip Adderss开发板地址也就是开发板的IP。

gd->bd->bo_ip_addr=getenv_Ipaddr("ipaddr");

        通过getenv转string_to_ip实现,完成所见的ip地址。把字符串->点分十进制,因为一个IP地址正好32位,使以用unsigend int进行存储,人看到的点分十进制为192/168.3.1。

        MAC地址:网卡或网络设备硬件地址。使用getenv得到ethaddr,将数据放在gd->bd->bi_enetaddr[rag]中。MAC地址有六位组成,对于X210而言是00:40:5C:26:0A:5B,这个数据是默认在uboot中的值,可在config中进行修改初始值,如果save过环境变量,就应该在命令行中进行修改,因为已经存储在SD卡中了。

        devices_init()硬件设备初始化,都是驱动设备相关的,根据Linux驱动框架衍生出的结构,该结构从linux内核中移植,集中进行各种硬件的驱动。但是在x210的uboot上没用到,因为用不上,对于x210而言,uboot就是为了去启动内核的,所以没用上,但在内核部分会对相关使用到的硬件进行驱动。

        jumptable_init跳转表,初始化gd中的jt值,是对一些函数指针进行函数绑定,目的是使用c语言进行面向对象的操作,本uboot没用上这玩意。

        consele_init_r控制台二阶段初始化,前几章出现过相关的内容但那是consele_init_f也就是控制台一阶段初始化。控制台初始化以纯软件形式进行初始化。给相关数据结构填充相应的值,但是在uboot的consele并没有建立缓冲区,其本质还是一个串口,到了内核部分的consele就使用到了缓冲区等机制。

        enable_interrupts中断初始化。COSR说到总中断位(CPSR_C)的使能,但在uboot中没有使用到中断,所以是空转。

        uboot中经常出现一个以宏为条件编译的代码,一般会用到两种方法:1.调用处进行条件编译。2.提供两种函数体选择(实体函数/空转)。

        loadadder与bootfile,都是与内核启动有关,在linux内核中会去参考这些东西(从环境变量中读取到全局变量)。

        board_late_init()开发板后期初始化,在x210的uboot中为空转,侧面说明了板级初始化已经基本结束了。

        eth_initialze网卡相关初始化。在因为x210已经在board_init中完成了相关内容的初始化,所以结论为空转。

        miiphy网卡的mii层初始化,对于x210所使用的DM9000而言来说这一部分是空转。

        x210_preboot_init:LCD与logo显示。x210在启动命令之前的初始化。fd_init()是Frame_Buffers像素缓冲器的初始化其大小为显示器的像素长*像素宽*色彩的比特位。LCD_port_init相关gpio的初始化。LCD_reg_init相关寄存器的初始化。init_logo()初始化logo图片,display_logo()显示logo图片。

        check menukey to update from sd自动更新,将启动img放到sd卡中(要升级的内核版本),在最后时检查按键进行img升级,按下->updata mode->从sd卡读->烧入INand。不按按键->boot mode->正常运行。这样能快速的烧录系统,用于量产产品。

        main_loop死循环,uboot结束。

        uboot启动第二阶段总结:主要针对一些硬件与数据结构进行初始化。init_sequence(网卡、机器码、内存传参地址、定时器、gd结构体中的波特率、打印启动信息、cpu时钟设置信息、校验开发板名称、gd中的DDR信息、DDR配置信息表打印)。

mem_malloc_init    malloc初始化(堆内存)
mmc_initialize    inand/sd卡的初始化(soc相关)
env_relocate    环境变量重定位
ip_addr    gd中的ip初始化(bd)
ETH(gd->bd->bienetaddr)相关的初始化
device_init    空转
jumb_table_init    跳转表
console_init    控制台初始化
loadaddr与bootfile    环境变量->全局变量
X210_preboot_init    LCD初始化与logo初始化
check_menu_update_from_sd    SD卡量产烧录程序
main_loop()    主loop
其中有些空转内容没写

        uboot的第一阶段:SOC相关工作;以汇编语言为主;发生在SRAM中。

        uboot的第二阶段:开发板相关工作;以c语言为主;发生在DRAM中。

        其中移植的重点在于宏定义:x210_sd.h。

        特定的硬件初始化放在uboot的二阶段。

        值得一提的是串口已经在一阶段实现了。

        至此历经8个文章,完成了uboot的大概内容讲解,可喜可贺! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus监控Mysql实例

Prometheus监控Mysql实例 配置mysql_exporter 挂载目录为/home/mysql_export mkdir /home/mysql_export 创建链接数据库配置文件 vim my.cnf [client] user export # 用户名 password Jianren123 # 密码 host 172.16.0.3 # mysql地址 port 3306 # 端口配…

《高等代数》艾森斯坦判别法典型例题

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:1)艾森斯坦判别法是用来判断多项式是否可约的一种方法。 2)本题技巧性较强,需要掌握的知识点有除法求导法则、艾森斯坦判别法、 组…

智能合约审计工具(一)——cloc界定审计的代码数量,审计难度。cloc,solidity metrics 使用的入门,细节与解答

为什么要界定源代码数量 代码审计是一种评估软件代码质量、安全性和合规性的过程。在进行代码审计之前,先界定源代码的数量有以下几个原因: 审计范围的确定:了解源代码的规模可以帮助审计团队确定审计的范围和深度,从而制定合理的…

TCN合集(TCN、TCN-GRU、TCN--GRU--Attention、TCN-Bigru、TCN-BiGRU-Attention)

TCN、TCN-GRU、TCN-GRU-Attention、TCN-BiGRU、TCN-BiGRU-Attention)在结构原理上既有相似之处,也存在一些关键的不同点。以下是对这些模型的异同点以及它们之间优劣性的对比: TCN合集(TCN-GRU、TCN--GRU--Attention、TCN-Bigru等…

docker网络+跨主机容器之间的通讯

docker网络 使用docker network 查看桥 [rootdocker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 6cacea2a7a49 bridge bridge local 5546f1e40d41 host host local 2e567ec1e04f none null local bridge bridge和na…

使用c++编写com组件实现windows外壳扩展(自定义右键上下文菜单扩展)

一、作用 允许在 Windows 文件资源管理器中,当用户在文件、文件夹或空白处右键点击时,根据一定的逻辑显示自定义的菜单项 二、原理 COM组件 微软开发的一种软件架构模型,主要用于在不同编程语言之间实现二进制级别的可重用性和互操作性。…

文件上传面板中限制需要的文件格式,并且隐藏“所有文件”选项

直接说需求:需要实现在文件上传面板中限制需要的文件格式,并且不想展示“所有文件”这个选项,应该怎么做嘞?效果如下图: 这里用到了 window.showOpenFilePicker 方法实现,首先定义接受的格式及限制&#xf…

Python 生成随机的国内 ip

示例代码: import randomdef generate_random_cn_ip():# 中国大陆IP范围start_ip "36.54.0.0"end_ip "123.255.255.254"# 将IP地址转换为整数start_ip_num int(start_ip.replace(".", ""))end_ip_num int(end_ip.rep…

【FreeRTOS】信号量实验-控制车辆运行

目录 0 前言1 控制车辆运行2 不使用信号量3 使用计数型信号量3.1 运行两辆车运行3.2 运行三辆车运行 4 使用二进制信号量5 补充信号量知识5.1 两种信号量对比5.2 信号量函数5.3 创建5.4 删除5.5 Take / Give5.5.1 xSemaphoreGive5.5.2 pxHigherPriorityTaskWoken5.5.3 xSemapho…

库存零件耗尽 任天堂宣布停止New 3DS的维修服务

由于库存零件已耗尽,任天堂宣布自8月28日起停止接受New 3DS游戏机的维修服务。在今年3月份时,任天堂就宣布过2DS、New 3DS、New 3DS LL的维修服务将在库存零件耗尽后终止,目前来看2DS和New 3DS LL的维修服务还将继续,直到零件耗尽…

算法中常用的排序

1.概念 排序是将一组数据,依指定的顺序进行排列的过程. 2.排序的分类 (1).内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序.包括:交换式排序法,选择式排序法和插入式排序法 (2).外部排序 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序.包括:合并排序…

FTP主动与被动模式

文件传送协议FTP: 提供交互式访问FTP屏蔽了各计算机系统的细节,因⽽适合于在异构⽹络中任意计算机之间传送⽂件。 传统FTP默认不加密 工作模式:(站在服务器的角度) 主动模式:服务器主动使用TCP20端口发起数…

群晖NAS配置SFTP服务并结合内网穿透工具实现无公网IP远程传输文件

文章目录 前言1. 开启群晖SFTP连接2. 群晖安装Cpolar工具3. 创建SFTP公网地址4. 群晖SFTP远程连接5. 固定SFTP公网地址6. SFTP固定地址连接 前言 本文主要介绍如何将在群晖NAS中开启SFTP服务,并安装cpolar内网穿透工具配置公网地址,轻松打造一套高效、安…

LRN正则化是什么?

LRN正则化,全称为Local Response Normalization(局部响应归一化),是一种在深度学习,特别是在卷积神经网络(CNN)中常用的正则化技术。该技术旨在通过模拟生物视觉系统中的侧抑制现象,…

【第0003页 · 递归】N皇后问题

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0003页 N皇后问题 今天我们来看一个著名的问题:N皇后问题。在此之前,我们先温习一下递归的思想。当然,温习的方式…

阅读笔记:明朝那些事儿人间再无魏忠贤

持续了10多天时间,明朝那些事儿第八部人间再无魏忠贤截止到今天凌晨0:58分看完了,给我印象比较深刻的人物杨涟,努尔哈赤,孙承宗,袁崇焕,魏忠贤,皇太极,熊廷弼&#xff0c…

C#MDI子窗体通过TabControl列表显示的控制实现过程

类似excel表格中各个表单sheet的切换效果,使用tabcontrol控件实现类似的功能。效果如下: 过程涉及父窗体MDIParent1、子窗体main、自定义基础功能类MdiChildBase。 基础功能类MdiChildBase继承自Form创建,定义了一个委托SetTabControlDelega…

项目:基于TCP的文件传输系统

项目介绍: 模拟FTP原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在,…

2024年整理的自动化测试面试题及答案

selenium中如何判断元素是否存在? 没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素异常捕获的方式判断selenium中hidden或者是display = none的元素是否可以定位到?不可以,想点击的话,可以用…

C# 爬虫技术:京东视频内容抓取的实战案例分析

摘要 随着互联网技术的飞速发展,数据的获取和分析变得愈发重要。爬虫技术作为数据获取的重要手段之一,广泛应用于各个领域。本文将重点探讨C#语言在京东视频抓取中的实现过程,分析其技术细节,并提供相应的代码实现。 引言 京东…