tiny4412 --uboot移植(1)

開發環境:win10 64位 + VMware12 + Ubuntu14.04 32位html

工具鏈:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabilinux

要移植的u-boot版本:u-boot-2016-11ios

Tiny4412開發板硬件版本爲git

  底板:  Tiny4412SDK 1312Bubuntu

  核心板:Tiny4412 - 1306工具

 *****************************************************************************
ui

參考:https://www.cnblogs.com/LoTGu/p/6078966.htmlspa

https://blog.csdn.net/sinat_20006769/article/details/79046194.net

 

1.獲取U-BOOT源碼

  • 從FTP站點下載: ftp://ftp.denx.de/pub/u-boot
  • uboot-2016-09.tar.bz2

2.交叉編譯工具鏈

3.解壓裁剪

  •  

4.初步移植(拷貝模板)code

  u-boot/board/samsung目錄下基於exynos4412的開發板有:origen、odroid、trats、trats2,可是隻有origen支spl配置,根據exynos4412芯片啓動的特色,選擇origen做爲參考比較合適。

   cp -r origen/ tiny4412

  1)修改 ./board/samsung/tiny4412/tiny4412.c

     直接修改文件名便可;

  2)修改 ./board/samsung/tiny4412/Kconfig

root@ubuntu:/home/arm/u-boot-2016.11# git diff 6a31271 board/samsung/tiny4412/Kconfig diff --git a/board/samsung/tiny4412/Kconfig b/board/samsung/tiny4412/Kcon new file mode 100644 index 0000000..e7e759c --- /dev/null
+++ b/board/samsung/tiny4412/Kconfig @@ -0,0 +1,15 @@ +if TARGET_TINY4412 +
+config SYS_BOARD +       default "tiny4412"
+
+config SYS_VENDOR +       default "samsung"
+
+config SYS_CONFIG_NAME +       default "tiny4412"
+
+config EXYNOS4412 +    bool
+
+endif

  3)修改 ./board/samsung/tiny4412/MAINTAINERS

diff --git a/board/samsung/tiny4412/MAINTAINERS b/board/samsung/tiny4412/
new file mode 100644 index 0000000..fdcd79e --- /dev/null
+++ b/board/samsung/tiny4412/MAINTAINERS @@ -0,0 +1,6 @@ +TINY4412 BOARD +M:     Chander 123 <34777829@qq.com>
+S: Maintained +F:     board/samsung/tiny4412/
+F:     include/configs/tiny4412.h +F:     configs/tiny4412_defconfig

  4)修改 ./board/samsung/tiny4412/tools/mktiny4412spl.c

diff --git a/board/samsung/tiny4412/tools/mktiny4412spl.c b/board/samsung new file mode 100644 index 0000000..c0d0453 --- /dev/null
+++ b/board/samsung/tiny4412/tools/mktiny4412spl.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * + * SPDX-License-Identifier: GPL-2.0+ + */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define BUFSIZE                        (16*1024)
+#define IMG_SIZE               ((14*1024)-4)
+#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
+                               | S_IWGRP | S_IROTH | S_IWOTH) +/* +* Requirement: +* IROM code reads first 14K bytes from boot device. +* It then calculates the checksum of 14K-4 bytes and compare with data a +* 14K-4 offset. +* +* This function takes two filenames: +* IN "u-boot-spl.bin" and +* OUT "$(BOARD)-spl.bin as filenames. +* It reads the "u-boot-spl.bin" in 16K buffer. +* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in bu +* It writes the buffer to "$(BOARD)-spl.bin" file. +*/
+
+int main(int argc, char **argv) +{ +       int i, len; +       unsigned char buffer[BUFSIZE] = {0}; +       int ifd, ofd; +       unsigned int checksum = 0; +    unsigned int count = 0; +
+       if (argc != 3) { +               printf(" %d Wrong number of arguments\n", argc); + exit(EXIT_FAILURE); + } +
+       ifd = open(argv[1], O_RDONLY); +       if (ifd < 0) { +               fprintf(stderr, "%s: Can't open %s: %s\n", +                       argv[0], argv[1], strerror(errno)); + exit(EXIT_FAILURE); + } +
+       ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM); +       if (ofd < 0) { +               fprintf(stderr, "%s: Can't open %s: %s\n", +                       argv[0], argv[2], strerror(errno)); +               if (ifd) + close(ifd); + exit(EXIT_FAILURE); + } +
+       len = lseek(ifd, 0, SEEK_END); +       lseek(ifd, 0, SEEK_SET); +
+       if (read(ifd, buffer , count) != count) { +               fprintf(stderr, "%s: Can't read %s: %s\n", +                       argv[0], argv[1], strerror(errno)); +
+               if (ifd) + close(ifd); +               if (ofd) + close(ofd); +
+ exit(EXIT_FAILURE); + } +
+       for (i = 0; i < IMG_SIZE ; i++) + { +               checksum += (unsigned char)(buffer[i]); + } +
+       *(unsigned int *)(buffer+i) = checksum; +
+       if (write(ofd, buffer, BUFSIZE) != BUFSIZE) { +               fprintf(stderr, "%s: Can't write %s: %s\n", +                       argv[0], argv[2], strerror(errno)); +
+               if (ifd) + close(ifd); +               if (ofd) + close(ofd); +
+ exit(EXIT_FAILURE); + } +
+       if (ifd) + close(ifd); +       if (ofd) + close(ofd); +
+       return EXIT_SUCCESS; +}

  5)修改 ./board/samsung/tiny4412/Makefile

