1.调试过程遇到千兆网口起不来的问题,后来发现是phy地址不对应导致;

2.百兆网口起不来,而且整个主板有4个网口,一直显示只有两个网口硬件。目前还在排查原因。

对于设备数的语法网上已经有很多了,但是懂了语法之后可能还是不太理解具体设备树的工作原理,这里以ti的CPSW为例说明设备树与内核的驱动之家的微妙关系。

cpsw就是ti公司的Common Platform Ethernet Switch 的缩写,CPSW为三端口调换器(three port switch ),一个cpu端口,两个外部端口。CPSW或者说以太网调换驱动遵循标准的Linux网络接口构造。

对于TI的am335x的CPSW的设备树来说,其定义在am33x.dtsi文件中,内容如下:

mac:ethernet@4a100000 {

compatible ="ti,cpsw";

属性,这是跟驱动函数的匹配字符串,要跟驱动中一直。必须为“ti,cpsw“

ti,hwmods ="cpgmac0";

可选属性:对硬件模块的配置,为了跟驱动,必须是"cpgmac0"

clocks =<&cpsw_125mhz_gclk>, <&cpsw_cpts_rft_clk>;

指定时钟,其定义在 am33xx-clocks.dtsi文件中

clock-names ="fck", "cpts";

cpdma_channels = <8>;

cpdma(common platformdma)的通道数

ale_entries= <1024>;

制定ALE条目

bd_ram_size =<0x2000>;

描述内部ram的大小

no_bd_ram = <0>;

设置 HW descriptor 是否在内部bd ram,只能是0或者1

rx_descs = <64>;

制定RX描述符的个数

mac_control = <0x20>;

制定默认MAC控制寄存器的内容

slaves = <2>;

从站数量

active_slave = <0>;

cpts_clock_mult =<0x80000000>;

时钟周期转换ns系数的分子

cpts_clock_shift =<29>;

时钟周期转换ns系数的分母

reg = <0x4a100000 0x800

0x4a101200 0x100>;

cpsw寄存器映射地址

#address-cells = <1>;

#size-cells = <1>;

interrupt-parent =<&intc>;

父中断控制器

/*

* c0_rx_thresh_pend

* c0_rx_pend

* c0_tx_pend

* c0_misc_pend

*/

interrupts = <40 41 4243>;

描述中断号

ranges;

davinci_mdio: mdio@4a101000{

compatible ="ti,davinci_mdio";

#address-cells =<1>;

#size-cells =<0>;

ti,hwmods ="davinci_mdio";

bus_freq =<1000000>;

reg = <0x4a1010000x100>;

};

cpsw_emac0: slave@4a100200{

以太网控制器

/* Filled in byU-Boot */

mac-address = [ 0000 00 00 00 00 ];

};

cpsw_emac1: slave@4a100300{

/* Filled in byU-Boot */

mac-address = [ 0000 00 00 00 00 ];

};

phy_sel:cpsw-phy-sel@44e10650 {

compatible ="ti,am3352-cpsw-phy-sel";

reg= <0x44e106500x4>;

phy寄存器的基地址和寄存器大小

reg-names ="gmii-sel";

};

};

接下来看一下内核是如何调用这些参数的:

首先在文件Cpsw.c (drivers\net\ethernet\ti)中的平台驱动结构体中有of_match_table匹配函数:

static structplatform_driver cpsw_driver = {

.driver = {

.name      = "cpsw",

.owner    = THIS_MODULE,

.pm  = &cpsw_pm_ops,

.of_match_table= cpsw_of_mtable,

},

………………

};

驱动是否执行probe函数就是通过上面的函数判断的,就本例而言,首先会通过of_match_table进行判断是否在设备树种可以找到配对资源信息,假如在dtb文件中找不到其次判断是否在平台设备中是否有name为”cpsw”的设备,假如有的话则获取设备信息,然后执行驱动函数。但是,显然之前没有对platform_devicecpsw_device进行设置,因此一般情况下无法配对成功。

进一步展开of_match_table函数可得:

static conststruct of_device_id cpsw_of_mtable[] = {

{.compatible ="ti,cpsw", },

{ /* sentinel */ },

};

结构体中.compatible = "ti,cpsw",正好跟设备树中的cpsw节点属性一致。于是会匹配成功,进而执行probe函数。

在probe函数中,驱动为了获取dts中设置的参数,其调用了cpsw_probe_dt。该函数的主要获取数据的函数有:

of_property_read_u32(node,"slaves", &prop)

获取在dts文件中的slaves的个数:slaves = <2>;

