目录
1、修改 mx6ull_alientek_emmc 目录下的 Makefile 文件
2、修改 mx6ull_alientek_emmc 目录下的 imximage.cfg 文件
3、修改 mx6ull_alientek_emmc 目录下的 Kconfig 文件
4、修改 mx6ull_alientek_emmc 目录下的 MAINTAINERS 文件
修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
1.编译 NXP 官方开发板对应的 uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfigmake V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
![](https://img-blog.csdnimg.cn/direct/a3684b61cac44c73804b45c4624b28de.png)
make mx6ull_14x14_evk_emmc_defconfigmake V=1 -j16
2. 烧写验证与驱动测试
将 imxdownload 软件拷贝到 uboot 源码根目录下,然后使用 imxdownload 软件将 u-boot.bin烧写到 SD 卡中,烧写命令如下:
chmod 777 imxdownload //给予 imxdownload 可执行权限./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡中,不能烧写到 /dev/sda 或 sda1 里面
1、SD 卡和 EMMC 驱动检查
![](https://img-blog.csdnimg.cn/direct/ce4d0b1ae3ec4ea2bf870801e1b00a6a.png)
mmc dev 0mmc info
mmc dev 1mmc info
2、LCD 驱动检查
![](https://img-blog.csdnimg.cn/direct/9d51418b89024023a1aad96e8cd6c470.png)
3、网络驱动
3.在 U-Boot 中添加自己的开发板
1.添加开发板默认配置文件
cd configscp mx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig
然后将文件 mx6ull_alientek_emmc_defconfig 中的内容改成下面的:
1 CONFIG_SYS_EXTRA_OPTIONS = "IMX_CONFIG=board/freescale/mx6ull_alientek_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"2 CONFIG_ARM = y3 CONFIG_ARCH_MX6 = y4 CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC = y5 CONFIG_CMD_GPIO = y
只是第 1 行和第 4 行做了修改。
2. 添加开发板对应的头文件
cp include/configs/mx6ullevk.h mx6ull_alientek_emmc.h
拷贝完成以后将:
#ifndef __MX6ULLEVK_CONFIG_H#define __MX6ULLEVK_CONFIG_H
改为:
#ifndef __MX6ULL_ALIENTEK_EMMC_CONFIG_H#define __MX6ULL_ALIENTEK_EMMC_CONFIG_H
101112 #include < asm / arch / imx - regs . h >13 #include < linux / sizes . h >14 #include "mx6_common.h"15 #include < asm / imx - common / gpio . h >16......2829 #define is_mx6ull_9x9_evk () CONFIG_IS_ENABLED ( TARGET_MX6ULL_9X9_EVK )3031 #ifdef CONFIG_TARGET_MX6ULL_9X9_EVK32 #define PHYS_SDRAM_SIZE SZ_256M33 #define CONFIG_BOOTARGS_CMA_SIZE "cma=96M "34 # else35 #define PHYS_SDRAM_SIZE SZ_512M36 #define CONFIG_BOOTARGS_CMA_SIZE ""37 /* DCDC used on 14x14 EVK, no PMIC */38 #undef CONFIG_LDO_BYPASS_CHECK39 #endif4041 /* SPL options */42 /* We default not support SPL43 * #define CONFIG_SPL_LIBCOMMON_SUPPORT44 * #define CONFIG_SPL_MMC_SUPPORT45 * #include "imx6_spl.h"46 */4748 #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG4950 #define CONFIG_DISPLAY_CPUINFO51 #define CONFIG_DISPLAY_BOARDINFO5253 /* Size of malloc() pool */54 #define CONFIG_SYS_MALLOC_LEN ( 16 * SZ_1M )5556 #define CONFIG_BOARD_EARLY_INIT_F57 #define CONFIG_BOARD_LATE_INIT5859 #define CONFIG_MXC_UART60 #define CONFIG_MXC_UART_BASE UART1_BASE6162 /* MMC Configs */63 #ifdef CONFIG_FSL_USDHC64 #define CONFIG_SYS_FSL_ESDHC_ADDR USDHC2_BASE_ADDR6566 /* NAND pin conflicts with usdhc2 */67 #ifdef CONFIG_SYS_USE_NAND68 #define CONFIG_SYS_FSL_USDHC_NUM 169 # else70 #define CONFIG_SYS_FSL_USDHC_NUM 271 #endif72 #endif7374 /* I2C configs */75 #define CONFIG_CMD_I2C76 #ifdef CONFIG_CMD_I2C77 #define CONFIG_SYS_I2C78 #define CONFIG_SYS_I2C_MXC79 #define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */80 #define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */81 #define CONFIG_SYS_I2C_SPEED 10000082......8990 #define CONFIG_SYS_MMC_IMG_LOAD_PART 19192 #ifdef CONFIG_SYS_BOOT_NAND93 #define CONFIG_MFG_NAND_PARTITION "mtdparts=gpminand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "94 # else95 #define CONFIG_MFG_NAND_PARTITION ""96 #endif9798 #define CONFIG_MFG_ENV_SETTINGS \99 "mfgtool_args=setenv bootargs console=${console},${baudrate} " \......111 "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr}${fdt_addr};\0" \112113 # if defined ( CONFIG_SYS_BOOT_NAND )114 #define CONFIG_EXTRA_ENV_SETTINGS \115 CONFIG_MFG_ENV_SETTINGS \116 "panel=TFT43AB\0" \......126 "bootz ${loadaddr} - ${fdt_addr}\0"127128 # else129 #define CONFIG_EXTRA_ENV_SETTINGS \130 CONFIG_MFG_ENV_SETTINGS \131 "script=boot.scr\0" \......202 "fi;\0" \203204 #define CONFIG_BOOTCOMMAND \205 "run findfdt;" \......216 "else run netboot; fi"217 #endif218219 /* Miscellaneous configurable options */220 #define CONFIG_CMD_MEMTEST221 #define CONFIG_SYS_MEMTEST_START 0x80000000222 #define CONFIG_SYS_MEMTEST_END ( CONFIG_SYS_MEMTEST_START +0x8000000 )223224 #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR225 #define CONFIG_SYS_HZ 1000226227 #define CONFIG_STACKSIZE SZ_128K228229 /* Physical Memory Map */230 #define CONFIG_NR_DRAM_BANKS 1231 #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR232233 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM234 #define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR235 #define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE236237 #define CONFIG_SYS_INIT_SP_OFFSET \238 ( CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE )239 #define CONFIG_SYS_INIT_SP_ADDR \240 ( CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET )241242 /* FLASH and environment organization */243 #define CONFIG_SYS_NO_FLASH244......255256 #define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */257 #define CONFIG_SYS_MMC_ENV_PART 0 /* user area */258 #define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */259260 #define CONFIG_CMD_BMODE261......275276 /* NAND stuff */277 #ifdef CONFIG_SYS_USE_NAND278 #define CONFIG_CMD_NAND279 #define CONFIG_CMD_NAND_TRIMFFS280281 #define CONFIG_NAND_MXS282 #define CONFIG_SYS_MAX_NAND_DEVICE 1283 #define CONFIG_SYS_NAND_BASE0x40000000284 #define CONFIG_SYS_NAND_5_ADDR_CYCLE285 #define CONFIG_SYS_NAND_ONFI_DETECTION286287 /* DMA stuff, needed for GPMI/MXS NAND support */288 #define CONFIG_APBH_DMA289 #define CONFIG_APBH_DMA_BURST290 #define CONFIG_APBH_DMA_BURST8291 #endif292293 #define CONFIG_ENV_SIZESZ_8K294 # if defined ( CONFIG_ENV_IS_IN_MMC )295 #define CONFIG_ENV_OFFSET( 12 * SZ_64K )296 #elif defined ( CONFIG_ENV_IS_IN_SPI_FLASH )297 #define CONFIG_ENV_OFFSET( 768 * 1024 )298 #define CONFIG_ENV_SECT_SIZE ( 64 * 1024 )299 #define CONFIG_ENV_SPI_BUSCONFIG_SF_DEFAULT_BUS300 #define CONFIG_ENV_SPI_CSCONFIG_SF_DEFAULT_CS301 #define CONFIG_ENV_SPI_MODECONFIG_SF_DEFAULT_MODE302 #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED303 #elif defined ( CONFIG_ENV_IS_IN_NAND )304 #undef CONFIG_ENV_SIZE305 #define CONFIG_ENV_OFFSET( 60 << 20 )306 #define CONFIG_ENV_SECT_SIZE ( 128 << 10 )307 #define CONFIG_ENV_SIZECONFIG_ENV_SECT_SIZE308 #endif309310311 /* USB Configs */312 #define CONFIG_CMD_USB313 #ifdef CONFIG_CMD_USB314 #define CONFIG_USB_EHCI315 #define CONFIG_USB_EHCI_MX6316 #define CONFIG_USB_STORAGE317 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET318 #define CONFIG_USB_HOST_ETHER319 #define CONFIG_USB_ETHER_ASIX320 #define CONFIG_MXC_USB_PORTSC( PORT_PTS_UTMI | PORT_PTS_PTW )321 #define CONFIG_MXC_USB_FLAGS0322 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2323 #endif324325 #ifdef CONFIG_CMD_NET326 #define CONFIG_CMD_PING327 #define CONFIG_CMD_DHCP328 #define CONFIG_CMD_MII329 #define CONFIG_FEC_MXC330 #define CONFIG_MII331 #define CONFIG_FEC_ENET_DEV1332333 # if ( CONFIG_FEC_ENET_DEV == 0 )334 #define IMX_FEC_BASEENET_BASE_ADDR335 #define CONFIG_FEC_MXC_PHYADDR 0x2336 #define CONFIG_FEC_XCV_TYPE RMII337 #elif ( CONFIG_FEC_ENET_DEV == 1 )338 #define IMX_FEC_BASEENET2_BASE_ADDR339 #define CONFIG_FEC_MXC_PHYADDR 0x1340 #define CONFIG_FEC_XCV_TYPERMII341 #endif342 #define CONFIG_ETHPRIME"FEC"343344 #define CONFIG_PHYLIB345 #define CONFIG_PHY_MICREL346 #endif347348 #define CONFIG_IMX_THERMAL349350 #ifndef CONFIG_SPL_BUILD351 #define CONFIG_VIDEO352 #ifdef CONFIG_VIDEO353 #define CONFIG_CFB_CONSOLE354 #define CONFIG_VIDEO_MXS355 #define CONFIG_VIDEO_LOGO356 #define CONFIG_VIDEO_SW_CURSOR357 #define CONFIG_VGA_AS_SINGLE_DEVICE358 #define CONFIG_SYS_CONSOLE_IS_IN_ENV359 #define CONFIG_SPLASH_SCREEN360 #define CONFIG_SPLASH_SCREEN_ALIGN361 #define CONFIG_CMD_BMP362 #define CONFIG_BMP_16BPP363 #define CONFIG_VIDEO_BMP_RLE8364 #define CONFIG_VIDEO_BMP_LOGO365 #define CONFIG_IMX_VIDEO_SKIP366 #endif367 #endif368369 #define CONFIG_IOMUX_LPSR370......375 #endif
UART1_BASE= (ATZ1_BASE_ADDR + 0x20000)=AIPS1_ARB_BASE_ADDR + 0x20000=0x02000000 + 0x20000=0X02020000
3 添加开发板对应的板级文件夹
cd board/freescale/cp mx6ullevk/ -r mx6ull_alientek_emmc
cd mx6ull_alientek_emmcmv mx6ullevk.c mx6ull_alientek_emmc.c
我们还需要对 mx6ull_alientek_emmc 目录下的文件做一些修改:
1、修改 mx6ull_alientek_emmc 目录下的 Makefile 文件
1 # ( C ) Copyright 2015 Freescale Semiconductor , Inc .2 #3 # SPDX - License - Identifier : GPL - 2.0 +4 #56 obj - y := mx6ull_alientek_emmc . o78 extra - $ ( CONFIG_USE_PLUGIN ) := plugin . bin9 $ ( obj )/ plugin . bin : $ ( obj )/ plugin . o10$ ( OBJCOPY ) - O binary -- gap - fill 0xff $ < $@
2、修改 mx6ull_alientek_emmc 目录下的 imximage.cfg 文件
PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
改为:
PLUGIN board/freescale/mx6ull_alientek_emmc /plugin.bin 0x00907000
3、修改 mx6ull_alientek_emmc 目录下的 Kconfig 文件
1 if TARGET_MX6ULL_ALIENTEK_EMMC23 config SYS_BOARD4 default "mx6ull_alientek_emmc"56 config SYS_VENDOR7 default "freescale"89 config SYS_SOC10 default "mx6"1112 config SYS_CONFIG_NAME13 default "mx6ull_alientek_emmc"1415 endif
4、修改 mx6ull_alientek_emmc 目录下的 MAINTAINERS 文件
1 MX6ULL_ALIENTEK_EMMC BOARD2 M : Peng Fan < peng . fan@nxp . com >3 S : Maintained4 F : board / freescale / mx6ull_alientek_emmc /5 F : include / configs / mx6ull_alientek_emmc . h
4.修改 U-Boot 图形界面配置文件
1 config TARGET_MX6ULL_ALIENTEK_EMMC2 bool "Support mx6ull_alientek_emmc"3 select MX6ULL4 select DM5 select DM_THERMAL
在最后一行的 endif 的前一行添加如下内容:
1 source "board/freescale/mx6ull_alientek_emmc/Kconfig"
添加完成以后的 Kconfig 文件如图 33.2.4.1 所示:
grep -nR "mx6ull_alientek_emmc.h"
如果有很多文件都引用了mx6ull_alientek_emmc.h这个头文件,那就说明新板子添加成功,
![](https://img-blog.csdnimg.cn/direct/ab2286d8c0bd400b969914d6c4b0c412.png)
5.LCD 驱动修改
1 struct display_info_t const displays[] = {{
2 .bus = MX6UL_LCDIF1_BASE_ADDR,
3 .addr = 0,
4 .pixfmt = 24,
5 .detect = NULL,
6 .enable = do_enable_parallel_lcd,
7 .mode = {
8 .name = "TFT43AB",
9 .xres = 480,
10 .yres = 272,
11 .pixclock = 108695,
12 .left_margin = 8,
13 .right_margin = 4,
14 .upper_margin = 2,
15 .lower_margin = 4,
16 .hsync_len = 41,
17 .vsync_len = 10,
18 .sync = 0,
19 .vmode = FB_VMODE_NONINTERLACED
20 } } };
修改如下:
1 struct display_info_t const displays[] = {{
2 .bus = MX6UL_LCDIF1_BASE_ADDR,
3 .addr = 0,
4 .pixfmt = 24,
5 .detect = NULL,
6 .enable = do_enable_parallel_lcd,
7 .mode = {
8 .name = "TFT7016",
9 .xres = 1024,
10 .yres = 600,
11 .pixclock = 19531,
12 .left_margin = 140, //HBPD
13 .right_margin = 160, //HFPD
14 .upper_margin = 20, //VBPD
15 .lower_margin = 12, //VFBD
16 .hsync_len = 20, //HSPW
17 .vsync_len = 3, //VSPW
18 .sync = 0,
19 .vmode = FB_VMODE_NONINTERLACED
20 } } };
panel=TFT43AB
将其改为:
panel=TFT7016
setenv panel TFT7016saveenv
6. 网络驱动修改
网络 PHY 地址修改
325 #ifdef CONFIG_CMD_NET
326 #define CONFIG_CMD_PING
327 #define CONFIG_CMD_DHCP
328 #define CONFIG_CMD_MII
329 #define CONFIG_FEC_MXC
330 #define CONFIG_MII
331 #define CONFIG_FEC_ENET_DEV 1
332
333 #if (CONFIG_FEC_ENET_DEV == 0)
334 #define IMX_FEC_BASE ENET_BASE_ADDR
335 #define CONFIG_FEC_MXC_PHYADDR 0x2
336 #define CONFIG_FEC_XCV_TYPE RMII
337 #elif (CONFIG_FEC_ENET_DEV == 1)
338 #define IMX_FEC_BASE ENET2_BASE_ADDR
339 #define CONFIG_FEC_MXC_PHYADDR 0x1
340 #define CONFIG_FEC_XCV_TYPE RMII
341 #endif
342 #define CONFIG_ETHPRIME "FEC"
343
344 #define CONFIG_PHYLIB
345 #define CONFIG_PHY_MICREL
346 #endif
325 #ifdef CONFIG_CMD_NET
326 #define CONFIG_CMD_PING
327 #define CONFIG_CMD_DHCP
328 #define CONFIG_CMD_MII
329 #define CONFIG_FEC_MXC
330 #define CONFIG_MII
331 #define CONFIG_FEC_ENET_DEV 1
332
333 #if (CONFIG_FEC_ENET_DEV == 0)
334 #define IMX_FEC_BASE ENET_BASE_ADDR
335 #define CONFIG_FEC_MXC_PHYADDR 0x0
336 #define CONFIG_FEC_XCV_TYPE RMII
337 #elif (CONFIG_FEC_ENET_DEV == 1)
338 #define IMX_FEC_BASE ENET2_BASE_ADDR
339 #define CONFIG_FEC_MXC_PHYADDR 0x1
340 #define CONFIG_FEC_XCV_TYPE RMII
341 #endif
342 #define CONFIG_ETHPRIME "FEC"
343
344 #define CONFIG_PHYLIB
345 #define CONFIG_PHY_SMSC
346 #endif
删除 uboot 中 74LV595 的驱动代码
#define IOX_SDI IMX_GPIO_NR(5, 10)
#define IOX_STCP IMX_GPIO_NR(5, 7)
#define IOX_SHCP IMX_GPIO_NR(5, 11)
#define IOX_OE IMX_GPIO_NR(5, 8)
#define ENET1_RESET IMX_GPIO_NR(5, 7)
#define ENET2_RESET IMX_GPIO_NR(5, 8)
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),
};
static void iox74lv_init(void)
{
int i;
gpio_direction_output(IOX_OE, 0);
for (i = 7; i >= 0; i--) {
gpio_direction_output(IOX_SHCP, 0);
gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);
udelay(500);
gpio_direction_output(IOX_SHCP, 1);
udelay(500);
}
......
/*
* shift register will be output to pins
*/
gpio_direction_output(IOX_STCP, 1);
};
void iox74lv_set(int index)
{
int i;
for (i = 7; i >= 0; i--) {
gpio_direction_output(IOX_SHCP, 0);
if (i == index)
gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);
else
gpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);
udelay(500);
gpio_direction_output(IOX_SHCP, 1);
udelay(500);
}
......
/*
* shift register will be output to pins
*/
gpio_direction_output(IOX_STCP, 1);
};
int board_init(void)
{
......
imx_iomux_v3_setup_multiple_pads(iox_pads, ARRAY_SIZE(iox_pads));
iox74lv_init();
......
return 0;
}
添加 I.MX6U-ALPHA 开发板网络复位引脚驱动
640 static iomux_v3_cfg_t const fec1_pads[] = {
641 MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
642 MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
......
649 MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
650 MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
651 };
652
653 static iomux_v3_cfg_t const fec2_pads[] = {
654 MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
655 MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
......
664 MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
665 MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
666 };
640 static iomux_v3_cfg_t const fec1_pads[] = {
641 MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
642 MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
......
649 MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
650 MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
651 MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
652 };
653
654 static iomux_v3_cfg_t const fec2_pads[] = {
655 MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
656 MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
......
665 MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
666 MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
667 MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
668 };
668 static void setup_iomux_fec(int fec_id)
669 {
670 if (fec_id == 0)
671 imx_iomux_v3_setup_multiple_pads(fec1_pads,
672 ARRAY_SIZE(fec1_pads));
673 else
674 imx_iomux_v3_setup_multiple_pads(fec2_pads,
675 ARRAY_SIZE(fec2_pads));
676 }
668 static void setup_iomux_fec(int fec_id)
669 {
670 if (fec_id == 0)
671 {
672
673 imx_iomux_v3_setup_multiple_pads(fec1_pads,
674 ARRAY_SIZE(fec1_pads));
675
676 gpio_direction_output(ENET1_RESET, 1);
677 gpio_set_value(ENET1_RESET, 0);
678 mdelay(20);
679 gpio_set_value(ENET1_RESET, 1);
680 }
681 else
682 {
683 imx_iomux_v3_setup_multiple_pads(fec2_pads,
684 ARRAY_SIZE(fec2_pads));
685 gpio_direction_output(ENET2_RESET, 1);
686 gpio_set_value(ENET2_RESET, 0);
687 mdelay(20);
688 gpio_set_value(ENET2_RESET, 1);
689 }
690 }
修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
221 int genphy_update_link(struct phy_device *phydev)
222 {
223 unsigned int mii_reg;
224
225 #ifdef CONFIG_PHY_SMSC
226 static int lan8720_flag = 0;
227 int bmcr_reg = 0;
228 if (lan8720_flag == 0) {
229 bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
230 phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
231 while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {
232 udelay(100);
233 }
234 phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);
235 lan8720_flag = 1;
236 }
237 #endif
238
239 /*
240 * Wait if the link is up, and autonegotiation is in progress
241 * (ie - we're capable and it's not done)
242 */
243 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
......
291
292 return 0;
293 }
etenv ipaddr 192.168.1.55 //开发板 IP 地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址
setenv gatewayip 192.168.1.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.1.250 //服务器地址,也就是 Ubuntu 地址
saveenv //保存环境变量
其他需要修改的地方
int checkboard(void)
{
if (is_mx6ull_9x9_evk())
puts("Board: MX6ULL 9x9 EVK\n");
else
puts("Board: MX6ULL ALIENTEK EMMC\n");
return 0;
}
bootcmd 和 bootargs 环境变量
113 #if defined(CONFIG_SYS_BOOT_NAND)
114 #define CONFIG_EXTRA_ENV_SETTINGS \
115 CONFIG_MFG_ENV_SETTINGS \
116 "panel=TFT43AB\0" \
117 "fdt_addr=0x83000000\0" \
118 "fdt_high=0xffffffff\0" \
......
126 "bootz ${loadaddr} - ${fdt_addr}\0"
127
128 #else
129 #define CONFIG_EXTRA_ENV_SETTINGS \
130 CONFIG_MFG_ENV_SETTINGS \
131 "script=boot.scr\0" \
132 "image=zImage\0" \
133 "console=ttymxc0\0" \
134 "fdt_high=0xffffffff\0" \
135 "initrd_high=0xffffffff\0" \
136 "fdt_file=undefined\0" \
......
194 "findfdt="\
195 "if test $fdt_file = undefined; then " \
196 "if test $board_name = EVK && test $board_rev = 9X9; then " \
197 "setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
198 "if test $board_name = EVK && test $board_rev = 14X14; then " \
199 "setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
200 "if test $fdt_file = undefined; then " \
201 "echo WARNING: Could not determine dtb to use; fi; " \
202 "fi;\0" \
环境变量 bootcmd
13 #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
14 env_t environment __PPCENV__ = {
15 ENV_CRC, /* CRC Sum */
16 #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
17 1, /* Flags: valid */
18 #endif
19 {
20 #elif defined(DEFAULT_ENV_INSTANCE_STATIC)
21 static char default_environment[] = {
22 #else
23 const uchar default_environment[] = {
24 #endif
25 #ifdef CONFIG_ENV_CALLBACK_LIST_DEFAULT
26 ENV_CALLBACK_VAR "=" CONFIG_ENV_CALLBACK_LIST_DEFAULT "\0"
27 #endif
28 #ifdef CONFIG_ENV_FLAGS_LIST_DEFAULT
29 ENV_FLAGS_VAR "=" CONFIG_ENV_FLAGS_LIST_DEFAULT "\0"
30 #endif
31 #ifdef CONFIG_BOOTARGS
32 "bootargs=" CONFIG_BOOTARGS "\0"
33 #endif
34 #ifdef CONFIG_BOOTCOMMAND
35 "bootcmd=" CONFIG_BOOTCOMMAND "\0"
36 #endif
37 #ifdef CONFIG_RAMBOOTCOMMAND
38 "ramboot=" CONFIG_RAMBOOTCOMMAND "\0"
39 #endif
40 #ifdef CONFIG_NFSBOOTCOMMAND
41 "nfsboot=" CONFIG_NFSBOOTCOMMAND "\0"
42 #endif
43 #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
44 "bootdelay=" __stringify(CONFIG_BOOTDELAY) "\0"
45 #endif
46 #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
47 "baudrate=" __stringify(CONFIG_BAUDRATE) "\0"
48 #endif
49 #ifdef CONFIG_LOADS_ECHO
50 "loads_echo=" __stringify(CONFIG_LOADS_ECHO) "\0"
51 #endif
52 #ifdef CONFIG_ETHPRIME
53 "ethprime=" CONFIG_ETHPRIME "\0"
54 #endif
55 #ifdef CONFIG_IPADDR
56 "ipaddr=" __stringify(CONFIG_IPADDR) "\0"
57 #endif
58 #ifdef CONFIG_SERVERIP
59 "serverip=" __stringify(CONFIG_SERVERIP) "\0"
60 #endif
61 #ifdef CONFIG_SYS_AUTOLOAD
62 "autoload=" CONFIG_SYS_AUTOLOAD "\0"
63 #endif
64 #ifdef CONFIG_PREBOOT
65 "preboot=" CONFIG_PREBOOT "\0"
66 #endif
67 #ifdef CONFIG_ROOTPATH
68 "rootpath=" CONFIG_ROOTPATH "\0"
69 #endif
70 #ifdef CONFIG_GATEWAYIP
71 "gatewayip=" __stringify(CONFIG_GATEWAYIP) "\0"
72 #endif
73 #ifdef CONFIG_NETMASK
74 "netmask=" __stringify(CONFIG_NETMASK) "\0"
75 #endif
76 #ifdef CONFIG_HOSTNAME
77 "hostname=" __stringify(CONFIG_HOSTNAME) "\0"
78 #endif
79 #ifdef CONFIG_BOOTFILE
80 "bootfile=" CONFIG_BOOTFILE "\0"
81 #endif
82 #ifdef CONFIG_LOADADDR
83 "loadaddr=" __stringify(CONFIG_LOADADDR) "\0"
84 #endif
85 #ifdef CONFIG_CLOCKS_IN_MHZ
86 "clocks_in_mhz=1\0"
87 #endif
88 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
89 "pcidelay=" __stringify(CONFIG_PCI_BOOTDELAY)"\0"
90 #endif
91 #ifdef CONFIG_ENV_VARS_UBOOT_CONFIG
92 "arch=" CONFIG_SYS_ARCH "\0"
93 "cpu=" CONFIG_SYS_CPU "\0"
94 "board=" CONFIG_SYS_BOARD "\0"
95 "board_name=" CONFIG_SYS_BOARD "\0"
96 #ifdef CONFIG_SYS_VENDOR
97 "vendor=" CONFIG_SYS_VENDOR "\0"
98 #endif
99 #ifdef CONFIG_SYS_SOC
100 "soc=" CONFIG_SYS_SOC "\0"
101 #endif
102 #endif
103 #ifdef CONFIG_EXTRA_ENV_SETTINGS
104 CONFIG_EXTRA_ENV_SETTINGS
105 #endif
106 "\0"
107 #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
108 }
109 #endif
110 };
204 #define CONFIG_BOOTCOMMAND \
205 "run findfdt;" \
206 "mmc dev ${mmcdev};" \
207 "mmc dev ${mmcdev}; if mmc rescan; then " \
208 "if run loadbootscript; then " \
209 "run bootscript; " \
210 "else " \
211 "if run loadimage; then " \
212 "run mmcboot; " \
213 "else run netboot; " \
214 "fi; " \
215 "fi; " \
216 "else run netboot; fi"
"findfdt="\
"if test $fdt_file = undefined; then " \
"if test $board_name = EVK && test $board_rev = 9X9; then " \
"setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
"if test $board_name = EVK && test $board_rev = 14X14; then " \
"setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
"if test $fdt_file = undefined; then " \
"echo WARNING: Could not determine dtb to use; fi; " \
"fi;\0" \
fdt_file=undefined , board_name=EVK , board_rev=14X14
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
其中 mmcdev=1,mmcpart=1,loadaddr=0x80800000,script= boot.scr,因此展开以后就是:
loadbootscript=fatload mmc 1:1 0x80800000 boot.scr;
bootscript=echo Running bootscript from mmc ...;source
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadimage=fatload mmc 1:1 0x80800000 zImage
154 "mmcboot=echo Booting from mmc ...; " \
155 "run mmcargs; " \
156 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
157 "if run loadfdt; then " \
158 "bootz ${loadaddr} - ${fdt_addr}; " \
159 "else " \
160 "if test ${boot_fdt} = try; then " \
161 "bootz; " \
162 "else " \
163 "echo WARN: Cannot load the DT; " \
164 "fi; " \
165 "fi; " \
166 "else " \
167 "bootz; " \
168 "fi;\0" \
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
展开以后就是:
loadfdt=fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb
bootz ${loadaddr} - ${fdt_addr};
展开就是:
bootz 0x80800000 - 0x83000000 ( 注意‘ - ’前后要有空格 )
mmc dev 1 //切换到 EMMCfatload mmc 1:1 0x80800000 zImage //读取 zImage 到 0x80800000 处fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb // 读取设备树到 0x83000000 处bootz 0x80800000 - 0x83000000 //启动 Linux
#define CONFIG_BOOTCOMMAND \"mmc dev 1;" \"fatload mmc 1:1 0x80800000 zImage;" \"fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \"bootz 0x80800000 - 0x83000000;"
或者可以直接在 uboot 中设置 bootcmd 的值,这个值就是保存到 EMMC 中的,命令如下:
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
环境变量 bootargs
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw