雄迈板子,3535芯片,网络芯片是AR8035,kernel驱动怎么弄
1 E币
成为会员,免费下载资料
文件大小:4.86 KB
上传者:ngswfx
时间:2016-05-11 01:42:30
下载量:47
本帖最后由 ngswfx 于 2016-5-23 18:25 编辑
越搞越糊涂了,对PHY硬件连接百思不得其姐。
不是内部已经集成了网络了吗,怎么又搞个8035,通常这种情况下,怎么弄驱动呀。
主要是这个3535是BGA,想测量连接的哪条腿都没法量。不像3520,万用表就搞定了。
是不是在kernel里面,开启MII PHY方式,调试驱动呀? 哪位大侠指点一下,我感觉我在走弯路。
//////////////////////////////////////////////////////////////////最新的动作是,直接将U-boot里面所有网络东西都禁用,仅仅在kernel里面配置网络相关的参数。
//初步计划是彻底放弃Uboot网络支持,使其能支持u盘自动升级即可。但3535 kernel网络AR8035一定要搞过去,因为自我感觉已经到了关键结点了。就差2\3个参数了。流程基本都走通了。
2016_5_11
//////////////////终于搞定了,主要是牵扯的调节项太多,没搞过驱动这种东西,一上来就搞,网上资料没有能照着模仿的,研究了3天,编译刷了1500多次kernel:lol ,没有相关文档,自己摸索,任何一个有用的log信息,都对这次编程解决问题过程,提供很大帮助。
最后主要卡在menuconfig中,那个STMMAC (0x7) STMMAC MDIO INTERFACE ,设置成6不行,必须7才行。不知道啥意思,这个是今天黔驴技穷了,估计是配置寄存器没对,想想干脆用雄迈Uboot,然后进入kernel后,啥寄存器我都不动,尝试。
突然发现雄迈uboot,log中,有一个PHY mode=7的信息。
然后这个板子,最开始估计连接的是MAC1端口,其实连接的是MAC0。主要在menuconfig中,将PHY ID配置成2即可。
另外AT303X.c文件中的,#define AT803X_DEVICE_ADDR 0x03,不用管,保持3即可。开始总觉得这个是不是应该为2,其实不是,就是3。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
附件当中,是at303x.c文件,以及Kconfig,Makefile文件,可以使-*- PHY Device support and infrastructure ---> 中出现 ar3035选择项。
注意:at303x.c文件被我改的很乱,需要自己清空printk ,有些代码还需要整理。
/////////////////////////////
home/ngs/Hi3535_SDK_V1.0.2.0/osdrv/kernel/linux-3.4.y/drivers/net/ethernet/stmmac,这里面的东西应该无需调整,可以直接使用。
/home/ngs/Hi3535_SDK_V1.0.2.0/osdrv/kernel/linux-3.4.y/drivers/net/phy ,目录里面就是用那3个文件,覆盖就行了。
然后就是配置menuconfig。我选定了PHY DMA 等选项,是在3535的小型化配置文件基础上修改的。
#cp arch/arm/configs/hi3535_mini_defconfig .config
////////////////////////////////////////////我的百纳币太少太丢人,只能挣些小钱了,呵呵。
顺便吐槽一下,又爱又恨的海丝。
static int stmmac_syscfg_init(struct platform_device *pdev) 函数里面有一句代码,差点让我吐血。
pr_info("Set system config register 0x200300ec with value 0x003f003f\n");
//这次搞驱动过程中,打印出了这个log信息,这个很明显,已经写入寄存器值,我还挺高兴,结果一看源代码,无语了.......这种信息能随便打印吗:lol
我又掉进坑里了。 而且这个地址寄存器值到底啥意思,我现在也没搞懂,只知道,如果writl直接写这个寄存器,系统就崩溃。代码中得到的寄存器地址,和这个0x200300ec完全不是一回事,差得老远了。不知所谓。
//////////////////////////////////////////////////2016_5_21 调整修改phy.c中void phy_state_machine(struct work_struct *work),使断线检测以及换交换机100M 1000M正常
case PHY_RUNNING:
printk("PHY_RUNNING phydev->irq:%d\n",phydev->irq);
///////////////////////////////////////////////////////////ngs add for 8035
err = genphy_update_link(phydev);
if (err)
break;
if (!phydev->link) {
phydev->state = PHY_NOLINK;
printk("PHY_RUNNING found link off\n");
netif_carrier_off(phydev->attached_dev);
phydev->adjust_link(phydev->attached_dev);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
越搞越糊涂了,对PHY硬件连接百思不得其姐。
不是内部已经集成了网络了吗,怎么又搞个8035,通常这种情况下,怎么弄驱动呀。
主要是这个3535是BGA,想测量连接的哪条腿都没法量。不像3520,万用表就搞定了。
是不是在kernel里面,开启MII PHY方式,调试驱动呀? 哪位大侠指点一下,我感觉我在走弯路。
//////////////////////////////////////////////////////////////////最新的动作是,直接将U-boot里面所有网络东西都禁用,仅仅在kernel里面配置网络相关的参数。
//初步计划是彻底放弃Uboot网络支持,使其能支持u盘自动升级即可。但3535 kernel网络AR8035一定要搞过去,因为自我感觉已经到了关键结点了。就差2\3个参数了。流程基本都走通了。
2016_5_11
//////////////////终于搞定了,主要是牵扯的调节项太多,没搞过驱动这种东西,一上来就搞,网上资料没有能照着模仿的,研究了3天,编译刷了1500多次kernel:lol ,没有相关文档,自己摸索,任何一个有用的log信息,都对这次编程解决问题过程,提供很大帮助。
最后主要卡在menuconfig中,那个STMMAC (0x7) STMMAC MDIO INTERFACE ,设置成6不行,必须7才行。不知道啥意思,这个是今天黔驴技穷了,估计是配置寄存器没对,想想干脆用雄迈Uboot,然后进入kernel后,啥寄存器我都不动,尝试。
突然发现雄迈uboot,log中,有一个PHY mode=7的信息。
然后这个板子,最开始估计连接的是MAC1端口,其实连接的是MAC0。主要在menuconfig中,将PHY ID配置成2即可。
另外AT303X.c文件中的,#define AT803X_DEVICE_ADDR 0x03,不用管,保持3即可。开始总觉得这个是不是应该为2,其实不是,就是3。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
附件当中,是at303x.c文件,以及Kconfig,Makefile文件,可以使-*- PHY Device support and infrastructure ---> 中出现 ar3035选择项。
注意:at303x.c文件被我改的很乱,需要自己清空printk ,有些代码还需要整理。
/////////////////////////////
home/ngs/Hi3535_SDK_V1.0.2.0/osdrv/kernel/linux-3.4.y/drivers/net/ethernet/stmmac,这里面的东西应该无需调整,可以直接使用。
/home/ngs/Hi3535_SDK_V1.0.2.0/osdrv/kernel/linux-3.4.y/drivers/net/phy ,目录里面就是用那3个文件,覆盖就行了。
然后就是配置menuconfig。我选定了PHY DMA 等选项,是在3535的小型化配置文件基础上修改的。
#cp arch/arm/configs/hi3535_mini_defconfig .config
////////////////////////////////////////////我的百纳币太少太丢人,只能挣些小钱了,呵呵。
顺便吐槽一下,又爱又恨的海丝。
static int stmmac_syscfg_init(struct platform_device *pdev) 函数里面有一句代码,差点让我吐血。
pr_info("Set system config register 0x200300ec with value 0x003f003f\n");
//这次搞驱动过程中,打印出了这个log信息,这个很明显,已经写入寄存器值,我还挺高兴,结果一看源代码,无语了.......这种信息能随便打印吗:lol
我又掉进坑里了。 而且这个地址寄存器值到底啥意思,我现在也没搞懂,只知道,如果writl直接写这个寄存器,系统就崩溃。代码中得到的寄存器地址,和这个0x200300ec完全不是一回事,差得老远了。不知所谓。
//////////////////////////////////////////////////2016_5_21 调整修改phy.c中void phy_state_machine(struct work_struct *work),使断线检测以及换交换机100M 1000M正常
case PHY_RUNNING:
printk("PHY_RUNNING phydev->irq:%d\n",phydev->irq);
///////////////////////////////////////////////////////////ngs add for 8035
err = genphy_update_link(phydev);
if (err)
break;
if (!phydev->link) {
phydev->state = PHY_NOLINK;
printk("PHY_RUNNING found link off\n");
netif_carrier_off(phydev->attached_dev);
phydev->adjust_link(phydev->attached_dev);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
展开》
折叠》