嵌入式硬件与编程总结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/tx
fec 2188000.ethernet eth1:Link is down
fec 2188000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
fec 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。