zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)
在zynq开发板zc706上,网络通路由下面三个设备组成:
其中zynq负责对phy进行配置,当zynq上的网络控制器以及phy完成正确配置时,能够看到RJ45上面的黄灯亮,此时表明链路已经通了。如果u-boot中已经设置了IP地址,通过网线就可以ping通电脑,此时会打印host alive这句话。
但是如果板子不是这样做的,比如是下面这种方式:
这里用到了BCM5396网络交换芯片,此时要保证网络链路通就需要对5396和两个PHY进行配置。幸运地是,PHY0由5396进行配置,当我们对5396进行正确配置后,PHY0也就配置完成了,PHY1的配置还是老样子。整个配置可以分为两步走,首先通过SPI总线配置5396,再配置PHY1,完成全部配置后,就能看到RJ45上面的黄灯亮起。
u-boot中需要修改的代码主要涉及三个地方
1、 arch/arm/lib/Board.c
其中board_init_r函数中需要在网络驱动配置前加入配置bcm5396的函数调用,这里我放在了串口驱动配置之后运行。
void board_init_r(gd_t *id, ulong dest_addr)
{
ulong malloc_start;
#if !defined(CONFIG_SYS_NO_FLASH)
ulong flash_size;
#endif
gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r");
monitor_flash_len = _end_ofs;
/* Enable caches */
enable_caches();
debug("monitor flash len: %08lX\n", monitor_flash_len);
board_init(); /* Setup chipselects */
/*
* TODO: printing of the clock inforamtion of the board is now
* implemented as part of bdinfo command. Currently only support for
* davinci SOC's is added. Remove this check once all the board
* implement this.
*/
#ifdef CONFIG_CLOCKS
set_cpu_clk_info(); /* Setup clock information */
#endif
serial_initialize();
myspi_init(); /*init bcm5396*/
printf("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
#ifdef CONFIG_LOGBUFFER
2、 net/Eth.c
在其中加入配置bcm5396的代码
void myspi_init()
{
XSpiPs Spi;
int i32Option,status;
int i;
unsigned char workBuf[10];
workBuf[0]=0xf0;
workBuf[1]=0x1;
g_SpiConfig = &XSpiPs_ConfigTable[0];
//Initialize the SPI device.
Spi.IsBusy = 0;
Spi.Config.BaseAddress = g_SpiConfig->BaseAddress;
//Spi.StatusHandler = StubStatusHandler;
Spi.SendBufferPtr = NULL;
Spi.RecvBufferPtr = NULL;
Spi.RequestedBytes = 0;
Spi.RemainingBytes = 0;
Spi.IsReady = 0x11111111;
XSpiPs_WriteReg(Spi.Config.BaseAddress,0,0x00020000);
//Initialize the SPI device. end
i32Option = 0x1 | 0x2 | 0x4 | 0x10;
Spi_SetOptions(&Spi, i32Option);
XSpiPs_SetSlaveSelect(&Spi,1 );
XSpiPs_SetClkPrescaler(&Spi, 6 );
workBuf[0]=0xf0;
workBuf[1]=0x1;
workBuf[2]=0;
for(i=0x10;i<=0x1f;i++)
{
status = writeBCM5396(&Spi, i, 0x20, workBuf );
}
printf("*****************Read SPI Reg of 5396******************\r\n");
printf("---BMC Status Registers(PAGE 0x10-0x1F)---\n");
for(i=0x10;i<=0x1f;i++)
{
status = readBCM5396(&Spi, i, 0x28, workBuf );
printf("port=%d,offset=0x28,data=0x%x\n",(i-0x10),workBuf[2]);
printf("port=%d,offset=0x29,data=0x%x\n",(i-0x10),workBuf[3]);
}
printf("---BMC Status Registers(PAGE 0x10-0x1F)---\n\r");
for(i=0x10;i<=0x1f;i++)
{
status = readBCM5396(&Spi, i, 0x20, workBuf );
printf("port=%d,offset=0x20,data=0x%x\n\r",(i-0x10),workBuf[2]);
printf("port=%d,offset=0x21,data=0x%x\n\r",(i-0x10),workBuf[3]);
}
}
3、 drivers/net/Zynq_gem.c
这里的修改是可选项,主要是配置phy,我这里使用的是marvell的88E1111,u-boot中提供的配置方法不起效,于是进行了手动配置。加了phy_detect和negotiat函数
static void phy_negotiat(struct eth_device *dev)
{
struct zynq_gem_priv *priv = dev->priv;
u16 control;
u16 status;
u16 temp;
u16 timeout_counter=0;
printf("Start PHY autonegotiation.\n");
phywrite(dev,priv->phyaddr, 22, 2);
phyread(dev, priv->phyaddr, 21, &control);
control |= 0x0030;
phywrite(dev, priv->phyaddr, 21, control);
phywrite(dev, priv->phyaddr, 22, 0);
zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)相关推荐
- zc706开发板的linux开发,第一篇:zc706 开箱及开发环境搭建
第一篇:zc706开箱及开发环境搭建 1.拿到zc706时的封装箱子,从该工具箱中打开后,将看到内含的器件: 2.其中zc706评估板具体各部分说明如下: 在拿到开发板后,默认开发板上的拨码开关以及跳 ...
- 基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘
基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘 硬件:迅为2K1000开发板 固态硬盘 LS2K1000 龙芯处理器支持 SATA 接口,所以在迅为开发板的底板板载了一个 M2 接 ...
- Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核
Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核 一.下载内核源码 wget http://ftp.sjtu.edu ...
- 5、赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统
5.赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统 声明:本文是学习赛灵思 Zynq UltraScale+ MPSoC 5EV过程中 ...
- ZC706开发板SI5324配置
ZC706开发板上的SI5324需要通过I2C配置,官网找了一圈,只有VC709和KC705的例程,都是基于MICROBLAZE的,改到ZC706上问题也不大,准备动手这际,转念一想,何不去看一下ZC ...
- 【GD32F427开发板试用】RT-THREAD标准版 移植使用
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:打盹的消防车 前言: 无意在微信看到了GD做活动,想到了第一时间体验一下,搭配RT-TH ...
- 《鸟哥的Linux私房菜》个人学习笔记-第一篇
<鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...
- 在Android开发板跑一个LED驱动的历程(个人笔记)
[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 在Android开发板跑一个LED驱动的历程(个人笔记) 1. 板子端, 放置驱动程序 1.1 编写一个驱动程序 驱动程序的编写上, ...
- Linux内核设计与实现学习笔记目录
**注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...
- 《Linux高性能服务器编程》学习笔记
<Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...
最新文章
- jdk5.0新特性—— 枚举
- CSS深入理解流体特性和BFC特性下多栏自适应布局
- 微信适配国产操作系统:原生支持 Linux
- 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone
- java 快速构建ssm项目_SSM快速搭建
- Bioconductor软件安装与升级
- 算法题 20 或与加
- 构建一个基本的Python迭代器
- HeadFirstJava学习心得——网络编程
- 各大厂面试云集的《520道LeetCode题Java版答案》
- 《深入J2SDK》 总结
- uniapp——ios端和android端微信分享,通过打开appStore和应用宝商店下载
- 【AI创造营】鬼畜小视频
- N4 DVWA CSRF(跨站请求伪造)
- IP SSL证书购买方式
- 陕师大计算机好就业吗,陕师大是好学校吗?陕师大出来好不好就业?
- Flink事件时间、水印以及迟到数据处理的个人理解
- 地平线检测horizon line detection
- 海外休闲游戏的网络连接方案
- 为什么使用聚乙烯醇胶水消泡剂
热门文章
- 云小课 | 网站接入WAF失败怎么办?看这里就够了
- 解密昇腾AI处理器--DaVinci架构(存储系统)
- k 近邻算法解决字体反爬手段|效果非常好
- 搞清楚一道关于Integer的面试题
- python原类、类的创建过程与方法
- mysql empty table_【MySQL】 empty table and delete table.
- ibm db2获取目标时间与当前时间的差值_【学术论文】高帧频视觉实时目标检测系统...
- gui界面如何和内核链接 python_专栏 | 除了内核程序,Abaqus还能这样做二次开发...
- php登录后自动退出登录,PHP利用Cookie设置用户30分钟未操作自动退出功能
- Android笔记 意图传值demo