diff --git a/board/samsung/tiny4412/Makefile b/board/samsung/tiny4412/Mak new file mode 100644 index 0000000..0beabeb --- /dev/null
+++ b/board/samsung/tiny4412/Makefile @@ -0,0 +1,22 @@ +# +# Copyright (C) 2011 Samsung Electronics +# +# SPDX-License-Identifier:     GPL-2.0+
+# +
+ifdef CONFIG_SPL_BUILD +# necessary to create built-in.o +obj- := __dummy__.o +
+hostprogs-y := tools/mktiny4412spl +always := $(hostprogs-y) +
+# omit -O2 option to suppress +#   warning: dereferencing type-punned pointer will break strict-aliasin +# +# TODO: +# Fix the root cause in tools/mkorigenspl.c and delete the following wor +$(obj)/tools/mktiny4412spl: HOSTCFLAGS:=$(filter-out -O2,$(HOSTCFLAGS)) +else
+obj-y  += tiny4412.o +endif (END)

 

  6)添加include/configs/tiny4412.h

  cp   include/configs/origen.h   include/configs/tiny4412.h 

 

diff --git a/include/configs/tiny4412.h b/include/configs/tiny4412.h new file mode 100644 index 0000000..fef910f --- /dev/null
+++ b/include/configs/tiny4412.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * + * Configuration settings for the SAMSUNG ORIGEN (EXYNOS4210) board. + * + * SPDX-License-Identifier: GPL-2.0+ + */
+
+#ifndef __CONFIG_TINY4412_H +#define __CONFIG_TINY4412_H
+
+#include <configs/exynos4-common.h>
+
+/*TIZEN THOR downloader support*/
+#undef CONFIG_CMD_THOR_DOWNLOAD
+#undef CONFIG_USB_FUNCTION_THOR
+
+/* High Level Configuration Options */
+#define TINY4412         1
+
+#define CONFIG_SYS_DCACHE_OFF          1
+
+/* ORIGEN has 4 bank of DRAM */
+#define CONFIG_NR_DRAM_BANKS           4
+#define CONFIG_SYS_SDRAM_BASE          0x40000000
+#define PHYS_SDRAM_1                   CONFIG_SYS_SDRAM_BASE
+#define SDRAM_BANK_SIZE                        (256 << 20)     /* 256 MB
+
+/* memtest works on */
+#define CONFIG_SYS_MEMTEST_START       CONFIG_SYS_SDRAM_BASE
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_SDRAM_BASE + 0x600000
+#define CONFIG_SYS_LOAD_ADDR           (CONFIG_SYS_SDRAM_BASE + 0x3E0000
+
+#define CONFIG_SYS_TEXT_BASE           0x43E00000
+
+#define CONFIG_MACH_TYPE               MACH_TYPE_TINY4412
+
+/* select serial console configuration */
+#define CONFIG_SERIAL2
+#define CONFIG_BAUDRATE                        115200
+
+/* Console configuration */
+#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
+
+#define CONFIG_SYS_MEM_TOP_HIDE        (1 << 20)       /* ram console */
+
+#define CONFIG_SYS_MONITOR_BASE        0x00000000
+
+/* Power Down Modes */
+#define S5P_CHECK_SLEEP                        0x00000BAD
+#define S5P_CHECK_DIDLE                        0xBAD00000
+#define S5P_CHECK_LPA                  0xABAD0000
+
+#define CONFIG_SUPPORT_RAW_INITRD
+
+/* MMC SPL */
+#define COPY_BL2_FNPTR_ADDR    0x02020030
+#define CONFIG_SPL_TEXT_BASE   0x02023400
+#define CONFIG_SPL_STACK        0x02060000
+
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "loadaddr=0x40007000\0" \ +       "rdaddr=0x48000000\0" \ +       "kerneladdr=0x40007000\0" \ +       "ramdiskaddr=0x48000000\0" \ +       "console=ttySAC2,115200n8\0" \ +       "mmcdev=0\0" \ +       "bootenv=uEnv.txt\0" \ +       "loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ +       "importbootenv=echo Importing environment from mmc ...; " \ +               "env import -t $loadaddr $filesize\0" \ +        "loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr\0" \ +        "bootscript=echo Running bootscript from mmc${mmcdev} ...; " \ +                "source ${loadaddr}\0"
+#define CONFIG_BOOTCOMMAND \
+       "if mmc rescan; then " \ +               "echo SD/MMC found on device ${mmcdev};" \ +               "if run loadbootenv; then " \ +                       "echo Loaded environment from ${bootenv};" \ +                       "run importbootenv;" \ +               "fi;" \ +               "if test -n $uenvcmd; then " \ +                       "echo Running uenvcmd ...;" \ +                       "run uenvcmd;" \ +               "fi;" \ +               "if run loadbootscript; then " \ +                       "run bootscript; " \ +               "fi; " \ +       "fi;" \ +       "load mmc ${mmcdev} ${loadaddr} uImage; bootm ${loadaddr} "
+
+#define CONFIG_CLK_1000_400_200
+
+/* MIU (Memory Interleaving Unit) */
+#define CONFIG_MIU_2BIT_21_7_INTERLEAVED
+
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define CONFIG_ENV_SIZE                        (16 << 10)      /* 16 KB 
+#define RESERVE_BLOCK_SIZE             (512)
+#define BL1_SIZE                       (16 << 10) /*16 K reserved for BL
+#define CONFIG_ENV_OFFSET              (RESERVE_BLOCK_SIZE + BL1_SIZE)
+
+#define CONFIG_SPL_LDSCRIPT    "board/samsung/common/exynos-uboot-spl.ld
+#define CONFIG_SPL_MAX_FOOTPRINT       (14 * 1024)
+
+#define CONFIG_SYS_INIT_SP_ADDR                0x02040000
+
+/* U-Boot copy size from boot Media to DRAM.*/
+#define COPY_BL2_SIZE          0x80000
+#define BL2_START_OFFSET       ((CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)/51
+#define BL2_SIZE_BLOC_COUNT    (COPY_BL2_SIZE/512)
+
+#endif /* __CONFIG_H */

 

  7)修改 configs/tiny4412_defconfig

   cp  /configs/origin_defconfig  /configs/tiny4412_defconfig

 

