RMII网络的系统固件制作说明书
1. 修改配置文件并使配置文件生效
a. make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
b. 修改项
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> hieth(switch fabric) family network device support --->
(1) hieth mii/rmii mode for up port (mii:0/rmii:1)
(1) hieth mii/rmii mode for down port (mii:0/rmii:1)
2. 修改驱动中网络时钟
a. 修改文件
linux-3.0.y/drivers/net/hieth-sf/net.c
b. 修改点
在函数static void phy_quirk(struct hieth_mdio_local *mdio, int phyaddr)中加入以下内容
/* PHY-8201 */
if ((phy_id & 0xFFFFFFF0) == 0x1cc810)
{
if (CONFIG_HIETH_MII_RMII_MODE_U == 1) //1 means rmii mode
{
hieth_mdio_write(mdio, phyaddr, 0x1F, 0x7);
reg = hieth_mdio_read(mdio, phyaddr, 0x10);
reg |= (1 << 12);
hieth_mdio_write(mdio, phyaddr, 0x10, reg);
hieth_mdio_write(mdio, phyaddr, 0x1F, 0x0);
}
}
3. 加入LED闪烁代码
a. 修改文件
drivers/net/hieth-sf/sys-3518.c
b. 修改项
在该文件尾加入以下函数
void config_led_shine(void)
{
#define IO_MDIO_RWCTRL IO_ADDRESS(CONFIG_HIETH_IOBASE + MDIO_RWCTRL)
#define tmp_mdio_ready() (readl(IO_MDIO_RWCTRL) & (0x1 << 15))
unsigned int reg_value = 0;
/* select page 7 */
do {
reg_value = 0x0007215f; //配置LED的寄存器在page7
writel(reg_value, IO_MDIO_RWCTRL);
udelay(10);
} while (!tmp_mdio_ready());
/* enable LED modify function */
do {
reg_value = 0xc00c2153; //写phy的19号寄存器,配置各LED功能:00=LED0:ACTall;LED1:LINK100
writel(reg_value, IO_MDIO_RWCTRL);
udelay(10);
} while (!tmp_mdio_ready());
/* set green LED shine all the while when link up,
* yellow LED blink when data coming
*/
do {
reg_value = 0x00382151; //写phy的17号寄存器,配置LED动作:一个link即亮,一个有数据即闪
writel(reg_value, IO_MDIO_RWCTRL);
udelay(10);
} while (!tmp_mdio_ready());
return;
}
c. 修改文件
drivers/net/hieth-sf/sys.c
d. 修改项
在void hieth_sys_init(void)函数中加入以下行
hieth_reset(0); //前一行
86 config_led_shine(); //加入该行
revise_led_shine(); //后一行
4. 编译
a. make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage
5. 文件
a. 编译成功后会生成文件arch/arm/boot/zImage(最终系统文件,3M多)
阅读(2731) | 评论(0) | 转发(0) |