of_property_read_u32(node,"active_slave", &prop)

获取设定的active_slave的参数:active_slave= <0>;

of_property_read_u32(node,"cpts_clock_mult", &prop)

获取设定的cpts_clock_mult的参数:cpts_clock_mult = <0x80000000>;

后面的很多也很类似,不再一一列出。

就这样吧,内核启动就把dts中的信息读出来然后为之后的驱动程序提供数据。

参考:https://blog.csdn.net/wxxgoodjob/article/details/77893303

TI AM5728 CPSW网口调试笔记相关推荐

  1. 转载:ZYNQ+linux网口调试笔记(1)PS-GEM0

    ZYNQ+linux网口调试笔记(1)PS-GEM0 转载原文:https://www.jianshu.com/p/a4e25e8b2f5e 开发环境 Windows SDK 2017.4 Ubunt ...

  2. zynq linux ip配置,ZYNQ+linux网口调试笔记(2)PS-GEM1

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  3. zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  4. TI AM5728 RTOS环境搭建笔记

    官方文档: http://software-dl.ti.com/processor-sdk-rtos/esd/AM57X/latest/index_FDS.html

  5. TI AM5728 SDK升级之 linux设备树解析,以网口cpsw为例

    如果一个结点描述的设备有地址,则应该给出@unit-address.多个相同类型设备结点的name可以一样,只要unit-address不同即可,如本例中含有cpu@0.cpu@1以及serial@1 ...

  6. OMAPL138调试笔记

    title: Linux 嵌入式使用 tags: 新建,模板,小书匠 grammar_cjkRuby: true Copyright (C) @2018 Widic Filename:File-fun ...

  7. OMAP3530-mini调试笔记(2)

    PS:USB不能正常工作的根本原因参见调试笔记(3) 各个版本的x-loader和u-boot对kernel的支持情况: U-Boot 2011.12-00010-ga3eb89c (Jan 29 2 ...

  8. 基于TI AM5728(浮点双DSP C66x +双ARM Cortex-A15)的开发板

    开发板简介 基于TI AM5728浮点双DSP C66x +双ARM Cortex-A15工业控制及高性能音视频处理器: 多核异构CPU,集成双核Cortex-A15.双核C66x浮点DSP.双核PR ...

  9. TI AM5728 DSP+ARM+FPGA多核异构工业控制处理器

    TI AM5728 DSP+ARM+FPGA多核异构工业控制处理器. DSP用于复杂算法处理,ARM用于通用事务管理,FPGA用于高速信号采集,是个完美的高性能嵌入式工业主板组合. DSP算法开发 对 ...

最新文章

  1. .net mvc mssql easyui treegrid
  2. 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
  3. LeetCode集锦(十) - 第28题 Implement StrStr
  4. spring-cloud学习demo,git地址
  5. Vertica系列: Vertica 数仓简单介绍
  6. 转 《pywinauto进行win32应用程序的测试》
  7. php联合查询的前提条件,PHP生成HTML前提条件及原理介绍_PHP教程
  8. 思考 | 西湖大学博导:都说不唯论文,那我们发表论文是为了什么?
  9. python2.7没有pip_python2.7无法使用pip怎么办
  10. linux服务器之LVS、Nginx和HAProxy负载均衡器对比
  11. RocketMQ的底层通信模块remoting 源码解析
  12. Visual Studio中C++关于Unicode字符集和多字节字符集
  13. windowsxp系统桌面卡住了解决
  14. 语音识别_ML-KWS-for-MCU_资料整理
  15. 易语言浏览本地html,简单的易语言读取网页文本程序
  16. linux下载文件到本地
  17. is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used......
  18. ERP(Enterprise Resource Planning)/企业资源计划
  19. /dev下面存在设备,却open 失败的问题open: No such device or address
  20. Zigbee 无线传感网络 无线通信技术 协议体系结构 OSAL

热门文章

  1. 浮点数为什么不精确?
  2. 对豆瓣电影Top250榜单的一些探索性分析
  3. 盘点软件可以解决哪些固定资产盘点问题
  4. Visualforce 标签(一)
  5. 上班族用哪个邮箱好用,如何正确使用邮件工作?
  6. 安卓手机如何更改开机 关机 动画
  7. python3 + scrapy爬取妹子图(meizitu.com)
  8. 华为、字节跳动、蔚来、康师傅、法雷奥、AIG等公司高管变动
  9. IOS 点击空白处隐藏键盘的几种方法
  10. 解决ntp的错误:no server can be used,exiting