报价
HOME
报价
正文内容
uboot spl nand read 嵌入式硬件与编程总结01
发布时间 : 2024-11-23
作者 : 小编
访问数量 : 23
扫码分享至微信

嵌入式硬件与编程总结01

本人总结学习用,有些乱,勿怪1、imx6ull网络接口eth不稳定的问题,fec 2188000.ethernet eth1:Link is down。

最近在调试lan8720+imx6ull双网卡,核心板使用的是正点原子的,方案也是参考其的。调试了几天发现了一个问题就是eth1和eth0网卡经常掉线,情况就是出现(图1)fec 2188000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/txfec 2188000.ethernet eth1:Link is downfec 2188000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/txfec 2188000.ethernet eth1:Link is down

连接建立之后然后就立刻down了,但是eth1对应的fec0,我在uboot通过网络(fec0)加载的zImage和dtb的时候有是正常的,这就很怪了,应该是软件问题了。但是呢软件我在开发板上运行又比较正常,软件里面又经过了仔细对照了几遍,发现设置的都是一模一样的没有区别,这个问题就挺奇怪的。后来我经过排查发现了问题所在,问题出在网络时钟源上,lan8720的时钟源由imx6ull产生供给,uboot加载时时钟源的幅值比较宽,幅值范围-1V - 4V,到了linux运行的时候时钟幅值只有0.6V - 2.5V(图2),明显感觉时钟的差异造成了连接的不稳定。需要修改时钟引脚的电气配置,正点原子设定的值为0x4001b009,其中引脚的驱动能力配置为001(R0),我将其修改为010(R0/2),寄存器值变为0x4001b011,然后时钟的情况好了许多网卡工作正常不再频繁掉线(图3)。回过头总结下来就是,我自己的板子和正点原子的开发板在硬件pcb布线上有所区别,我的phy离主控芯片的距离比较远,走线的长度比较长,线间的分布电容也相对较大,所以管脚设置照搬就造成了管脚驱动能力不够的问题。

图1 网卡掉线提示

图2 修改前ent_clk

图3 修改后ent_clk

2、u-boot SPL的理解

uboot分为uboot-spl和uboot两个组成部分。SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。

BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么为什么还多一个uboot spl呢?

这个主要原因是对于一些SOC来说,它的内部SRAM可能会比较小,小到无法装载下一个完整的uboot镜像,那么就需要spl,它主要负责初始化外部RAM和环境,并加载真正的uboot镜像到外部RAM中来执行。

所以由此来看,SPL应该是一个非常小的loader程序,可以运行于SOC的内部SRAM中,它的主要功能就是加载真正的uboot并运行之。

3、 什么是CMA内存分配技术

CMA(Contiguous Memory Allocator)是智能连续内存分配技术,是Linux Kernel 内存管理系统的扩展,目的在于解决视频播放(特别对于4K视频)需要预留大量连续内存导致 运行内存紧张的问题。

连续内存分配器(CMA - Contiguous Memory Allocator)是一个框架,允许建立一个平台无关的配置,用于连续内存的管理。然后,设备所需内存都根据该配置进行分配。

这个框架的主要作用不是分配内存,而是解析和管理内存配置, 以及作为在设备驱动程序和可插拔的分配器之间的中间组件。因此,它是与任何内存分配方法和分配策略没有依赖关系的。

设备驱动作者的角度看,任何事情都不应该被影响。因为CMA是被集成到DMA子系统,所以以前调用DMA API(例如dma_alloc_coherent())的地方应该照常工作。事实上,设备驱动永远不需要直接调用CMA API,因为它是在页和页帧编号(PFNs)上操作而无关总线地址和内核映射,并且也不提供维护缓存一致性的机制。

4、终端、Shell、tty 和控制台(console)有什么区别

在早期的电脑上,往往具有带有大量开关和指示灯的面板,可以对电脑进行一些底层的操作,这个面板就叫做Console。其概念来自于管风琴的控制台。一台电脑通常只能有一个Console,很多时候是电脑主机的一部分,和CPU共享一个机柜。

一台大型主机往往需要支持许多用户同时使用,每个用户所使用操作的设备,就叫做Terminal——终端,终端使用通信电缆与电脑主机连接,甚至可以通过电信网络(电话、电报线路等等)连接另一个城市的电脑。

TTY是电传打字机Teletypewriter的缩写,在上图中的那种带显示屏的视频终端出现之前,TTY是最流行的终端设备

Shell不是硬件,而是软件,是操作系统的操作界面,Windows 3.x可以看做是DOS的Shell,http://command.com 也是DOS的shell。

No1 「矿渣玩家 Pro」之名词讲解

