uboot调试过程:用来调试phy不通的过程(am3352)
一:uboot的启动过程的基本知识
uboot的基本移植过程:分为步奏1 ,步奏2;
代码入口:u-boot/arch/arm/cpu/u-boot.lds连接文件。ENTRY(_start):代码的入口函数。
\board\ti\am335x\u-boot.lds保存了U-boot数据代码段在内存中的存放情况
启动步奏:_start标号:arch\arm\cpu\armv7\start.s复位;
bl cpu_init_cp15:主要对cp15协处理器进行初始化,关闭MMU和tlb(处理器访问内存时做地址转换),和cache。
然后调用:cpu_init_crit。:跳转到开发板的相关的初始化代码,初始化相关寄存器
arch\arm\cpu\armv7\lowlevel_init.S:特定开发板的设置代码。
核心代码:lowlevel_init。跳转到:s_init(void)(板卡级别c的程序)\arch\arm\cpu\armv7\am33xx\board.c-s_init
_main() ENTRY(_main)
1:arch/arm/lib/crt0.s中跳转到ldr pc, =board_init_r。(\arch\arm\lib\board.c中)
进入到板卡的运行程序中。
函数调用流程:(am3352 的网口cpsw网卡驱动只能驱动两个网口)
eth_initialize(gd->bd)->phy_init()->(phy驱动初始化,用来配置phy)
phy_smsc_init();用来注册phy的驱动初始化的接口
对phy的初始化操作:static struct phy_driver lan8710_driver = { //驱动程序 (用来定义phy 的行为)
.name = "SMSC LAN8710/LAN8720",
.uid = 0x0007c0f0,
.mask = 0xffff0,
.features = PHY_BASIC_FEATURES,
.config = &genphy_config_aneg, //驱动配置
.startup = &genphy_startup, //驱动开始
.shutdown = &genphy_shutdown,
};
//用来初始化335x的网卡驱动芯片。
board_eth_init:读mac地址
writel(MII_MODE_ENABLE, &cdev->miisel):mii操作寄存器
->board_eth_init(\board\ti\am335x\board.c)->cpsw_register(&cpsw_data)->cpsw_phy_init->phy_connect
根据寄存器得到存放的mac地址,
->phy_find_by_mask(确保phy已经启动复位)
网卡配置的slave的配置(也就是网卡对phy的配置参数)
网卡对于phy寄存器的基址。
static struct cpsw_slave_data cpsw_slaves[] = {
{
.slave_reg_ofs = 0x208, //从设备寄存器的偏移地址
.sliver_reg_ofs = 0xd80,
.phy_addr = 0,
},
{
.slave_reg_ofs = 0x308,
.sliver_reg_ofs = 0xdc0,
.phy_addr = 1,
},
};
rv = cpsw_register(&cpsw_data);:注册cpsw网卡驱动
网卡对主的cpsw的配置的默认参数:static struct cpsw_platform_data cpsw_data = {
.mdio_base = CPSW_MDIO_BASE, 0x4A100800 mdio基地址
.cpsw_base = CPSW_BASE, cpsw基地址
.mdio_div = 0xff,
.channels = 8, dma通道号
.cpdma_reg_ofs = 0x800, dma寄存器偏移值
.slaves = 1,
.slave_data = cpsw_slaves,
.ale_reg_ofs = 0xd00, 地址搜寻寄存器偏移值
.ale_entries = 1024, 地址表大小
.host_port_reg_ofs = 0x108, port寄存器偏移值
.hw_stats_reg_ofs = 0x900, 硬件状态寄存器偏移值
.bd_ram_ofs = 0x2000, buffer 描述ram偏移值
.mac_control = (1 << 5),
.control = cpsw_control,
.host_port_num = 0,
.version = CPSW_CTRL_VERSION_2,};
for_each_slave(slave, priv) {
cpsw_slave_setup(slave, idx, priv);
printf("slave->slave_num=%d,\n",slave->slave_num);
idx = idx + 1;
}判断搜寻phy驱动
dev->init = cpsw_init;网卡驱动初始化,网卡驱动发送,网卡驱动接收
dev->halt = cpsw_halt;停止
dev->send = cpsw_send;
dev->recv = cpsw_recv;
eth_register(dev);注册网卡
cpsw_mdio_init:注册mdio总线驱动。根据mdio寄存器控住总线。mdio总线初始化,初始化phy设备的读写操作接口函数注册mii_dev总线设备:主要参数名称,读操作,写操作。
priv->bus = miiphy_get_dev_by_name(dev->name);根据总线名称得到总线。
cpsw_phy_init:phy设备初始化接口
phy_find_by_mask->create_phy_by_mask->phy_device_create(创建phy设备)->get_phy_driver查询得到phy的设备。->phy_probe使能phy设备。
for_active_slave(slave, priv)搜寻实际的从设备,确定设备参数。
phydev = phy_connect(priv->bus, slave->data->phy_addr,dev,slave->data->phy_if);->phy_reset将网卡设备与phy设备连接
phy_config->board_phy_config-> .config = &genphy_config_aneg,
以上就是phy驱动基于cpsw的基本流程。
小知识点:ffs用来查找整数中第一个bit为1的数。
uboot调试过程:用来调试phy不通的过程(am3352)相关推荐
- linux如何调试elf程序,Linux下ELF的执行过程
我们考虑从shell中执行一个Linux应用程序,并且该应用程序链接的是动态库,而不是静态库 1. 加载二进制文件 shell会执行evecve()进行系统调用,如下所示 execve() -> ...
- 【Flutter】Flutter 调试 ( 调试回退功能 | Debug 调试中查看变量的方式 | 控制台信息 )
文章目录 一.调试回退功能 二.Debug 调试中查看变量的方式 三.Debug 控制台信息 四.相关资源 一.调试回退功能 在调试过程中 , 经常错过关键位置的调试 , 如没有进入关键方法进行调试 ...
- 调试笔记--keil 断点调试小技巧
调试笔记–keil 断点调试小技巧 给变量打断点 调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事. 将要监视的全局变量添加到watch窗口 选中 ...
- tensorflow 调试_如何开始调试TensorFlow
tensorflow 调试 by Daniel Deutsch 由Daniel Deutsch 如何开始调试TensorFlow (How to get started debugging Tenso ...
- vscode调试html文件,vscode调试html文件
1. vscode调试html文件 主要说明使用使用Debugger for Chrome插件如何配置,以及Nodejs的方式调试. 本文的配置方式是基于deepin系统的,适用于所有debian系的 ...
- as的断点调试与高级断点调试
<div class="markdown_views"><blockquote> 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说A ...
- 借WS2812 PWM DMA驱动调试浅谈STM32调试思路
借WS2812 PWM DMA驱动调试浅谈STM32调试思路 接触STM32差不多有4年了,在学校参加比赛时也需要进行各种调试工作,团队的配合也需要个人具有领域内快速定位与解决BUG的能力,前些日 ...
- GDB调试命令以及GDB调试段错误
一.GDB的调试命令. C语言是:cc -g tst.c -o tst;C++是g++ -g -o (生成的文件) file.cpp C++调试程序命令:gdb file 启动,罗列代码行数ist ...
- UVM交互式调试库:缩短调试周转时间
摘要: 与其他硬件验证语言(Hadware Verfication Languages,HVL)(例如Specman e)不同,在System Verilog(SV)模拟中是不原生支持交互式调试功能的 ...
- 联芯 1860平台 icn6211 mipi to RGB 转换芯片 调试 和 st7789 LCD调试spi 9bit 模式
关键字:联芯科技,LC1860,LC186x,Chipone Technology,icn6211,mipi bridge,mipi to RGB,mipi转换芯片,RGB666,st7789,st7 ...
最新文章
- Centos 7 docker 拉取镜像慢
- android 创建文件夹_Android安全(四)数据库 之 SQLite数据库
- IOS之Masonry约束的使用
- div无法触发blur事件解决的方法
- mysql三表where查询_mysql三表查询sql语句
- 蒙特卡罗模拟法 —— matlab
- 微信公众号开发之微信服务器配置
- 修改vCenter client无法连接
- BZOJ3235 [Ahoi2013]好方的蛇 【单调栈 + dp】
- MacOS如何修复磁盘权限
- 集成电路布图设计独创性判断标准
- access简述报表的功能_报表的主要功能_access标签报表有什么作用
- 使用prewitt算子分割白纸黑字图像(Matlab)
- fluent的udf在windows可以编译 linux错误,fluent中udf环境变量设置,简单可行!已试过!...
- Bootstrap broker localhost9092 (id -1 rack null) disconnected
- FlashPaper组件——api
- 来自Facebook的KTLS(Kernel SSL/TLS)原理和实例
- Zotero+OneDrive多平台在线同步完美解决方案(一):安装配置、云端同步文献数据
- 智能家居2.0 - Matter 1.0 标准和受益者
- 达观杯数据竞赛 -- LR+SVM处理词向量特征