嵌入式linux 修改mac,MAC to MAC 环境下,嵌入式linux的修改
MAC to MAC ,网卡驱动应该如何调整
正常情况下,完整的网卡由MAC和PHY两部分组成。
PHY的含义很广,不知道的wiki之。
简单地说,是物理层芯片。在TCP/IP协议中,数据链路层之上的所有数据,都可以在你的内存里由软件来访问控制。但是最终在网线和光纤上的数据,不会严格按照内存里的数据发送。这是由物理特性决定的。例如高速串行总线上,如果有大量连续的1出现,会导致AC耦合电容充满,影响信号完整性。所以4/5b 、 8/10b转换是phy常见的工作。
MAC和phy之间是由MII以及衍生升级的RMII、RGMII、SGMII 连接。其中还有2根类似i2c的MDC/MDIO总线。MII用来传输大量的数据。MDC/MDIO用来访问PHY的寄存器,获取和配置链路状态。
phy的另外一头,再经过网络变压器,出来的就是熟悉的RJ45 了。
典型用法如下:
MAC ----MII及其衍生总线----PHY -------网线、光纤------ PHY ----MII及其衍生总线---- MAC
MAC和PHY可以集合在一个芯片内,也可以分开,都很常见。phy寄存器也有一部分是遵循通用标准的。
在嵌入式产品中,典型的如交换机,很可能核心就是一个交换机芯片。高级的交换机芯片允许通过管理口IMP进行配置,这个IMP口通常连接到嵌入式cpu的网口上。这个cpu和交换机芯片都在同一个紧凑电路板上,如果它们之间再经过2个phy,实在浪费钱和电。
于是另一种经典应用诞生了: MAC to MAC
MAC----MII及其衍生总线---- MAC
在这种配置下,因为缺少了关键的phy,对于软件的影响很严重。没办法进行链路自动配置了,不知道速度、link、全双工/半双工。
在嵌入式linux环境下,需要uboot和linux都进行修改。
uboot需要配置交换机,强行设置交换机端的MAC为需要的速度和工作模式,强行设置为link 。
然后也需要强行设置cpu的对应网口,忽略phy的操作,强行配置速度和工作模式。然后才能在uboot下使用这个网口。
linux下也一样,会简单些,因为交换机端MAC已经配置好了。
linux的操作有些通用的可能么就简单写一下:
genphy_config_init 开头添加,
点击(此处)折叠或打开
#if 1
//xy add
if(phydev->addr==0x1e)
{
printk("p1013 eth1 has no phy,force to fixup ,step 1\n");
features |= SUPPORTED_Autoneg;
features |= SUPPORTED_1000baseT_Full;
goto end;
}
#endif
在phy_state_machine 的开头添加
点击(此处)折叠或打开
#if 1
//xy add
if(phydev->addr==0x1e)
{
phydev->link=1;
phydev->speed = SPEED_1000;
phydev->duplex = DUPLEX_FULL;
phydev->autoneg = AUTONEG_DISABLE;
phydev->state = PHY_RUNNING;
if(phydev->fix==0)
{
printk("p1013 eth1 has no phy,force to fixup,step 2 \n");
netif_carrier_on(phydev->attached_dev);
phydev->adjust_link(phydev->attached_dev);
phydev->fix=1;
}
}
#endif
这里增加了一个struct phy_device的成员fix,记录只需要修复一次。
嵌入式linux 修改mac,MAC to MAC 环境下,嵌入式linux的修改相关推荐
- Windows环境下使用Linux命令
1.说明 如何在Windows环境下使用Linux命令, 这是一个屡见不鲜的问题, 而且已经有很多解决方法, 下面仅推荐几个我觉得好用的工具, 这些工具可能就是我们常用的软件, 而且已经在Window ...
- Linux系统编程及应用——ubuntu环境下
Linux系统编程及应用--ubuntu环境下 程序由业务逻辑和系统访问两部分构成的.其中,业务逻辑是根据业务需求,按照设计好的逻辑规则,处理信息,与系统(平台)无关的:而系统访问则是利用操作系统所提 ...
- 缺少nst linux.mbr文件,用EasyBCD2.0在Windows环境下引导Linux启动
用EasyBCD2.0在Windows环境下引导Linux启动 以在Win7环境下用EasyBCD2.0.2引导Ubuntu启动为例(Ubuntu安装在Win7之前,倘若反了进不去Win7,可以用Wi ...
- 成功解决Windows10环境下运行Linux系统下的.sh文件
成功解决Windows10环境下运行Linux系统下的.sh文件 目录 解决问题 解决方法 解决问题 Windows10环境下运行Linux系统下的.sh文件 解决方法 .sh是shell scrip ...
- windows下学习linux,在Windows环境下学习Linux命令行的几种方法
Linux高手通常将Windows工作平台的人鄙视得一无是处, 其实这完全没有必要.请不要装. 对于想进军linux的人来说, 学好linux命令行无疑是最基本的东西. 本文讲述如何在Windows环 ...
- Ubuntu环境下基于Linux进行DOL配置
Ubuntu环境下基于Linux进行DOL配置 Description The distributed operation layer (DOL) is a framework that enable ...
- Android在Shell环境下运行Linux命令
Android的底层其实linux,所以可以在android shell下运行linux命令,尤其是经过root处理的Android系统,基本上可以通过调用linux命令完全操作手机,下面的RootC ...
- MAC OX 10.8 环境下运行TLD算法(MATLAB版)
关于TLD算法,就不具体阐述了,谷歌百度搜索一下,介绍的文章相当多. 概述: 一.安装和编译高性能OpenCV 2.4.6 二.安装xcode和command line tool 三.MATLAB安装 ...
- linux 查看mysql安装目录_Linux环境下安装MySQL数据库示例教程
点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 Linux环境对大多数SQL初学者还是比较陌生,今天给大家演示一下如何在Linux环境 ...
- soc eds能 编译linux,【转】在SoCEDS环境下编译和更新preloader和uboot程序的方法
[转]在SoCEDS环境下编译和更新preloader和uboot程序的方法 [复制链接] 在SoCEDS环境下编译和更新preloader和uboot程序的方法 前面有介绍preloader在HPS ...
最新文章
- iBATIS.NET
- Java编程中的基本概念
- hdfs中与file数组类似的数组_EXCEL中数组的应用专题之十二:行列数相同数组的运算...
- final、finally 和 finalize的区别
- Futter基础第4篇: 实现基础列表组件、 水平列表组件 、 图标组件【ListView、Axis.vertical、Axis.horizontal】
- 判断某个值是否存在指定枚举类中
- SQL SERVER 2005 批量收缩数据库
- 开源字体dejavu-fonts-ttf-2.37 的使用和测试
- 【重识云原生】第四章云网络第二节——相关基础知识准备
- 邮件系统html源码,SpringBoot系列—简单的邮件系统(附完整项目代码)
- 做自媒体视频剪辑到哪里找素材?
- 使用Java在浏览器页面无法导出excel表格
- 我们开发了一款待办事项分享平台——待办库(Todo Store)
- strace命令总结
- Linux全面解析讲解
- 网络请求未知错误 CLEARTEXT communication to XX not permitted by network security policy 解决方案
- 山洪灾害监测预警系统解决方案
- 如何让excel中一部分表格显示但不打印?
- Android SDK简介
- mysql 面试题 查出每门课程成绩都不低于80分同学的名字
热门文章
- seaweedfs上传文件为什么要先申请文件号?(/dir/assign)(两种工作模式:Volume模式与Filer模式)(seaweed上传文件)
- C语言:二维数组:求平均数
- Linux 字体微调
- 物联网在车联网中的应用
- 171029 windows10 桌面美化
- java中高效遍历list_Java中四种遍历List的方法总结(推荐)
- oracle通过imp导出数据库时提示:这些对象由***导出,而不是当前用户解决方法
- IndexedDB踩坑必须注意点!!!
- SpringCloud 基本使用
- Vue移动网页开发调试过程(第二篇)——weinre