简介

在成为一名专业矿渣玩家前,您会接触到各种稀奇古怪的电子硬件,比如现在常见的各种便宜、好玩的旧电视盒子、4G上网棒、各种不知名的ARM架构的芯片板,通过学习编译生成原理和一些移植技术,可以将这些放在垃圾桶附近的废物再次赋予一些好玩、有意思的功能。

这是一个系列教程,主要是使用很多年前的一款基于 全志A20芯片的网络电视盒子【himedia Q2II】作为移植目标,通过移植ARM版本的Ubuntu系统和OpenWRT,让这个7、8年前的老旧机顶盒即可作为ubuntu实现一些简单的服务器功能,也可以作为旁路由给局域网提供DNS加速服务和广告过滤服务,让家里的设备能够更快的打开网站,还能防止广告的骚扰。

目前我已经对该机顶盒完成了Ubuntu系统移植和OpenWRT移植,我会争取尽快通过文字和图片的方式制作成教程发布出来。

如果您对该系列感兴趣,请关注、收藏,在我更新后您能及时获得推送信息。

u-boot

U-Boot 这是一个主要用于嵌入式的引导加载程序,全称为 Universal Boot Loader 。可以想象成 Windows 上的 BIOS 。

linux 系统启动时就必须要有一个系统 bootloader 程序,这段程序会先进行 DDR 等外设的初始工作。然后根据配置将 linux kernel 从指定的 flash 设备(QSPI Flash, SD, EMMC...,也可能通过网络)加载到板载的 DDR 进行启动运行。

对于这个 bootloader 程序,目前有许多种 bootloader 软件可以使用,例如 vivi, RedBoot, uboot。其中 uboot 在使用上最广泛 。

uboot-spl

在 uboot 启动 kernel 的过程中,可能会遇到一个叫 uboot-SPL 的东西。不是每个跑 linux 的芯片都会明确地有这个 uboot-SPL。可能是设计到了芯片的 bootRom 里面。具体也不是很清楚。uboot-SPL 会被叫做二级boot,这里的二级是相较于 SOC 的 bootRom 而言。Soc 启动时最先执行的是 ROM 中的固化程序 (bootRom 程序)。

uboot 虽然是为嵌入式系统而开发的,但其镜像一般都有几百个 KB 。普通的 SOC 的片上 RAM 都无法完全容纳,所以一般需要一个程序来初始化片外的 RAM。加载并启动 uboot 。好在这个 SPL 程序一般都使用 uboot 自带的 SPL 程序。

在嵌入式使用中,无需将太多精力放在 uboot 上,它的目的就是为了启动 kernel。启动完之后便寿终正寝。

kernel

linux 内核,开源的电脑操作系统内核。在嵌入式中,有 FreeRTOS,UCOS 这些相较轻量级的操作系统。也有这种复杂但功能强大的操作系统。在使用层面,嵌入式上使用 linux 。最重要的就是 kernel 中驱动的移植。一般都不会从一个纯净的 kernel 中去进行移植操作。而是芯片厂商提供的 kernel 基础上根据自己的板子进行各种外设驱动相关的适配工作。

在 kernel 中做驱动开发是按照其规定的框架来编写驱动的,所以重点就是驱动框架的学习

dts

dts 就是设备树,是用来根据板子不同来描述开发板上的设备信息的。老版本的 linux kernel 是没有设备树概念的。后来因为 SOC 的发展,kernel 需要对这些信息新增 SOC 的支持。而这些代码都会编译到 kernel 中。导致 kernel 日渐臃肿。后面就引入了在 PowerPC 等架构就已经采用的设备树。

rootfs

rootfs 即根文件系统,kernel 启动后挂载的是第一个文件系统。rootfs 和 kernel 是分开的,但是单独的 kernel 没有 rootfs 是没法正常工作的。

现在有许多制作 rootfs 的工具,如 busybox, buildroot,Yocto等。其中 buildroot 中包含了 busybox 的功能,只需要简单的操作就可以生成一个 rootfs。十分方便。后续会去学习 buildroot 的使用。但若有时间想学习下 rootfs 的构建过程,可以使用 busybox 去慢慢构建 rootfs。

在学习编译之前,您需要了解这几个主要名词,这样才能在后面的教程中理解好每一步的操作。

既然您看到这里了,给个关注和点赞吧。

相关问答

ubootmlospl是什么东西?

当选择从nandflash启动时,spl为第一阶段,copy前4K到iram,然后完成初始化ddr后,重定位,跳转到ddr,copy剩余uboot到ddr,开始启动第二阶段。当选择从nandfl...

 lara cox  江西乐安 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部