diff --git a/configs/tiny4412_defconfig b/configs/tiny4412_defconfig new file mode 100644 index 0000000..ccc9fab --- /dev/null
+++ b/configs/tiny4412_defconfig @@ -0,0 +1,39 @@ +CONFIG_ARM=y +CONFIG_ARCH_EXYNOS=y +CONFIG_ARCH_EXYNOS4=y +CONFIG_TARGET_TINY4412=y +CONFIG_IDENT_STRING=" for TINY4412"
+CONFIG_DEFAULT_DEVICE_TREE="exynos4412-tiny4412"
+CONFIG_SYS_CONSOLE_IS_IN_ENV=y +CONFIG_SYS_CONSOLE_INFO_QUIET=y +CONFIG_SPL=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="TINY4412 # "
+CONFIG_CMD_BOOTZ=y +# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_XIMG is not set
+CONFIG_CMD_MMC=y +# CONFIG_CMD_DFU=y +# CONFIG_CMD_USB_MASS_STORAGE=y +# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_NET is not set
+# CONFIG_CMD_DHCP=y +# CONFIG_CMD_NFS is not set
+CONFIG_CMD_MII=y +CONFIG_CMD_CACHE=y +# CONFIG_CMD_MISC is not set
+CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_OF_CONTROL=y +#CONFIG_DFU_MMC=y +#CONFIG_USB=y +#CONFIG_DM_USB=y +#CONFIG_USB_GADGET=y +#CONFIG_USB_GADGET_DWC2_OTG=y +#CONFIG_USB_GADGET_DOWNLOAD=y +#CONFIG_G_DNL_MANUFACTURER="Samsung"
+#CONFIG_G_DNL_VENDOR_NUM=0x04e8
+#CONFIG_G_DNL_PRODUCT_NUM=0x6601

 

  8)修改arch/arm/mach-exynos/Makefile

diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefil index 0cc6c32..5f8b6ba 100644
--- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile @@ -15,6 +15,8 @@ ifdef CONFIG_SPL_BUILD obj-$(CONFIG_EXYNOS5)  += clock_init_exynos5.o obj-$(CONFIG_EXYNOS5)  += dmc_common.o dmc_init_ddr3.o obj-$(CONFIG_EXYNOS4210)+= dmc_init_exynos4.o clock_init_exynos4.o +obj-$(CONFIG_EXYNOS4412)+= dmc_init_exynos4.o clock_init_exynos4.o + obj-y  += spl_boot.o tzpc.o obj-y  += lowlevel_init.o endif

  9) 修改arch/arm/mach-exynos/Kconfig,在執行make menuconfig時會看到tiny4412 board選項

diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index ce2a16f..473fef0 100644
--- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -55,6 +55,15 @@ config TARGET_TRATS2 config TARGET_ODROID bool "Exynos4412 Odroid board"
+config TARGET_TINY4412 +    bool "Exynos4412 FriendlyARM Tiny4412 board"
+    select SUPPORT_SPL +    select SPL +    select EXYNOS4412 + help + Support FriendlyARM Tiny4412 board based on Samsung exynos4412 + CPU: S5PC220[Samsung SOC on SMP Platform Base on ARM CortexA9 +] endchoice endif @@ -143,6 +152,7 @@ source "board/samsung/smdkv310/Kconfig" source "board/samsung/trats/Kconfig" source "board/samsung/universal_c210/Kconfig" source "board/samsung/origen/Kconfig"
+source "board/samsung/tiny4412/Kconfig" source "board/samsung/trats2/Kconfig" source "board/samsung/odroid/Kconfig" source "board/samsung/arndale/Kconfig"

  10)修改arch/arm/mach-exynos/exynos4_setup.h

diff --git a/arch/arm/mach-exynos/exynos4_setup.h b/arch/arm/mach-exynos/ index 9f29d94..838e02c 100644
--- a/arch/arm/mach-exynos/exynos4_setup.h +++ b/arch/arm/mach-exynos/exynos4_setup.h @@ -440,6 +440,12 @@ struct mem_timings { #define APB_SFR_ARBRITATION_CONF_VAL   0x00000001
 #endif
 
+#ifdef TINY4412 +/* Interleave: 2Bit, Interleave_bit1: 0x15, Interleave_bit0: 0x7 */
+#define APB_SFR_INTERLEAVE_CONF_VAL    0x20001507
+#define APB_SFR_ARBRITATION_CONF_VAL   0x00000001
+#endif
+
 #define INTERLEAVE_ADDR_MAP_START_ADDR 0x40000000
 #define INTERLEAVE_ADDR_MAP_END_ADDR   0xbfffffff
 #define INTERLEAVE_ADDR_MAP_EN         0x00000001

  11)修改arch/arm/include/asm/mach-types.h,增長tiny4412machine ID

diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mac index d51be0b..297f1c3 100644
--- a/arch/arm/include/asm/mach-types.h +++ b/arch/arm/include/asm/mach-types.h @@ -1107,6 +1107,7 @@ extern unsigned int __machine_arch_type; #define MACH_TYPE_COLIBRI_T30          4493
 #define MACH_TYPE_APALIS_T30           4513
 #define MACH_TYPE_OMAPL138_LCDK        2495
