本帖最后由 andy 于 2013-5-29 21:51 编辑
原文:http://blog.csdn.net/andy_wsj/article/details/8991262
网上发现一段话
Allwinner A10 has an ethernet controller that seem to be developped
internally by them.
The exact feature set of this controller is unknown, since there is no
public documentation for this IP, and this driver is mostly the one
published by Allwinner that has been heavily cleaned up.
意思是说,A10内部的以太网控制器只是被allwinner内部开发过,控制器的功能未知,没有公布有关说明文档,
为什么?难道跟IP核的版权有关???
反正我一直没有找到关于A10的WEMAC描述文档,用户手册里面也没有
我想一定有支持A10网络的U-boot,但是我没找到U-boot源代码
最后在网上找到了一段u-boot下的网络驱动代码,准备把它移植到我手上的U-boot中去,实现网络支持
这个驱动的作者没有署名,感谢作者分享代码。
实现过程跟我之前写的一篇文章原理基本一致http://blog.csdn.net/andy_wsj/article/details/8747350,就不再分析了。直接移植,并测试之。
硬件环境:笔记本,cubieboard,USB转串口线,microSD卡+读卡器,网线两根,路由器一个
软件环境:REHL5,编译器arm-none-eabi-版本4.7.2
准备工作:实现SD卡启动http://blog.csdn.net/andy_wsj/article/details/8515197,方便测试
一、移植过程:
1、目录u-boot-sunxi-sunxi/drivers/net/sunxi_wemac.c b/drivers/net/
增加文件sunxi_wemac.c,来源网上:
修改Makefile,增加一句:
COBJS-$(CONFIG_SUNXI_WEMAC) += sunxi_wemac.o
2、文件u-boot-sunxi-sunxi/include/netdev.h
增加一句:
int sunxi_wemac_initialize(bd_t *bis);
3、文件u-boot-sunxi-sunxi/include/configs/sunxi-common.h
增加如下内容:
/* Ethernet support on A10 */
#define CONFIG_SUNXI_WEMAC
#define CONFIG_MII /* MII PHY management */
#define CONFIG_CMD_MII
#define CONFIG_CMD_NET
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_NFS
#define CONFIG_CMD_SNTP
#define CONFIG_CMD_DNS
#define CONFIG_NETCONSOLE
#define CONFIG_BOOTP_SUBNETMASK
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_HOSTNAME
#define CONFIG_BOOTP_NISDOMAIN
#define CONFIG_BOOTP_BOOTPATH
#define CONFIG_BOOTP_BOOTFILESIZE
#define CONFIG_BOOTP_DNS
#define CONFIG_BOOTP_DNS2
#define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_BOOTP_NTPSERVER
#define CONFIG_BOOTP_TIMEOFFSET
#define CONFIG_BOOTP_MAY_FAIL
#define CONFIG_BOOTP_SERVERIP
#define CONFIG_BOOTP_DHCP_REQUEST_DELAY 50000
#define CONFIG_TIMESTAMP
4、文件u-boot-sunxi-sunxi/arch/arm/cpu/armv7/sunxi/board.c
增加头文件包含:
#include <netdev.h>
增加函数:
#if defined(CONFIG_SUNXI_WEMAC)
/*
* Initializes on-chip ethernet controllers.
* to override, implement board_eth_init()
*/
int cpu_eth_init(bd_t *bis)
{
sunxi_wemac_initialize(bis);
return 0;
}
#endif
5、文件u-boot-sunxi-sunxi/include/status_led.h
由于之前打开了LED,编译时会报错,没有定义启动状态指示灯
如果没有打开LED,这一步略去
定义一下:
#define STATUS_LED_BOOT ((7 << 5) + 20) /*set the green one as boot led*/
选择绿色的LED灯作为启动指示灯。
修改
#define STATUS_LED_STATE STATUS_LED_OFF //表示上电之后LED熄灭
6、增加U-boot参数
就是设置一下板子的IP,MAC地址和tftp服务器地址,这个可以在参数文件uEnv.txt里面设置
但是我直接写在代码里,先绕过参数文件制作那一块
文件u-boot-sunxi-sunxi/include/configs/sunxi-common.h里面
#define CONFIG_EXTRA_ENV_SETTINGS \
"console=ttyS0,115200\0" \
"root=/dev/mmcblk0p2 rootwait\0" \
"panicarg=panic=10\0" \
"extraargs=\0" \
"loglevel=8\0" \
"ethaddr=11:22:33:44:55:66\0" \
"ipaddr=192.168.1.20\0" \
"serverip=192.168.1.10\0" \
..............
增加了3行
"ethaddr=11:22:33:44:55:66\0" \
"ipaddr=192.168.1.20\0" \
"serverip=192.168.1.10\0" \
7、编译、测试
二、测试
1、建立tftp服务器,网上搜索建立方法,很多
2、网络连接
路由器一只,网线二根,直接连接。
3、网络配置
设置好地址
4、简单测试,随便准备一个文件,放到tftp根目录下,我的是/tftpboot
启动u-boot,进入命令模式输入:
ping 192.168.1.10
ping痛之后,我把spl/sunxi-spl.bin拷到/tftpboot,执行:
tftp 48000000 sunxi-spl.bin
go 48000000
然后看到执行代码执行了
如果把适合cubieborard的内核uImage拷到/tftpboot
执行上述操作,或者自动执行
那么就可以实现从网络启动linux内核了
这是接下来我准备学习的内容之一
|