u-boot移植之mmc,网卡配置
来源:互联网 发布:java 网络编程源码 编辑:程序博客网 时间:2024/06/07 03:29
最近做的一个产品是用的mx6系列cpu,包括6q、6d、6s、6ul,有已经移植好的成品6q的u-boot,但是只兼容6d,并不兼容6s,所以需要为6s量身打造一个u-boot。
首先,需要下载u-boot:
笔者尝试过Yocto,LTIB,以及手动打补丁的方式全部以失败告终,还顺手写了一篇Yocto的安装说明。
最后笔者是通过fresscale的git下载的最新的u-boot源码,竟然不用修改就能起了,而且mx6dl和mx6s是兼容的,不得不说fresscale的git还是靠谱啊!!
这里会给出所用的u-boot源码的下载方法:
#git clone http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git -b imx_v2015.04_3.14.52_1.1.0_ga
配置及编译:
#make mx6solosabreauto_defconfig#make
这里采用的是mx6solosabreauto_defconfig配置u-boot,根据顶层Makefile,以及配置文件内容可以知道其实这个配置文件用的还是mx6qsabreauto.c和mx6qsabreauto.h。所以后文修改的便是这两个文件。
烧写u-boot到sd卡:
#dd if=u-boot.imx of=/dev/sdb bs=512 seek=2 conv=fsync
下载的源码编译后直接烧写到sd卡,能够启动,但是mmc和net设备识别出错,这也是这篇文章重点要讲的地方。
MMC:
先是有关于mmc的内容。根据原理图可以知道一共采用了一块emmc,加上sd卡,便是两个mmc设备。
笔者所用的板子支持最多3块mmc设备,本文中只用到了两个,uSDHC1为SD卡,uSDHC2没有被使用,uSDHC3是板子上的emmc。
根据原理图,寻找mmc设备的检测管脚:
在原理图中寻找SDx_CDn的管脚,其中x代表1.2.3。最后之发现了一个SD1_CDn,再找到引出的GPIO口,笔者的SD卡检测口为GPIO1_IO0,emmc并没有检测管脚。
了解了管脚的使用之后开始配置管脚。
mx6qsabreauto.c#define USDHC1_CD_GPIOIMX_GPIO_NR(1, 0)//#define USDHC3_CD_GPIOIMX_GPIO_NR(6, 15)
找到这两行,第一行改为(1,0),第二行并没有用到,直接注释掉。
由于emmc没有检测管脚,所以需要更改检测检测管脚的函数使emmc能顺利被初始化(有点拗口):
int board_mmc_getcd(struct mmc *mmc){struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;int ret = 0;switch (cfg->esdhc_base) {case USDHC1_BASE_ADDR:gpio_direction_input(USDHC1_CD_GPIO);ret = !gpio_get_value(USDHC1_CD_GPIO);break;case USDHC3_BASE_ADDR://gpio_direction_input(USDHC3_CD_GPIO);//ret = !gpio_get_value(USDHC3_CD_GPIO);ret = 1 ;break;}return ret;}
注释掉原来的两行代码,直接将ret赋值为1,表示强制认为该设备已经存在。
到此处时再编译下载已经能够识别mmc设备了,u-boot下mmc dev [port]切换设备,mmcinfo查看设备信息。
NET:
接下来就是网卡的配置,先看好网卡的型号,笔者所用的是ATHEROS8031的网卡,根据原理图知道默认是RGMII模式。
mx6qsabreauto.h#define CONFIG_CMD_NET#define CONFIG_CMD_PING#define CONFIG_CMD_DHCP#define CONFIG_CMD_MII#define CONFIG_CMD_NET#define CONFIG_FEC_MXC#define CONFIG_MII#define CONFIG_PHYLIB#define CONFIG_PHY_ATHEROS#define IMX_FEC_BASE ENET_BASE_ADDR#define CONFIG_FEC_XCV_TYPE RGMII#define CONFIG_ETHPRIME "FEC"#define CONFIG_FEC_MXC_PHYADDR 1#define CONFIG_ETHADDR CONFIG_ENET_ETHADDR#define CONFIG_NETMASK CONFIG_ENET_NETMASK#define CONFIG_IPADDR CONFIG_ENET_IPADDR#define CONFIG_SERVERIP CONFIG_ENET_SERVERIP#define CONFIG_GATEWAYIPCONFIG_EMMC_GATEWAYIP
上述代码是对网卡型号,模式的定义,原来的mx6qsabreauto.h文件是没有网卡的宏定义的,这里需要都补上。
由于板子是自动从网络加载boot的,所以还需要配置网关等。
mx6qsabreauto.h#define CONFIG_ENET_ETHADDR12:34:56:78:9A:BC#define CONFIG_ENET_IPADDR192.168.1.180#define CONFIG_ENET_SERVERIP192.168.1.178#define CONFIG_EMMC_GATEWAYIP192.168.1.1#define CONFIG_ENET_NETMASK255.255.255.0#define CONFIG_ARP_TIMEOUT 200UL
到这里,头文件的添加已经完成。
mx6qsabreauto.cstatic iomux_v3_cfg_t const enet_pads[] = {MX6_PAD_KEY_COL1__ENET_MDIO| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_KEY_COL2__ENET_MDC| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TXC__RGMII_TXC| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD0__RGMII_TD0| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD1__RGMII_TD1| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD2__RGMII_TD2| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD3__RGMII_TD3| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET_REF_CLK__ENET_TX_CLK| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RXC__RGMII_RXC| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD0__RGMII_RD0| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD1__RGMII_RD1| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD2__RGMII_RD2| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD3__RGMII_RD3| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_GPIO_16__ENET_REF_CLK| MUX_PAD_CTRL(ENET_PAD_CTRL),};
这是没改之前的管脚配置,需要根据原理图更改:
mx6qsabreauto.cstatic iomux_v3_cfg_t const enet_pads[] = {/* Tx */MX6_PAD_RGMII_TXC__RGMII_TXC| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD0__RGMII_TD0| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD1__RGMII_TD1| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD2__RGMII_TD2| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TD3__RGMII_TD3| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL| MUX_PAD_CTRL(ENET_PAD_CTRL),/* Rx */MX6_PAD_RGMII_RXC__RGMII_RXC| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD0__RGMII_RD0| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD1__RGMII_RD1| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD2__RGMII_RD2| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RD3__RGMII_RD3| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL| MUX_PAD_CTRL(ENET_PAD_CTRL),/* Phy */MX6_PAD_ENET_MDIO__ENET_MDIO| MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET_MDC__ENET_MDC| MUX_PAD_CTRL(ENET_PAD_CTRL),/* Ref clock*/MX6_PAD_ENET_REF_CLK__ENET_TX_CLK| MUX_PAD_CTRL(ENET_PAD_CTRL),};
重点是MDIO和MDC两个管脚的配置,其他都没变。
改完管脚配置之后,网卡也能够识别了。到此,大功告成!
- u-boot移植之mmc,网卡配置
- u-boot网卡驱动移植
- u-boot移植--3、DM9000网卡移植
- U-BOOT移植——支持Davinci的MMC
- 移植u-boot-2012.04----支持DM9000网卡
- U-boot移植之U-boot概述
- U-BOOT支持MMC
- U-boot移植之配置编译Makefile分析
- S3C2440移植u-boot之配置开发环境
- fl2440的U-boot-2010.09移植(三)DM9000网卡及开发板相关配置
- U-boot移植之三:开发板平台配置(u-boot-2009.03)
- u-boot-2016.01移植笔记之对u-boot的裁剪以及配置环境变量
- x210v3开发板u-boot-2012.10移植之十一---添加DM9000网卡支持
- 移植u-boot-2015.07-rc3之修改代码支持DM9000网卡(七)
- 移植u-boot学习笔记8-----修改代码之支持DM9000网卡
- l 移植u-boot之修改代码支持DM9000网卡-3.5
- 06-S3C2440学习之移植2012u-boot到S3C2440(移植过程四)支持Nand Flash+支持DM9000网卡
- U-Boot and MMC/SDIO
- 【LCT】BZOJ 2631:tree
- SCOI2015 day1
- [poj3264] Balanced Lineup(st表)
- UVa 796 Critical Links(无向图求割边)
- android ViewHolder模式超简洁写法
- u-boot移植之mmc,网卡配置
- ultraedit 激活办法
- echarts 百度开源图标工具demo
- 请慎用java的File#renameTo(File)方法
- 安卓开发——自定义ViewGroup
- 关于创建spring源码环境时遇到的缺少spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar两个包的问题
- android dip、px(像素)互转
- ORA-01031: insufficient privileges
- Android5.0 style样式新特性