TQ335x开发板U-boot2015.07移植

原创 2016年05月31日 20:42:49

硬件平台:TQ335X_BOARD_V2.1

软件环境:VMWARE10+UBUNTU14.04


打开board\ti\am335x\board.c文件

修改如下:

static int read_eeprom(struct am335x_baseboard_id *header)
{
#if 1  
    strcpy(header->name, "TQ335x");  
#else  
	/* Check if baseboard eeprom is available */
	if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {
		puts("Could not probe the EEPROM; something fundamentally "
			"wrong on the I2C bus.\n");
		return -ENODEV;
	}

	/* read the eeprom using i2c */
	if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header,
		     sizeof(struct am335x_baseboard_id))) {
		puts("Could not read the EEPROM; something fundamentally"
			" wrong on the I2C bus.\n");
		return -EIO;
	}

	if (header->magic != 0xEE3355AA) {
		/*
		 * read the eeprom using i2c again,
		 * but use only a 1 byte address
		 */
		if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header,
			     sizeof(struct am335x_baseboard_id))) {
			puts("Could not read the EEPROM; something "
				"fundamentally wrong on the I2C bus.\n");
			return -EIO;
		}

		if (header->magic != 0xEE3355AA) {
			printf("Incorrect magic number (0x%x) in EEPROM\n",
					header->magic);
			return -EINVAL;
		}
	}
#endif

	return 0;
}


const struct dpll_params *get_dpll_ddr_params(void)
{
	struct am335x_baseboard_id header;

	enable_i2c0_pin_mux();
	i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
	if (read_eeprom(&header) < 0)
		puts("Could not get board ID.\n");

	if (board_is_evm_sk(&header))
		return &dpll_ddr_evm_sk;
	else if (board_is_bone_lt(&header) ||board_is_tq335x(&header))
		return &dpll_ddr_bone_black;
	else if (board_is_evm_15_or_later(&header))
		return &dpll_ddr_evm_sk;
	else
		return &dpll_ddr;
}


void sdram_init(void)
{
	__maybe_unused struct am335x_baseboard_id header;

	if (read_eeprom(&header) < 0)
		puts("Could not get board ID.\n");

	if (board_is_evm_sk(&header)) {
		/*
		 * EVM SK 1.2A and later use gpio0_7 to enable DDR3.
		 * This is safe enough to do on older revs.
		 */
		gpio_request(GPIO_DDR_VTT_EN, "ddr_vtt_en");
		gpio_direction_output(GPIO_DDR_VTT_EN, 1);
	}

	if (board_is_evm_sk(&header))
		config_ddr(303, &ioregs_evmsk, &ddr3_data,
			   &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0);
	else if (board_is_bone_lt(&header) || board_is_tq335x(&header))
		config_ddr(400, &ioregs_bonelt,
			   &ddr3_beagleblack_data,
			   &ddr3_beagleblack_cmd_ctrl_data,
			   &ddr3_beagleblack_emif_reg_data, 0);
	else if (board_is_evm_15_or_later(&header))
		config_ddr(303, &ioregs_evm15, &ddr3_evm_data,
			   &ddr3_evm_cmd_ctrl_data, &ddr3_evm_emif_reg_data, 0);
	else
		config_ddr(266, &ioregs, &ddr2_data,
			   &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data, 0);
}


打开board\ti\am335x\board.h文件

修改如下:

static inline int board_is_tq335x(struct am335x_baseboard_id *header)  
{  
    return !strncmp(header->name, "TQ335x", HDR_NAME_LEN);  
}  


打开board\ti\am335x\mux.c文件

修改如下:

void enable_board_pin_mux(struct am335x_baseboard_id *header)
{
	/* Do board-specific muxes. */
	if ((board_is_bone(header))||(board_is_tq335x(header))) {
		/* Beaglebone pinmux */
		configure_module_pin_mux(i2c1_pin_mux);
		configure_module_pin_mux(mii1_pin_mux);
		configure_module_pin_mux(mmc0_pin_mux);
#if defined(CONFIG_NAND)
		configure_module_pin_mux(nand_pin_mux);
#elif defined(CONFIG_NOR)
		configure_module_pin_mux(bone_norcape_pin_mux);
#else
		configure_module_pin_mux(mmc1_pin_mux);
#endif
	} else if (board_is_gp_evm(header)) {
		/* General Purpose EVM */
		unsigned short profile = detect_daughter_board_profile();
		configure_module_pin_mux(rgmii1_pin_mux);
		configure_module_pin_mux(mmc0_pin_mux);
		/* In profile #2 i2c1 and spi0 conflict. */
		if (profile & ~PROFILE_2)
			configure_module_pin_mux(i2c1_pin_mux);
		/* Profiles 2 & 3 don't have NAND */
#ifdef CONFIG_NAND
		if (profile & ~(PROFILE_2 | PROFILE_3))
			configure_module_pin_mux(nand_pin_mux);
#endif
		else if (profile == PROFILE_2) {
			configure_module_pin_mux(mmc1_pin_mux);
			configure_module_pin_mux(spi0_pin_mux);
		}
	} else if (board_is_idk(header)) {
		/* Industrial Motor Control (IDK) */
		configure_module_pin_mux(mii1_pin_mux);
		configure_module_pin_mux(mmc0_no_cd_pin_mux);
	} else if (board_is_evm_sk(header)) {
		/* Starter Kit EVM */
		configure_module_pin_mux(i2c1_pin_mux);
		configure_module_pin_mux(gpio0_7_pin_mux);
		configure_module_pin_mux(rgmii1_pin_mux);
		configure_module_pin_mux(mmc0_pin_mux_sk_evm);
	} else if (board_is_bone_lt(header)) {
		/* Beaglebone LT pinmux */
		configure_module_pin_mux(i2c1_pin_mux);
		configure_module_pin_mux(mii1_pin_mux);
		configure_module_pin_mux(mmc0_pin_mux);
#if defined(CONFIG_NAND) && defined(CONFIG_EMMC_BOOT)
		configure_module_pin_mux(nand_pin_mux);
#elif defined(CONFIG_NOR) && defined(CONFIG_EMMC_BOOT)
		configure_module_pin_mux(bone_norcape_pin_mux);
#else
		configure_module_pin_mux(mmc1_pin_mux);
#endif
	} else {
		puts("Unknown board, cannot configure pinmux.");
		hang();
	}
}

