Cubieboard u-boot移植遇到的问题
本文是原「蜗窝讨论区」的历史存档(2016-11-02),来自版块「Linux kernel技术问答」,共 12 帖。讨论区已停止服务,此处仅供查阅。
我这有一块Cubieboard的板子,所以想要自己移植一下u-boot(上流分支以支持cubieboard),学习一下u-boot的架构和工作流程,然后按着X-Project项目的入门介绍, 然后开始的移植。 我所做的工作已经都提交到了我的github上了,https://github.com/OSer916/u-boot 对应的分支是cubieboard
下面的内容是 git diff master cubieboard 的输出:
[== Undefined ==]
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index d7a9b11..298da70 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -873,6 +873,11 @@ config TARGET_THUNDERX_88XX
select OF_CONTROL
select SYS_CACHE_SHIFT_7
+config TARGET_SUNNY
- bool "Support Sunny board"
- select CPU_V7
endchoice
source "arch/arm/mach-at91/Kconfig"
@@ -935,6 +940,7 @@ source "arch/arm/cpu/armv8/Kconfig"
source "arch/arm/imx-common/Kconfig"
source "board/bosch/shc/Kconfig"
source "board/BuR/brxre1/Kconfig"
source "board/BuR/brppt1/Kconfig"
@@ -1021,6 +1027,7 @@ source "board/woodburn/Kconfig"
source "board/work-microwave/work_92105/Kconfig"
source "board/zipitz2/Kconfig"
+source "board/sunny/Kconfig"
source "arch/arm/Kconfig.debug"
endmenu
diff –git a/arch/arm/Makefile b/arch/arm/Makefile
index 42093c2..f0bf884 100644
— a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -65,6 +65,7 @@ machine-$(CONFIG_ARCH_MVEBU) += mvebu
machine-$(CONFIG_ORION5X) += orion5x
machine-$(CONFIG_ARCH_S5PC1XX) += s5pc1xx
machine-$(CONFIG_ARCH_SUNXI) += sunxi
+machine-$(CONFIG_SUNNY) += sunny
machine-$(CONFIG_ARCH_SNAPDRAGON) += snapdragon
machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_RMOBILE) += rmobile
diff –git a/arch/arm/cpu/armv7/Makefile b/arch/arm/cpu/armv7/Makefile
index 4d3bc94..6f4329c 100644
— a/arch/arm/cpu/armv7/Makefile
+++ b/arch/arm/cpu/armv7/Makefile
@@ -12,7 +12,7 @@ obj-y += cache_v7.o cache_v7_asm.o
obj-y += cpu.o cp15.o
obj-y += syslib.o
-ifneq ($(CONFIG_AM43XX)$(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TEGRA)$(CONFIG_MX6)$(CONFIG_MX7)$(CONFIG_TI81XX)$(CONFIG_AT91FAMILY)$(CONFIG_ARCH_SUNXI)$(CONFIG_ARCH_SOCFPGA)$(CONFIG_LS102XA),)
+ifneq ($(CONFIG_SUNNY)$(CONFIG_AM43XX)$(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(CONFIG_TEGRA)$(CONFIG_MX6)$(CONFIG_MX7)$(CONFIG_TI81XX)$(CONFIG_AT91FAMILY)$(CONFIG_ARCH_SUNXI)$(CONFIG_ARCH_SOCFPGA)$(CONFIG_LS102XA),)
ifneq ($(CONFIG_SKIP_LOWLEVEL_INIT),y)
obj-y += lowlevel_init.o
endif
@@ -45,4 +45,5 @@ obj-$(CONFIG_OMAP54XX) += omap5/
obj-$(CONFIG_RMOBILE) += rmobile/
obj-$(if $(filter stv0991,$(SOC)),y) += stv0991/
obj-$(CONFIG_ARCH_SUNXI) += sunxi/
+obj-$(CONFIG_SUNNY) += sunny/
obj-$(CONFIG_VF610) += vf610/
diff –git a/arch/arm/cpu/armv7/sunny/Makefile b/arch/arm/cpu/armv7/sunny/Makefile
new file mode 100644
index 0000000..62c0dad
— /dev/null
+++ b/arch/arm/cpu/armv7/sunny/Makefile
@@ -0,0 +1,2 @@
+#
+obj-y += start.o
diff –git a/arch/arm/cpu/armv7/sunny/start.c b/arch/arm/cpu/armv7/sunny/start.c
new file mode 100644
index 0000000..8337712
— /dev/null
+++ b/arch/arm/cpu/armv7/sunny/start.c
@@ -0,0 +1 @@
+//
diff –git a/arch/arm/mach-sunny/Makefile b/arch/arm/mach-sunny/Makefile
new file mode 100644
index 0000000..8ad9650
— /dev/null
+++ b/arch/arm/mach-sunny/Makefile
@@ -0,0 +1,3 @@
+
+obj-y += board.o
+
diff –git a/arch/arm/mach-sunny/board.c b/arch/arm/mach-sunny/board.c
new file mode 100644
index 0000000..17f9c99
— /dev/null
+++ b/arch/arm/mach-sunny/board.c
@@ -0,0 +1,3 @@
+void s_init(void)
+{
+}
diff –git a/board/sunny/Kconfig b/board/sunny/Kconfig
new file mode 100644
index 0000000..65e80c4
— /dev/null
+++ b/board/sunny/Kconfig
@@ -0,0 +1,39 @@
+
+config ARCH_SUNNY
- bool
- default y
+config SYS_CPU
- default "armv7"
+config SYS_SOC
- default "sunny"
+config SYS_BOARD
- default "sunny"
+config SYS_CONFIG_NAME
- default "sunny"
+config NR_DRAM_BANKS
- int "DRAM bank number"
- default 1
+config SYS_MAXARGS
- int "max arguments"
- default 16
+config ENV_IS_NOWHERE
- bool "where is the envs"
- default y
+config BAUDRATE
- int "serail port baudrate"
- default 115200
+config SYS_CBSIZE
- int "Console I/O buffer size"
- default 1024
+config CONS_INDEX
- int "console index"
- default 1
diff –git a/board/sunny/Makefile b/board/sunny/Makefile
new file mode 100644
index 0000000..933f5d0
— /dev/null
+++ b/board/sunny/Makefile
@@ -0,0 +1,2 @@
+
+obj-y += board.o
diff –git a/board/sunny/board.c b/board/sunny/board.c
new file mode 100644
index 0000000..2717fe2
— /dev/null
+++ b/board/sunny/board.c
@@ -0,0 +1,27 @@
+#include <common.h>
+void reset_cpu(ulong addr)
+{
+}
+
+//void lowlevel_init(void)
+////{
+//}
+int board_run_command(const char *buf)
+{
- return 0;
+}
+int dram_init(void)
+{
- return 0;
+}
+int board_init(void)
+{
- return 0;
+}
+ulong get_tbclk(void)
+{
- return 0;
+}
diff –git a/configs/sunny_defconfig b/configs/sunny_defconfig
new file mode 100644
index 0000000..7bc77ca
— /dev/null
+++ b/configs/sunny_defconfig
@@ -0,0 +1,593 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# U-Boot 2016.11-rc2 Configuration
+#
+CONFIG_CREATE_ARCH_SYMLINK=y
+# CONFIG_ARC is not set
+CONFIG_ARM=y
+# CONFIG_AVR32 is not set
+# CONFIG_BLACKFIN is not set
+# CONFIG_M68K is not set
+# CONFIG_MICROBLAZE is not set
+# CONFIG_MIPS is not set
+# CONFIG_NDS32 is not set
+# CONFIG_NIOS2 is not set
+# CONFIG_OPENRISC is not set
+# CONFIG_PPC is not set
+# CONFIG_SANDBOX is not set
+# CONFIG_SH is not set
+# CONFIG_SPARC is not set
+# CONFIG_X86 is not set
+# CONFIG_XTENSA is not set
+CONFIG_SYS_ARCH="arm"
+CONFIG_SYS_CPU="armv7"
+CONFIG_SYS_SOC="sunny"
+CONFIG_SYS_BOARD="sunny"
+CONFIG_SYS_CONFIG_NAME="sunny"
+#
+# ARM architecture
+#
+CONFIG_HAS_VBAR=y
+CONFIG_HAS_THUMB2=y
+CONFIG_CPU_V7=y
+CONFIG_SYS_ARM_ARCH=7
+CONFIG_SYS_CACHE_SHIFT_6=y
+CONFIG_SYS_CACHELINE_SIZE=64
+# CONFIG_SEMIHOSTING is not set
+# CONFIG_SYS_L2CACHE_OFF is not set
+# CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_TARGET_EDB93XX is not set
+# CONFIG_TARGET_VCMA9 is not set
+# CONFIG_TARGET_SMDK2410 is not set
+# CONFIG_TARGET_ASPENITE is not set
+# CONFIG_TARGET_GPLUGD is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_KIRKWOOD is not set
+# CONFIG_ARCH_MVEBU is not set
+# CONFIG_TARGET_DEVKIT3250 is not set
+# CONFIG_TARGET_WORK_92105 is not set
+# CONFIG_TARGET_MX25PDK is not set
+# CONFIG_TARGET_ZMX25 is not set
+# CONFIG_TARGET_APF27 is not set
+# CONFIG_TARGET_APX4DEVKIT is not set
+# CONFIG_TARGET_XFI3 is not set
+# CONFIG_TARGET_M28EVK is not set
+# CONFIG_TARGET_MX23EVK is not set
+# CONFIG_TARGET_MX28EVK is not set
+# CONFIG_TARGET_MX23_OLINUXINO is not set
+# CONFIG_TARGET_BG0900 is not set
+# CONFIG_TARGET_SANSA_FUZE_PLUS is not set
+# CONFIG_TARGET_SC_SPS_1 is not set
+# CONFIG_ORION5X is not set
+# CONFIG_TARGET_SPEAR300 is not set
+# CONFIG_TARGET_SPEAR310 is not set
+# CONFIG_TARGET_SPEAR320 is not set
+# CONFIG_TARGET_SPEAR600 is not set
+# CONFIG_TARGET_STV0991 is not set
+CONFIG_TARGET_SUNNY=y
+# CONFIG_TARGET_X600 is not set
+# CONFIG_TARGET_IMX31_PHYCORE is not set
+# CONFIG_TARGET_MX31ADS is not set
+# CONFIG_TARGET_MX31PDK is not set
+# CONFIG_TARGET_WOODBURN is not set
+# CONFIG_TARGET_WOODBURN_SD is not set
+# CONFIG_TARGET_FLEA3 is not set
+# CONFIG_TARGET_MX35PDK is not set
+# CONFIG_ARCH_BCM283X is not set
+# CONFIG_TARGET_VEXPRESS_CA15_TC2 is not set
+# CONFIG_TARGET_VEXPRESS_CA5X2 is not set
+# CONFIG_TARGET_VEXPRESS_CA9X4 is not set
+# CONFIG_TARGET_BRXRE1 is not set
+# CONFIG_TARGET_BRPPT1 is not set
+# CONFIG_TARGET_DRACO is not set
+# CONFIG_TARGET_THUBAN is not set
+# CONFIG_TARGET_RASTABAN is not set
+# CONFIG_TARGET_ETAMIN is not set
+# CONFIG_TARGET_PXM2 is not set
+# CONFIG_TARGET_RUT is not set
+# CONFIG_TARGET_TI814X_EVM is not set
+# CONFIG_TARGET_TI816X_EVM is not set
+# CONFIG_TARGET_BCM23550_W1D is not set
+# CONFIG_TARGET_BCM28155_AP is not set
+# CONFIG_TARGET_BCMCYGNUS is not set
+# CONFIG_TARGET_BCMNSP is not set
+# CONFIG_ARCH_EXYNOS is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_HIGHBANK is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_KEYSTONE is not set
+# CONFIG_ARCH_MESON is not set
+# CONFIG_ARCH_MX7 is not set
+# CONFIG_ARCH_MX6 is not set
+# CONFIG_ARCH_MX5 is not set
+# CONFIG_TARGET_M53EVK is not set
+# CONFIG_TARGET_MX51EVK is not set
+# CONFIG_TARGET_MX53ARD is not set
+# CONFIG_TARGET_MX53EVK is not set
+# CONFIG_TARGET_MX53LOCO is not set
+# CONFIG_TARGET_MX53SMD is not set
+# CONFIG_OMAP34XX is not set
+# CONFIG_OMAP44XX is not set
+# CONFIG_OMAP54XX is not set
+# CONFIG_AM43XX is not set
+# CONFIG_AM33XX is not set
+# CONFIG_ARCH_RMOBILE is not set
+# CONFIG_TARGET_S32V234EVB is not set
+# CONFIG_ARCH_SNAPDRAGON is not set
+# CONFIG_ARCH_SOCFPGA is not set
+# CONFIG_TARGET_CM_T43 is not set
+# CONFIG_ARCH_SUNXI is not set
+# CONFIG_TARGET_TS4800 is not set
+# CONFIG_TARGET_VF610TWR is not set
+# CONFIG_TARGET_COLIBRI_VF is not set
+# CONFIG_TARGET_PCM052 is not set
+# CONFIG_TARGET_BK4R1 is not set
+# CONFIG_ARCH_ZYNQ is not set
+# CONFIG_ARCH_ZYNQMP is not set
+# CONFIG_TEGRA is not set
+# CONFIG_TARGET_VEXPRESS64_AEMV8A is not set
+# CONFIG_TARGET_VEXPRESS64_BASE_FVP is not set
+# CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM is not set
+# CONFIG_TARGET_VEXPRESS64_JUNO is not set
+# CONFIG_TARGET_LS2080A_EMU is not set
+# CONFIG_TARGET_LS2080A_SIMU is not set
+# CONFIG_TARGET_LS2080AQDS is not set
+# CONFIG_TARGET_LS2080ARDB is not set
+# CONFIG_TARGET_HIKEY is not set
+# CONFIG_TARGET_LS1012AQDS is not set
+# CONFIG_TARGET_LS1012ARDB is not set
+# CONFIG_TARGET_LS1012AFRDM is not set
+# CONFIG_TARGET_LS1021AQDS is not set
+# CONFIG_TARGET_LS1021ATWR is not set
+# CONFIG_TARGET_LS1043AQDS is not set
+# CONFIG_TARGET_LS1043ARDB is not set
+# CONFIG_TARGET_LS1046AQDS is not set
+# CONFIG_TARGET_LS1046ARDB is not set
+# CONFIG_TARGET_H2200 is not set
+# CONFIG_TARGET_ZIPITZ2 is not set
+# CONFIG_TARGET_COLIBRI_PXA270 is not set
+# CONFIG_ARCH_UNIPHIER is not set
+# CONFIG_STM32 is not set
+# CONFIG_ARCH_ROCKCHIP is not set
+# CONFIG_TARGET_THUNDERX_88XX is not set
+# CONFIG_ARMV7_LPAE is not set
+CONFIG_IDENT_STRING=""
+# CONFIG_PRE_CONSOLE_BUFFER is not set
+# CONFIG_VIDEO is not set
+
+#
+# ARM debug
+#
+# CONFIG_DEBUG_LL is not set
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_DISTRO_DEFAULTS is not set
+# CONFIG_SYS_MALLOC_F is not set
+CONFIG_EXPERT=y
+CONFIG_SYS_MALLOC_CLEAR_ON_INIT=y
+# CONFIG_TOOLS_DEBUG is not set
+# CONFIG_PHYS_64BIT is not set
+
+#
+# Boot images
+#
+# CONFIG_FIT is not set
+CONFIG_SYS_EXTRA_OPTIONS=""
+CONFIG_ARCH_FIXUP_FDT=y
+
+#
+# Boot timing
+#
+# CONFIG_BOOTSTAGE is not set
+CONFIG_BOOTSTAGE_USER_COUNT=20
+CONFIG_BOOTSTAGE_STASH_ADDR=0
+CONFIG_BOOTSTAGE_STASH_SIZE=4096
+
+#
+# Boot media
+#
+# CONFIG_NAND_BOOT is not set
+# CONFIG_ONENAND_BOOT is not set
+# CONFIG_QSPI_BOOT is not set
+# CONFIG_SATA_BOOT is not set
+# CONFIG_SD_BOOT is not set
+# CONFIG_SPI_BOOT is not set
+CONFIG_BOOTDELAY=2
+
+#
+# Console
+#
+# CONFIG_CONSOLE_RECORD is not set
+# CONFIG_SILENT_CONSOLE is not set
+# CONFIG_CONSOLE_MUX is not set
+# CONFIG_SYS_CONSOLE_IS_IN_ENV is not set
+# CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE is not set
+# CONFIG_SYS_CONSOLE_ENV_OVERWRITE is not set
+# CONFIG_SYS_CONSOLE_INFO_QUIET is not set
+# CONFIG_SYS_STDIO_DEREGISTER is not set
+CONFIG_DEFAULT_FDT_FILE=""
+# CONFIG_SYS_NO_FLASH is not set
+# CONFIG_VERSION_VARIABLE is not set
+# CONFIG_DISPLAY_CPUINFO is not set
+# CONFIG_DISPLAY_BOARDINFO is not set
+
+#
+# SPL / TPL
+#
+
+#
+# Command line interface
+#
+# CONFIG_CMDLINE is not set
+CONFIG_SYS_PROMPT="=> "
+
+#
+# Autoboot options
+#
+CONFIG_AUTOBOOT=y
+# CONFIG_AUTOBOOT_KEYED is not set
+
+#
+# FASTBOOT
+#
+# CONFIG_FASTBOOT is not set
+
+#
+# Commands
+#
+
+#
+# Info commands
+#
+# CONFIG_CMD_BDI is not set
+# CONFIG_CMD_CONSOLE is not set
+# CONFIG_CMD_CPU is not set
+# CONFIG_CMD_LICENSE is not set
+
+#
+# Boot commands
+#
+# CONFIG_CMD_BOOTD is not set
+# CONFIG_CMD_BOOTM is not set
+# CONFIG_CMD_BOOTZ is not set
+# CONFIG_CMD_ELF is not set
+# CONFIG_CMD_GO is not set
+# CONFIG_CMD_RUN is not set
+# CONFIG_CMD_IMI is not set
+# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_XIMG is not set
+
+#
+# Environment commands
+#
+# CONFIG_CMD_ASKENV is not set
+# CONFIG_CMD_EXPORTENV is not set
+# CONFIG_CMD_IMPORTENV is not set
+# CONFIG_CMD_EDITENV is not set
+# CONFIG_CMD_GREPENV is not set
+# CONFIG_CMD_SAVEENV is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+
+#
+# Memory commands
+#
+# CONFIG_CMD_MEMORY is not set
+# CONFIG_CMD_CRC32 is not set
+# CONFIG_LOOPW is not set
+# CONFIG_CMD_MEMTEST is not set
+# CONFIG_CMD_MX_CYCLIC is not set
+# CONFIG_CMD_MEMINFO is not set
+
+#
+# Device access commands
+#
+# CONFIG_CMD_LOADB is not set
+# CONFIG_CMD_LOADS is not set
+# CONFIG_CMD_FLASH is not set
+# CONFIG_CMD_ARMFLASH is not set
+# CONFIG_CMD_MMC is not set
+# CONFIG_CMD_NAND is not set
+# CONFIG_CMD_SF is not set
+# CONFIG_CMD_SPI is not set
+# CONFIG_CMD_I2C is not set
+# CONFIG_CMD_USB is not set
+# CONFIG_CMD_DFU is not set
+# CONFIG_CMD_USB_MASS_STORAGE is not set
+# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_GPIO is not set
+
+#
+# Shell scripting commands
+#
+# CONFIG_CMD_ECHO is not set
+# CONFIG_CMD_ITEST is not set
+# CONFIG_CMD_SOURCE is not set
+# CONFIG_CMD_SETEXPR is not set
+
+#
+# Network commands
+#
+# CONFIG_CMD_NET is not set
+# CONFIG_CMD_TFTPPUT is not set
+# CONFIG_CMD_TFTPSRV is not set
+# CONFIG_CMD_RARP is not set
+# CONFIG_CMD_DHCP is not set
+# CONFIG_CMD_NFS is not set
+# CONFIG_CMD_MII is not set
+# CONFIG_CMD_PING is not set
+# CONFIG_CMD_CDP is not set
+# CONFIG_CMD_SNTP is not set
+# CONFIG_CMD_DNS is not set
+# CONFIG_CMD_LINK_LOCAL is not set
+
+#
+# Misc commands
+#
+# CONFIG_CMD_CACHE is not set
+# CONFIG_CMD_TIME is not set
+# CONFIG_CMD_MISC is not set
+# CONFIG_CMD_TIMER is not set
+# CONFIG_CMD_QFW is not set
+
+#
+# Power commands
+#
+
+#
+# Security commands
+#
+
+#
+# Firmware commands
+#
+
+#
+# Filesystem commands
+#
+# CONFIG_CMD_EXT2 is not set
+# CONFIG_CMD_EXT4 is not set
+# CONFIG_CMD_FAT is not set
+# CONFIG_CMD_FS_GENERIC is not set
+# CONFIG_CMD_UBI is not set
+CONFIG_SUPPORT_OF_CONTROL=y
+
+#
+# Device Tree Control
+#
+# CONFIG_OF_CONTROL is not set
+CONFIG_NET=y
+# CONFIG_NET_RANDOM_ETHADDR is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_TFTP_VARS is not set
+CONFIG_BOOTP_PXE_CLIENTARCH=0x15
+CONFIG_BOOTP_VCI_STRING="U-Boot.armv7"
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+# CONFIG_DM is not set
+# CONFIG_ADC is not set
+# CONFIG_ADC_EXYNOS is not set
+# CONFIG_ADC_SANDBOX is not set
+# CONFIG_BLOCK_CACHE is not set
+
+#
+# Clock
+#
+# CONFIG_CPU is not set
+
+#
+# Hardware crypto devices
+#
+# CONFIG_FSL_CAAM is not set
+
+#
+# Demo for driver model
+#
+
+#
+# DFU support
+#
+
+#
+# DMA Support
+#
+# CONFIG_TI_EDMA3 is not set
+
+#
+# FPGA support
+#
+# CONFIG_FPGA_XILINX is not set
+
+#
+# GPIO Support
+#
+
+#
+# I2C support
+#
+# CONFIG_SYS_I2C_DW is not set
+# CONFIG_CROS_EC_KEYB is not set
+
+#
+# LED Support
+#
+
+#
+# Mailbox Controller Support
+#
+
+#
+# Memory Controller drivers
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_CROS_EC is not set
+# CONFIG_FSL_SEC_MON is not set
+# CONFIG_MXC_OCOTP is not set
+# CONFIG_NUVOTON_NCT6102D is not set
+# CONFIG_PCA9551_LED is not set
+# CONFIG_WINBOND_W83627 is not set
+
+#
+# MMC Host controller Support
+#
+
+#
+# MTD Support
+#
+
+#
+# NAND Device Support
+#
+# CONFIG_NAND_DENALI is not set
+# CONFIG_NAND_VF610_NFC is not set
+# CONFIG_NAND_PXA3XX is not set
+# CONFIG_NAND_ARASAN is not set
+
+#
+# Generic NAND options
+#
+
+#
+# SPI Flash Support
+#
+# CONFIG_SPI_FLASH is not set
+
+#
+# UBI support
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PHYLIB is not set
+# CONFIG_NETDEVICES is not set
+# CONFIG_PCI is not set
+# CONFIG_MVEBU_COMPHY_SUPPORT is not set
+
+#
+# Pin controllers
+#
+
+#
+# Power
+#
+
+#
+# Power Domain Support
+#
+
+#
+# Remote Processor drivers
+#
+
+#
+# Reset Controller Support
+#
+
+#
+# Real Time Clock
+#
+
+#
+# Serial drivers
+#
+# CONFIG_DEBUG_UART is not set
+# CONFIG_DEBUG_UART_SKIP_INIT is not set
+# CONFIG_ATMEL_USART is not set
+# CONFIG_FSL_LPUART is not set
+# CONFIG_MVEBU_A3700_UART is not set
+# CONFIG_SYS_NS16550 is not set
+
+#
+# Sound support
+#
+# CONFIG_SOUND is not set
+
+#
+# SPI Support
+#
+# CONFIG_FSL_ESPI is not set
+# CONFIG_FSL_QSPI is not set
+# CONFIG_TI_QSPI is not set
+
+#
+# SPMI support
+#
+
+#
+# System reset device drivers
+#
+# CONFIG_DM_THERMAL is not set
+
+#
+# Timer Support
+#
+
+#
+# TPM support
+#
+# CONFIG_USB is not set
+
+#
+# Graphics support
+#
+
+#
+# TrueType Fonts
+#
+# CONFIG_VIDEO_VESA is not set
+# CONFIG_VIDEO_LCD_ANX9804 is not set
+# CONFIG_VIDEO_LCD_SSD2828 is not set
+# CONFIG_VIDEO_MVEBU is not set
+# CONFIG_LCD is not set
+# CONFIG_PHYS_TO_BUS is not set
+
+#
+# File systems
+#
+
+#
+# Library routines
+#
+# CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED is not set
+CONFIG_HAVE_PRIVATE_LIBGCC=y
+CONFIG_USE_PRIVATE_LIBGCC=y
+CONFIG_SYS_HZ=1000
+# CONFIG_USE_TINY_PRINTF is not set
+CONFIG_REGEX=y
+# CONFIG_LIB_RAND is not set
+# CONFIG_CMD_DHRYSTONE is not set
+# CONFIG_RSA is not set
+
+#
+# Hashing Support
+#
+# CONFIG_SHA1 is not set
+# CONFIG_SHA256 is not set
+# CONFIG_SHA_HW_ACCEL is not set
+
+#
+# Compression Support
+#
+# CONFIG_LZ4 is not set
+# CONFIG_ERRNO_STR is not set
+# CONFIG_OF_LIBFDT is not set
+# CONFIG_OF_LIBFDT_OVERLAY is not set
+# CONFIG_SPL_OF_LIBFDT is not set
+
+#
+# System tables
+#
+# CONFIG_UNIT_TEST is not set
diff –git a/include/configs/sunny.h b/include/configs/sunny.h
new file mode 100644
index 0000000..5a1af26
— /dev/null
+++ b/include/configs/sunny.h
@@ -0,0 +1,29 @@
+#ifndef SUNNY_H
+
+#define SUNNY_H
+
+#define CONFIG_SUNNY
+
+#define CONFIG_ENV_SIZE (128 << 10)
+#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (64 << 20))
+#define CONFIG_SYS_TEXT_BASE 0x2a000000
+#define CONFIG_SYS_LOAD_ADDR 0x22000000
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_SYS_INIT_RAM_ADDR 0x0
+#define CONFIG_SYS_INIT_RAM_SIZE 0x8000
+#define CONFIG_SYS_INIT_SP_OFFSET \
- (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
-
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_CLK 24000000
+#define CONFIG_SYS_NS16550_REG_SIZE -4
+
+#define SUNXI_UART0_BASE 0x01c28000
+#define CONFIG_SYS_NS16550_COM1 SUNXI_UART0_BASE
+#endif
+
然后我执行make sunny_defconfig 输出正常 再执行 make CROSS_COMPILE=arm-linux-gnueabihf-下面是最后的输出结果,在最后链接的时候出现了链接错误
LDS u-boot.lds LD u-boot arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils) 2.25.0 Linaro 2015_10 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/label/tcwg-x86_64-ex40/target/arm-linux-gnueabihf/snapshots/binutils-gdb.git~linaro_binutils-2_25-branch/bfd/elf32-arm.c:7827 arm-linux-gnueabihf-ld.bfd: error: required section '.rel.plt' not found in the linker script arm-linux-gnueabihf-ld.bfd: final link failed: Invalid operation Makefile:1207: recipe for target 'u-boot' failed make: *** Error 1
应该是编译器版本不对,不知道这个板子为什么用arm-linux-gnueabihf的编译器?版本是多少呢?另外,你可以试试下面的这个: ifeq ($(BOARD_NAME), tiny210)
use arm-linux-gcc-4.8.3 to build uboot and uboot-spl.
COMPILE_URL=https://github.com/ooonebook/arm-none-linux-gnueabi-4.8.git CROSS_COMPILE=$(shell pwd)/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- endif
不是编译器的问题,我编译make Cubieboard_defconfig && make CROSS_COMPILE=arm-linux-gnueabihf- 就正常
我看了你的代码,觉得移植的有点问题,因为在你的分支上,make Cubieboard_defconfig && make CROSS_COMPILE=arm-linux-gnueabihf- ,也编译不通过。 具体原因我没有细看,我大概对比了一下两个分支的一些内容,发现有一些异常,你可以先看看(例如cub1_conf和cub2_conf的对比,明显CONFIG_ARCH_SUNNY不该出现):
[== Undefined ==]
/* cubieboard 分支 */
pengo@ubuntu:~/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- sunny_defconfig > sunny.log
pengo@ubuntu:~/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- >> sunny.log
pengo@ubuntu:/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- Cubieboard_defconfig > cub1.log
pengo@ubuntu:/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- >> cub1.log
/* master 分支 */
pengo@ubuntu:/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- Cubieboard_defconfig > cub2.log
pengo@ubuntu:/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- >> cub2.log
/* cubieboard 分支 */
pengo@ubuntu:~/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- Cubieboard_defconfig
configuration written to .config
pengo@ubuntu:~/work/oser/u-boot$ cp .config cub1_conf
pengo@ubuntu:/work/oser/u-boot$ cp .config cub1_conf
pengo@ubuntu:/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- sunny_defconfig
configuration written to .config
pengo@ubuntu:~/work/oser/u-boot$ cp .config sunny_conf
/* master 分支 */
pengo@ubuntu:~/work/oser/u-boot$ make CROSS_COMPILE=/home/pengo/work/xprj/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi- Cubieboard_defconfig
configuration written to .config
pengo@ubuntu:~/work/oser/u-boot$ cp .config cub2_conf
在分支cubieboard编译make Cubieboard_defconfig && make CROSS_COMPILE=arm-linux-gnueabihf- 的问题已经解决,但是编译sunny_defconfig还是之前的问题
下面是更改过后的diff:
[== Undefined ==]
oser@OnePiece:~/github/u-boot$ git diff 17cbc0a df3b616
diff --git a/board/sunny/Kconfig b/board/sunny/Kconfig
index 183bbe9..65e80c4 100644
--- a/board/sunny/Kconfig
+++ b/board/sunny/Kconfig
@@ -1,4 +1,3 @@
-if TARGET_SUNNY
config ARCH_SUNNY
bool
@@ -37,4 +36,4 @@ config CONS_INDEX
int "console index"
default 1
-endif
+
OSer 写道: 在分支cubieboard编译make Cubieboard_defconfig && make CROSS_COMPILE=arm-linux-gnueabihf- 的问题已经解决,但是编译sunny_defconfig还是之前的问题
下面是更改过后的diff:
[== Undefined ==]
oser@OnePiece:~/github/u-boot$ git diff 17cbc0a df3b616
diff --git a/board/sunny/Kconfig b/board/sunny/Kconfig
index 183bbe9..65e80c4 100644
--- a/board/sunny/Kconfig
+++ b/board/sunny/Kconfig
@@ -1,4 +1,3 @@
-if TARGET_SUNNY
config ARCH_SUNNY
bool
@@ -37,4 +36,4 @@ config CONS_INDEX
int "console index"
default 1
-endif
+
今天比较忙,你先稍等,有时间我帮你debug一下。
昨天试着移植了一下armv7的board,确实有这个问题。根据链接器的错误信息,发现是通过-pie选项,生成位置无关代码的时候,有些*.o不符合要求,可能是少了什么东西。暂时还没有解决。 没想到armv7还这么难搞,我会再看看,解决了会写一个armv7的移植指南。 有经验的同学也请帮忙提供一下思路。
麻烦你了,谢谢,共同学习。
找到原因了,在board/sunny/board.c中,定义下面两个函数:
[== Undefined ==]
ulong get_timer(ulong base)
{
return 0;
}
void __udelay(unsigned long usec)
{
}
就可以正确编译(把get_tbclk删掉)。 不知道为什么直接定义get_tbclk,可以解决编译问题,为什么不能解决链接问题,这真是一个有意思的事情。
继续查原因……………………………… 把这个函数注释掉:
[== Undefined ==]
#if 0
void __udelay(unsigned long usec)
{
}
#endif
把这个加回来:
[== Undefined ==]
ulong get_tbclk(void)
{
return 0;
}
编译不通过,范围收窄到__delay中。 把lib/time.c中__delay函数的get_ticks接口注释掉,如下:
[== Undefined ==]
void __weak __udelay(unsigned long usec)
{
uint64_t tmp;
tmp = /* get_ticks( + */ usec_to_tick(usec); /* get current timestamp */
/* while (get_ticks( < tmp+1) */ /* loop till event */
/*NOP*/;
}
编译通过,范围缩小到get_ticks中。 继续查get_ticks,发现这个代码:
[== Undefined ==]
#ifdef CONFIG_SYS_TIMER_COUNTER
unsigned long notrace timer_read_counter(void)
{
#ifdef CONFIG_SYS_TIMER_COUNTS_DOWN
return ~readl(CONFIG_SYS_TIMER_COUNTER);
#else
return readl(CONFIG_SYS_TIMER_COUNTER);
#endif
}
#else
extern unsigned long __weak timer_read_counter(void);
#endif
真相终于大白了,我们没有定义CONFIG_SYS_TIMER_COUNTER,也没有实现 timer_read_counter,这里只有一个声明,就造成编译通过,链接不过的问题(说实话这个坑很大啊!!!!!!),最终的解决方法有2: 1. 定义CONFIG_SYS_TIMER_COUNTER。 2. 实现timer_read_counter。
最后吐槽一下,这样的代码:
[== Undefined ==]
extern unsigned long __weak timer_read_counter(void);
简直是狗屎!! 既然用__weak了,还extern个屁啊,直接实现一个空函数就行了啊!!
你好,可以不可以告诉我遇到这样的问题是怎样分析的?
OSer 写道: 你好,可以不可以告诉我遇到这样的问题是怎样分析的?
其实我也折腾很久,本来一个很简单的问题,按理说应该是一个链接错误,直接指出哪个符号没有,就很容易找。 但这里竟是一个奇奇怪怪的错误,看起来应该是-pie选项的原因。 至于我是怎么分析的,就是试了很多次之后,慢慢的怀疑是某个符号找不到,然后怀疑到time.c上,一点一点的找出来的。
