kernel:linux3.2
cpsw.c
cpsw_probe最后添加代码:
struct proc_dir_entry *phy_entry = NULL;
phy_entry = create_proc_read_entry("phy", 0,
NULL,read_phy_reg_proc,&(priv->slaves[0]));
写read_phy_reg_proc函数:
static int
read_phy_reg_proc(char* page, char** start, off_t off, int count,
int* eof, void* data)
{
struct cpsw_slave *slave = (struct cpsw_slave *)data;
int debug_val = 0;
struct mii_bus *debug_miibus = slave->phy->bus;
int i = 0;
int len = 0;
len +=sprintf(page,"phy->addr:%d.\n",slave->phy->addr);
len +=sprintf(page+len,"phy->phy_id :%08x.\n",slave->phy->phy_id);
for(i = 0;i<0x1F;i++){
debug_val = debug_miibus->read(debug_miibus, slave->phy->addr, i);
len += sprintf(page+len,"phy reg %02x :%08x.\n",i,debug_val);
}
return len;
}
最后cat /proc/phy可以打印出phy寄存器的值。
ps:
有一个工具ethreg可以直接读取phy寄存器的值。