打开fs/fat/fat.c文件

修改如下:

int fat_register_device(block_dev_desc_t *dev_desc, int part_no)
{
	disk_partition_t info;

	/* First close any currently found FAT filesystem */
	cur_dev = NULL;

	/* Read the partition table, if present */
	if (get_partition_info(dev_desc, part_no, &info)) {
#if 0
		if (part_no != 0) {
			printf("** Partition %d not valid on device %d **\n",
					part_no, dev_desc->dev);
			return -1;
		}
#endif
		info.start = 0;
		info.size = dev_desc->lba;
		info.blksz = dev_desc->blksz;
		info.name[0] = 0;
		info.type[0] = 0;
		info.bootable = 0;
#ifdef CONFIG_PARTITION_UUIDS
		info.uuid[0] = 0;
#endif
	}

	return fat_set_blk_dev(dev_desc, &info);
}


int file_fat_read_at(const char *filename, loff_t pos, void *buffer,
		     loff_t maxsize, loff_t *actread)
{
	debug("reading %s\n", filename);
	return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO, 0,
			      actread);
}


打开include/configs/ti_armv7_common.h文件

修改如下:

#if defined(CONFIG_SPL_OS_BOOT_ENABLE)  
#define CONFIG_SPL_OS_BOOT  
#endif  

至此,u-boot的移植工作就完成了,编译方法如下:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- am335x_evm_defconfig  
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8


其中,arm-linux-gnueabihf-是我使用的编译器。

U-BOOT-2016.07移植 (第二篇) 添加单板

U-BOOT-201607移植 第二篇 添加单板 1. 在board中创建单板目录 2. 创建单板相关头文件 3. 创建defconfig文件 4. 修改arch/arm/Kconfig文件 5. 尝...
  • funkunho
  • funkunho
  • 2016年09月08日 01:46
  • 2139

亮仔移植u-boot系列之-- S3c2440在最新版本U-boot-2015.10移植(支持SPL模式启动) -- 1

首先在u-boot官网上下载最新的U-boot-2015.10版本,通过命令 sudo tar xvf u-boot-2015.10.tar.bz2 后解压,进入u-boot目录,执行: mak...
  • yangxiaozhu_xiaoyu
  • yangxiaozhu_xiaoyu
  • 2015年12月04日 21:23
  • 1666

移植UBoot的2016版本/添加新的板级支持

家里的2440板子很久没用了,最近突然想用它学学linux内核。听专搞arm的人说arm9,a8,a9等等,弄明白一种,别的都能触类旁通。没必要买很豪华的板子拿来学习~!...
  • DavidGabriel
  • DavidGabriel
  • 2016年07月24日 23:48
  • 3233

移植u-boot1.1.6到TQ2440开发板

  • 2012年05月19日 22:22
  • 74KB
  • 下载

TQ335X的u-boot移植(二)

硬件平台:TQ335X_BOARD_V2.1软件环境:VMWARE10+UBUNTU14.04打开board\ti\am335x\board.c文件修改如下:...
  • kang99827765
  • kang99827765
  • 2017年02月10日 14:05
  • 308

移植u-boot 1.1.6到TQ2440开发板-第一阶段

移植u-boot 1.1.6到TQ2440开发板-第一阶段 2015-09-30 14:50:25   来源:eefocus   (本文转自电子工程世界:http://www.eeworld.c...
  • zhaolushandong
  • zhaolushandong
  • 2016年02月02日 10:17
  • 825

u-boot-2009.11移植(适用于TQ2440和MINI2440)第一篇:建立开发板文件,测试编译环境

注意:红色标记代表要修改的地方   一、建立开发板文件,测试编译环境 1.1 修改顶层 Makefile # load ARCH, BOARD, and CPU configuratio...
  • szl_lxy
  • szl_lxy
  • 2015年09月03日 20:36
  • 361

u-boot 程序执行流程记录(am335x 开发板)

Author:DriverMonkey Mail:boowkorepeng@hotmail.com QQ:196568501 欢迎交流(承接各类嵌入式外包项目-wince,linux,单片机,上...
  • peng654321
  • peng654321
  • 2013年03月26日 11:10
  • 1343

U-boot-2014.10移植到TQ2416开发板之NandFlash启动探究

探究s3c2416的nand boot启动模式,以及在启动时Stepingstone的0x00000000地址的验证,并简单的实现一段汇编代码测试sram的可用性,最后简单的介绍了H-JTAG和JLi...
  • MingLLu
  • MingLLu
  • 2015年07月09日 09:59
  • 679

AM335x(TQ335x)学习笔记——u-boot-2014.10移植

最近移植了下u-boot-2014.10到TQ335x,如果基于am335x evm进行移植,需要修改的地方并不多。 由于TI的am335x evm开发使用了一个eeprom保存了板载配置信息,用来区...
  • girlkoo
  • girlkoo
  • 2014年11月16日 23:44
  • 20408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TQ335x开发板U-boot2015.07移植
举报原因:
原因补充:

(最多只允许输入30个字)