介绍
IMX6ULL正点原子开发板使用的是14x14_evk的芯片 其中14x14代表的是芯片的尺寸。
本教程的标识符以nsouther或者 NSOUTHER NSouther为主
添加板子自己的配置文件
板子的默认配置文件保存在 configs目录下,我们以mx6ull_14x14_evk_emmc_defconfig为主,将其复制一份并重命名为 mx6ull_14x14_nsouther_defconfig
cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_14x14_nsouther_emmc_defconfig
然后修改mx6ull_14x14_nsouther_emmc_defconfig的内容 如下所示
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_nsouther_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_NSOUTHER_EMMC=y
CONFIG_CMD_GPIO=y
其中我们需要修改的是CONFIG_SYS_EXTRA_OPTIONS 将板子的配置文件改成mx6ull_nsouther_emmc 这个文件夹我们将在下一步创建
其次是修改初始化配置CONFIG_TARGET_MX6ULL_NSOUTHER_EMMC=y 记住这个配置后面要用!!!
添加开发板对应的头文件
进入include/configs文件夹,在这里的配置文件我们主要以mx6ullevk.h为主 在它的基础上修改。
cp -rf mx6ullevk.h mx6ull_nsouther_emmc.h
在这里我们主要修改头文件的宏定义,因为是拷贝的evk.h中的 所以要修改这个不能和他重复就行了 这里的宏定义可以随便起 但是最好是具有辨识度并且不重复。
其次在这个文件夹中我们还要修改网口地址 将335行的PHY地址修改为**0x0 ,**6ULL板子上有两个网口 网口1的地址为0x0 网口2的地址为0x1 上面的宏定义为1 表示我们选择ETH2网口作为UBOOT网络通信的网口
添加开发板对应的板级文件夹
进入board/freescale目录下 这个目录主要存放的是freescale芯片不同板子对于的配置文件,这里我们以mx6ullevk为主进行修改配置
cd board/freesacle
cp -rf mx6ullevk mx6ull_nsouther_emmc
在这个mx6ull_nsouther_emmc配置文件夹中我们主要关注以下几个文件
mx6ull_nsouther_emmc.c
imximage_lpddr2.cfg
imximage.cfg
Kconfig
MAINTAINERS
Makefile
- mx6ull_nsouther_emmc.c
在这个文件中 我们主要修改网口的的复位管脚,使其可以成功复位
首先屏蔽掉原始的配置文件 新增和板子对应的GPIO复位管脚 对于ETN1是IO5_IO07
对于ETH2是IO5_IO08
找到下面这一段配置文件 因为前面我们已经注释掉了他的配置文件 所以将这段删除掉
static iomux_v3_cfg_t const iox_pads[] = {
/* IOX_SDI */
MX6_PAD_BOOT_MODE0__GPIO5_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_SHCP */
MX6_PAD_BOOT_MODE1__GPIO5_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_STCP */
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* IOX_nOE */
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
接下来是屏蔽74lv芯片的初始化配置功能,这里需要屏蔽两个函数 分别是
iox74lv_init iox74lv_set 这两个函数
修改fec1_pads 和fec2_pads配置信息 添加板子的复位引脚 在最后一行分别加入以下信息
//fec1
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
//fec2
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL)
在下面的 setup_iomux_fec修改成以下的形式
static void setup_iomux_fec(int fec_id)
{if (fec_id == 0){imx_iomux_v3_setup_multiple_pads(fec1_pads,ARRAY_SIZE(fec1_pads));gpio_direction_output(ENET1_RESET, 1);gpio_set_value(ENET1_RESET, 0);mdelay(20);gpio_set_value(ENET1_RESET, 1);}else{imx_iomux_v3_setup_multiple_pads(fec2_pads,ARRAY_SIZE(fec2_pads));gpio_direction_output(ENET2_RESET, 1);gpio_set_value(ENET2_RESET, 0);mdelay(20);gpio_set_value(ENET2_RESET, 1);}}
找到**board_init() **,因为我们前面屏蔽掉了74lv的初始化函数 所以在board_init中屏蔽掉这两个函数
- imximage_lpddr2.cfg
修改PLUGIN中的信息 替换为我们板级文件所在的地址
- imximage.cfg
同样做替换
- Kconfig
Kconfig中主要做以下修改 记住这个 if后面的 TARGET_MX6ULL_NSOUTHER_EMMC
与我们在上面的defconfig配置文件中的修改一致
- MAINTAINERS
主要修改板级文件夹的路径 和.h头文件的路径
- Makefile
在Makefile中主要修改obj-y 将其改成mx6ull_nsouther_emmc.o 有了这个目标才会去编译对应的文件
修改Kconfig图形化配置
找到 arch/arm/cpu/armv7/mx6/Kconfig,添加下面的内容注意这个config的内容与我们上面标红的 TARGET_MX6ULL_NSOUTHER_EMMC保持一致
config TARGET_MX6ULL_NSOUTHER_EMMCbool "Support mx6ull_nsouther_emmc"select MX6ULLselect DMselect DM_THERMAL
修改driver中的phy驱动
在** drivers/net/phy/phy.c 中 找到 genphy_update_link()函数 做以下修改。**
if (lan8720_flag == 0) {bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {udelay(100);}phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);lan8720_flag = 1;}
编译测试
首先先清除下工程
make distclean
make mx6ull_14x14_nsouther_emmc_defconfig
make -j6
将其下载到板子
时间正确,网络正常
测试网络信息
将ETH2通过网线连接到路由器 这里我路由器的网段是192.168.100的网段 配置的nfs服务器 以及 tftpboot服务器网址为192.168.100.20
setenv ipaddr 192.168.100.20
setenv serverip 192.168.100.80
setenv gatewayip 192.168.100.1
setenv netmask 255.255.255.0
setenv ethaddr 00:04:9f:04:f2:35saveenv
接下来我们ping一下主机 网络正常
测试tftpboot
前提是已经搭建好了tftpboot服务端 这里我们使用tftpboot命令下载内核
下载成功
网络部分移植测试到此结束