+#define MACH_TYPE_TINY4412             4608 #ifdef CONFIG_ARCH_EBSA110 # ifdef machine_arch_type

  12) 修改arch/arm/dts/Makefile,用於編譯tiny4412設備樹

diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 836a8c4..771e713 100644
--- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -14,6 +14,7 @@ dtb-$(CONFIG_EXYNOS4) += exynos4210-origen.dtb \ exynos4210-universal_c210.dtb \ exynos4210-trats.dtb \ exynos4412-trats2.dtb \ +    exynos4412-tiny4412.dtb \ exynos4412-odroid.dtb dtb-$(CONFIG_TARGET_HIKEY) += hi6220-hikey.dtb

  13) 添加arch/arm/dts/exynos4412-tiny4412.dts,使用uart0做爲終端

diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos44 new file mode 100644 index 0000000..4810202
--- /dev/null
+++ b/arch/arm/dts/exynos4412-tiny4412.dts @@ -0,0 +1,87 @@ +/* + * Odroid-U3/X2 board device tree source + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * http://www.samsung.com + * + * SPDX-License-Identifier: GPL-2.0+ + */
+
+/dts-v1/; +#include "exynos4412.dtsi"
+
+/ { +       model = "Tiny4412 based on Exynos4412"; +       compatible = "samsung,tiny4412", "samsung,exynos4412"; +
+ aliases { +               i2c0 = "/i2c@13860000"; +               i2c1 = "/i2c@13870000"; +               i2c2 = "/i2c@13880000"; +               i2c3 = "/i2c@13890000"; +               i2c4 = "/i2c@138a0000"; +               i2c5 = "/i2c@138b0000"; +               i2c6 = "/i2c@138c0000"; +               i2c7 = "/i2c@138d0000"; +               serial0 = "/serial@13800000"; +               console = "/serial@13810000"; +               mmc2 = "/sdhci@12530000"; +               mmc4 = "/dwmmc@12550000"; + }; +
+       i2c@13860000 { +               samsung,i2c-sda-delay = <100>; +               samsung,i2c-slave-addr = <0x10>; +               samsung,i2c-max-bus-freq = <100000>; +               status = "okay"; +
+ }; +
+       serial@13810000 { +               status = "okay"; + }; +
+       sdhci@12510000 { +               status = "disabled"; + }; +
+       sdhci@12520000 { +               status = "disabled"; + }; +
+       sdhci@12530000 { +               samsung,bus-width = <4>; +               samsung,timing = <1 2 3>; +               cd-gpios = <&gpk2 2 0>; + }; +
+       sdhci@12540000 { +               status = "disabled"; + }; +
+       dwmmc@12550000 { +               samsung,bus-width = <8>; +               samsung,timing = <2 1 0>; +               samsung,removable = <0>; +               fifoth_val = <0x203f0040>; +               bus_hz = <400000000>; +               div = <0x3>; +               index = <4>; + }; +
+       ehci@12580000 { +               compatible = "samsung,exynos-ehci"; +               reg = <0x12580000 0x100>; +               #address-cells = <1>; +               #size-cells = <1>; + phy { +                       compatible = "samsung,exynos-usb-phy"; +                       reg = <0x125B0000 0x100>; + }; + }; +
+       emmc-reset { +               compatible = "samsung,emmc-reset"; +               reset-gpio = <&gpk1 2 0>; + }; +};

 

  添加完相關代碼目錄後,執行以下命令進行編譯uboot

$ make distclean

$ make tiny4412_defconfig

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

能夠順利編譯出u-boot-spl.bin u-boot.bin文件,此時這個u-boot-spl.bin u-boot.bin文件還不能直接用在tiny4412 SDK開發板上,需進一步修改代碼。

 

問題:

 

編譯時提示 Your dtc is too old, please upgrade to dtc 1.4 or newer

./scripts/dtc-version.sh: line 17: dtc: command not found
./scripts/dtc-version.sh: line 18: dtc: command not found
* Your dtc is too old, please upgrade to dtc 1.4 or newer

解決:

apt-get install device-tree-compiler

相關文章
相關標籤/搜索