tiny4412移植U-Boot 2020.07
目录
0. 环境介绍
1. 成果/目标
2. 移植过程
2.1 下载U-Boot官方原版源码包
2.2 解压源码包,并进入源码目录
2.3 修改代码
2.3.0 懒人必备:所有patch一键打补丁
2.3.1 arch/arm/dts/Makefile
2.3.2 arch/arm/dts/exynos4412-tiny4412.dts
2.3.3 arch/arm/mach-exynos/Kconfig
2.3.4 arch/arm/mach-exynos/clock_init_exynos4.c
2.3.5 arch/arm/mach-exynos/dmc_init_exynos4.c
2.3.6 arch/arm/mach-exynos/exynos4412_setup.h
2.3.7 arch/arm/mach-exynos/lowlevel_init.c
2.3.8 arch/arm/mach-exynos/tzpc.c
2.3.9 board/samsung/tiny4412/Kconfig
2.3.10 board/samsung/tiny4412/MAINTAINERS
2.3.11 board/samsung/tiny4412/Makefile
2.3.12 board/samsung/tiny4412/tiny4412.c
2.3.13 board/samsung/tiny4412/tools/mktiny4412spl.c
2.3.14 configs/tiny4412_defconfig
2.3.15 include/configs/tiny4412.h
3 配置、编译、下载、测试
3.1 配置
3.2 编译
3.3 下载
3.4 SD卡启动测试
3.5 查看板子信息
3.6 查看SD卡信息
3.7 查看eMMC信息
3.8 eMMC启动
3.8.1 eMMC 配置
3.8.2 从SD卡读取U-Boot镜像,并烧录到eMMC BOOT1分区
3.8.3 eMMC启动测试
4 附录
4.1 交叉编译工具链
4.1 源码
4.2 已编译好的二进制镜像
4.3 SD卡烧录工具
4.3.1 使用方法
4.4 开发板原理图
0. 环境介绍
开发环境:Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-37-generic x86_64)
交叉编译工具链:xkwy-gcc-20200517.tar.xz
U-Boot版本:u-boot-2020.07
开发板底板:Tiny4412/Super4412SDK 1506
开发板核心板:Tiny4412 (1412)
CPU:Exynos 4412 (4 * Cortex-A9,1.4GHz)
DDR:2 * K4B4G1646D-BCK0 (2 * 4Gbit,1GB)
EMMC:SAMSUNG KLM8G2FEJA-A001 (8GB)
1. 成果/目标
- UART0作为调试串口(波特率921600bps);
- 支持DDR3(1GB,地址空间:0x40000000~0x7FFFFFFF)
- 支持外置SD卡读写,并支持由外置SD卡启动;
- 支持内置eMMC读写,并支持由内置eMMC启动。
2. 移植过程
2.1 下载U-Boot官方原版源码包
官方下载地址:ftp://ftp.denx.de/pub/u-boot/u-boot-2020.07.tar.bz2
xkwy2018.cn镜像地址:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07.tar.bz2
$ wget https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07.tar.bz2
--2020-07-25 10:16:44-- https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07.tar.bz2
Resolving xkwy2018.cn (xkwy2018.cn)... 64.64.240.120
Connecting to xkwy2018.cn (xkwy2018.cn)|64.64.240.120|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15338841 (15M) [application/x-bzip2]
Saving to: ‘u-boot-2020.07.tar.bz2’u-boot-2020.07.tar.bz2 100%[=========================================================>] 14.63M 7.10MB/s in 2.1s 2020-07-25 10:16:47 (7.10 MB/s) - ‘u-boot-2020.07.tar.bz2’ saved [15338841/15338841]
2.2 解压源码包,并进入源码目录
$ tar xf u-boot-2020.07.tar.bz2
$ cd u-boot-2020.07/
2.3 修改代码
完整的patch文件:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07-tiny4412.patch
2.3.0 懒人必备:所有patch一键打补丁
使用curl下载patch文件,然后用patch命令给官方原始u-boot-2020.07打补丁。
$ curl -s https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07-tiny4412.patch | patch -p1
patching file arch/arm/dts/Makefile
patching file arch/arm/dts/exynos4412-tiny4412.dts
patching file arch/arm/mach-exynos/Kconfig
patching file arch/arm/mach-exynos/clock_init_exynos4.c
patching file arch/arm/mach-exynos/dmc_init_exynos4.c
patching file arch/arm/mach-exynos/exynos4412_setup.h
patching file arch/arm/mach-exynos/lowlevel_init.c
patching file arch/arm/mach-exynos/tzpc.c
patching file board/samsung/tiny4412/Kconfig
patching file board/samsung/tiny4412/MAINTAINERS
patching file board/samsung/tiny4412/Makefile
patching file board/samsung/tiny4412/tiny4412.c
patching file board/samsung/tiny4412/tools/mktiny4412spl.c
patching file configs/tiny4412_defconfig
patching file include/configs/tiny4412.h
注:如果做了此步骤,2.3后面的章节可全部略过,直接跳到3 配置、编译、下载、测试。
2.3.1 arch/arm/dts/Makefile
在CONFIG_EXYNOS4下面添加tiny4412用的设备树dtb文件
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 89fa448818..107f933f05 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -11,6 +11,7 @@ dtb-$(CONFIG_EXYNOS4) += exynos4210-origen.dtb \exynos4210-smdkv310.dtb \exynos4210-universal_c210.dtb \exynos4210-trats.dtb \
+ exynos4412-tiny4412.dtb \exynos4412-trats2.dtb \exynos4412-odroid.dtb
2.3.2 arch/arm/dts/exynos4412-tiny4412.dts
新增设备树文件:exynos4412-tiny4412.dts
主要是配置调试串口位于UART0,mmc0映射为内置eMMC,mmc2映射为外部SD卡
diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny4412.dts
new file mode 100755
index 0000000000..8e36148f5c
--- /dev/null
+++ b/arch/arm/dts/exynos4412-tiny4412.dts
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * xkwy's Exynos4412 based Tiny4412 board device tree source
+ *
+ * Copyright (c) xkwy2018.cn
+ * http://xkwy2018.cn/tiny4412
+ */
+
+/dts-v1/;
+#include "exynos4412.dtsi"
+
+/ {
+ model = "xkwy Tiny4412 based on Exynos4412";
+ compatible = "xkwy,tiny4412", "samsung,exynos4412";
+
+ aliases {
+ console = &serial_0;
+
+ serial0 = &serial_0;
+ serial1 = &serail_1;
+ serial2 = &serial_2;
+ serial3 = &serial_3;
+ serial4 = &serial_4;
+
+ mmc0 = &mshc_0;
+ mmc2 = &sdhci2;
+ };
+};
+
+&serial_0 {
+ status = "okay";
+};
+
+&mshc_0 {
+ samsung,bus-width = <8>;
+ samsung,timing = <2 1 0>;
+ samsung,removable = <0>;
+ fifoth_val = <0x203f0040>;
+ bus_hz = <400000000>;
+ div = <0x3>;
+ index = <4>;
+ status = "okay";
+};
+
+&sdhci2 {
+ samsung,bus-width = <4>;
+ samsung,timing = <1 2 3>;
+ cd-gpios = <&gpk2 2 0>;
+ cd-inverted;
+ status = "okay";
+};
2.3.3 arch/arm/mach-exynos/Kconfig
配置Kconfig,增加TINY4412开发板
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 14347e7c7d..8cf46654c9 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -67,6 +67,10 @@ config TARGET_ORIGENbool "Exynos4412 Origen board"select SUPPORT_SPL+config TARGET_TINY4412
+ bool "Exynos4412 Tiny4412 board"
+ select SUPPORT_SPL
+config TARGET_TRATS2bool "Exynos4412 Trat2 board"@@ -161,6 +165,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"
2.3.4 arch/arm/mach-exynos/clock_init_exynos4.c
修改时钟配置,原来的时钟结构体struct exynos4_clock是Exynos 4210的,Exynos 4412的这一部分寄存器有变化,因此需要改成struct exynos4x12_clock;
再增加一个emmc启动的时钟配置函数emmc_boot_clk_div_set,SPL里面emmc启动时会调用这个函数,由于所有的时钟都已经预先配置好了,因此这个函数里面什么都不做。
diff --git a/arch/arm/mach-exynos/clock_init_exynos4.c b/arch/arm/mach-exynos/clock_init_exynos4.c
index 584e4bac09..7e12d742b0 100644
--- a/arch/arm/mach-exynos/clock_init_exynos4.c
+++ b/arch/arm/mach-exynos/clock_init_exynos4.c
@@ -30,7 +30,11 @@#include <asm/arch/clk.h>#include <asm/arch/clock.h>#include "common_setup.h"
+#if IS_ENABLED(CONFIG_TINY4412)
+#include "exynos4412_setup.h"
+#else#include "exynos4_setup.h"
+#endif/** system_clock_init: Initialize core clock and bus clock.
@@ -38,8 +42,13 @@*/void system_clock_init(void){
+#if IS_ENABLED(CONFIG_TINY4412)
+ struct exynos4x12_clock *clk =
+ (struct exynos4x12_clock *)samsung_get_base_clock();
+#elsestruct exynos4_clock *clk =(struct exynos4_clock *)samsung_get_base_clock();
+#endifwritel(CLK_SRC_CPU_VAL, &clk->src_cpu);@@ -55,7 +64,11 @@ void system_clock_init(void)writel(CLK_SRC_CAM_VAL, &clk->src_cam);writel(CLK_SRC_MFC_VAL, &clk->src_mfc);writel(CLK_SRC_G3D_VAL, &clk->src_g3d);
+ #if IS_ENABLED(CONFIG_TINY4412)
+ writel(CLK_SRC_LCD_VAL, &clk->src_lcd);
+ #elsewritel(CLK_SRC_LCD0_VAL, &clk->src_lcd0);
+ #endifsdelay(0x10000);@@ -73,7 +86,11 @@ void system_clock_init(void)writel(CLK_DIV_CAM_VAL, &clk->div_cam);writel(CLK_DIV_MFC_VAL, &clk->div_mfc);writel(CLK_DIV_G3D_VAL, &clk->div_g3d);
+ #if IS_ENABLED(CONFIG_TINY4412)
+ writel(CLK_DIV_LCD_VAL, &clk->div_lcd);
+ #elsewritel(CLK_DIV_LCD0_VAL, &clk->div_lcd0);
+ #endif/* Set PLL locktime */writel(PLL_LOCKTIME, &clk->apll_lock);
@@ -92,3 +109,8 @@ void system_clock_init(void)sdelay(0x30000);}
+
+__weak void emmc_boot_clk_div_set(void)
+{
+ ;
+}
2.3.5 arch/arm/mach-exynos/dmc_init_exynos4.c
内存初始化适配,启用交错,交错大小设置为2GB(相当于不交错)
Exynos4412支持两个DDR控制器,并且支持组成双通道,1412版本的核心板只有两颗16bit DDR3(构成一颗32bit DDR3连接到片选Xm1CSn0上),因此在Exynos4412看来实际上只接了一颗DDR3。
diff --git a/arch/arm/mach-exynos/dmc_init_exynos4.c b/arch/arm/mach-exynos/dmc_init_exynos4.c
index ecddc72684..7436eeb098 100644
--- a/arch/arm/mach-exynos/dmc_init_exynos4.c
+++ b/arch/arm/mach-exynos/dmc_init_exynos4.c
@@ -26,7 +26,11 @@#include <config.h>#include <asm/arch/dmc.h>#include "common_setup.h"
+#if IS_ENABLED(CONFIG_TINY4412)
+#include "exynos4412_setup.h"
+#else#include "exynos4_setup.h"
+#endifstruct mem_timings mem = {.direct_cmd_msr = {
@@ -123,6 +127,9 @@ static void dmc_init(struct exynos4_dmc *dmc)writel(mem.memconfig0, &dmc->memconfig0);writel(mem.memconfig1, &dmc->memconfig1);
+#if IS_ENABLED(CONFIG_TINY4412)
+ writel((1<<31)|0x1F, &dmc->ivcontrol);
+#endif/* Config Precharge Policy */writel(mem.prechconfig, &dmc->prechconfig);
2.3.6 arch/arm/mach-exynos/exynos4412_setup.h
新增头文件:arch/arm/mach-exynos/exynos4412_setup.h
主要是定义时钟配置,DDR3时序配置。
diff --git a/arch/arm/mach-exynos/exynos4412_setup.h b/arch/arm/mach-exynos/exynos4412_setup.h
new file mode 100644
index 0000000000..dd9218c2dc
--- /dev/null
+++ b/arch/arm/mach-exynos/exynos4412_setup.h
@@ -0,0 +1,652 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Machine Specific Values for EXYNOS4412 based board
+ *
+ * Copyright (C) 2020 FriendlyARM Electronics Co., Ltd.
+ */
+
+#ifndef _TINY4412_SETUP_H
+#define _TINY4412_SETUP_H
+
+#include <config.h>
+#include <asm/arch/cpu.h>
+
+#ifdef CONFIG_CLK_800_330_165
+#define DRAM_CLK_330
+#endif
+#ifdef CONFIG_CLK_1000_200_200
+#define DRAM_CLK_200
+#endif
+#ifdef CONFIG_CLK_1000_330_165
+#define DRAM_CLK_330
+#endif
+#ifdef CONFIG_CLK_1000_400_200
+#define DRAM_CLK_400
+#endif
+
+/* Bus Configuration Register Address */
+#define ASYNC_CONFIG 0x10010350
+
+/* CLK_SRC_CPU */
+#define MUX_MPLL_USER_SEL_C_FINPLL 0x0
+#define MUX_MPLL_USER_SEL_C_FOUTMPLL 0x1
+#define MUX_HPM_SEL_MOUTAPLL 0x0
+#define MUX_HPM_SEL_SCLKMPLL 0x1
+#define MUX_CORE_SEL_MOUTAPLL 0x0
+#define MUX_CORE_SEL_SCLKMPLL 0x1
+#define MUX_APLL_SEL_FILPLL 0x0
+#define MUX_APLL_SEL_MOUTMPLLFOUT 0x1
+#define CLK_SRC_CPU_VAL ((MUX_MPLL_USER_SEL_C_FOUTMPLL << 24) \
+ | (MUX_HPM_SEL_MOUTAPLL << 20) \
+ | (MUX_CORE_SEL_MOUTAPLL << 16)\
+ | (MUX_APLL_SEL_MOUTMPLLFOUT << 0))
+
+/* CLK_DIV_CPU0 */
+#define CORE2_RATIO 0x0
+#define APLL_RATIO 0x1
+#define PCLK_DBG_RATIO 0x1
+#define ATB_RATIO 0x6
+#define PERIPH_RATIO 0x0
+#define COREM1_RATIO 0x7
+#define COREM0_RATIO 0x3
+#define CORE_RATIO 0x0
+#define CLK_DIV_CPU0_VAL ((CORE2_RATIO << 28) \
+ | (APLL_RATIO << 24) \
+ | (PCLK_DBG_RATIO << 20) \
+ | (ATB_RATIO << 16) \
+ | (PERIPH_RATIO << 12) \
+ | (COREM1_RATIO << 8) \
+ | (COREM0_RATIO << 4) \
+ | (CORE_RATIO << 0))
+
+/* CLK_DIV_CPU1 */
+#define CORES_RATIO 0x5
+#define HPM_RATIO 0x0
+#define COPY_RATIO 0x6
+#define CLK_DIV_CPU1_VAL ((CORES_RATIO<<8) | (HPM_RATIO << 4) | (COPY_RATIO))
+
+/* CLK_SRC_DMC */
+#define MUX_G2D_ACP_SEL_MOUTG2D_ACP_0 0x0
+#define MUX_G2D_ACP_SEL_MOUTG2D_ACP_1 0x1
+#define MUX_G2D_ACP_1_SEL_SCLKEPLL 0x0
+#define MUX_G2D_ACP_1_SEL_SCLKVPLL 0x1
+#define MUX_G2D_ACP_0_SEL_SCLKMPLL 0x0
+#define MUX_G2D_ACP_0_SEL_SCLKAPLL 0x1
+#define MUX_PWI_SEL_XXTI 0x0
+#define MUX_PWI_SEL_XUSBXTI 0x1
+#define MUX_PWI_SEL_SCLK_HDMI24M 0x2
+#define MUX_PWI_SEL_SCLK_USBPHY0 0x3
+#define MUX_PWI_SEL_SCLK_USBPHY1 0x4
+#define MUX_PWI_SEL_SCLK_HDMIPHY 0x5
+#define MUX_PWI_SEL_SCLKMPLL 0x6
+#define MUX_PWI_SEL_SCLKEPLL 0x7
+#define MUX_PWI_SEL_SCLKVPLL 0x8
+#define MUX_MPLL_SEL_FINPLL 0x0
+#define MUX_MPLL_SEL_MOUTMPLLFOUT 0x1
+#define MUX_DPHY_SEL_SCLKMPLL 0x0
+#define MUX_DPHY_SEL_SCLKAPLL 0x1
+#define MUX_DMC_BUS_SEL_SCLKMPLL 0x0
+#define MUX_DMC_BUS_SEL_SCLKAPLL 0x1
+#define MUX_C2C_SEL_SCLKMPLL 0x0
+#define MUX_C2C_SEL_SCLKAPLL 0x1
+#define CLK_SRC_DMC_VAL ((MUX_G2D_ACP_SEL_MOUTG2D_ACP_0 << 28) \
+ | (MUX_G2D_ACP_1_SEL_SCLKEPLL << 24) \
+ | (MUX_G2D_ACP_0_SEL_SCLKMPLL << 20) \
+ | (MUX_PWI_SEL_XUSBXTI << 16) \
+ | (MUX_MPLL_SEL_MOUTMPLLFOUT << 12) \
+ | (MUX_DPHY_SEL_SCLKMPLL << 8) \
+ | (MUX_DMC_BUS_SEL_SCLKMPLL << 4) \
+ | (MUX_C2C_SEL_SCLKMPLL << 0))
+
+/* CLK_DIV_DMC0 */
+#define DMCP_RATIO 0x1
+#define DMCD_RATIO 0x1
+#define DMC_RATIO 0x1
+#define DPHY_RATIO 0x1
+#define ACP_PCLK_RATIO 0x1
+#define ACP_RATIO 0x3
+#define CLK_DIV_DMC0_VAL ((DMCP_RATIO << 20) \
+ | (DMCD_RATIO << 16) \
+ | (DMC_RATIO << 12) \
+ | (DPHY_RATIO << 8) \
+ | (ACP_PCLK_RATIO << 4) \
+ | (ACP_RATIO << 0))
+
+/* CLK_DIV_DMC1 */
+#define DPM_RATIO 0x1
+#define DVSEM_RATIO 0x1
+#define C2C_ACLK_RATIO 0x1
+#define PWI_RATIO 0x7
+#define C2C_RATIO 0x1
+#define G2D_ACP_RATIO 0x3
+#define CLK_DIV_DMC1_VAL ((DPM_RATIO << 24) \
+ | (DVSEM_RATIO << 16) \
+ | (C2C_ACLK_RATIO << 12) \
+ | (PWI_RATIO << 8) \
+ | (C2C_RATIO << 4) \
+ | (G2D_ACP_RATIO << 0))
+
+/* CLK_SRC_TOP0 */
+#define MUX_ONENAND_SEL_ACLK_133 0x0
+#define MUX_ONENAND_SEL_ACLK_160 0x1
+#define MUX_ACLK_133_SEL_SCLKMPLL 0x0
+#define MUX_ACLK_133_SEL_SCLKAPLL 0x1
+#define MUX_ACLK_160_SEL_SCLKMPLL 0x0
+#define MUX_ACLK_160_SEL_SCLKAPLL 0x1
+#define MUX_ACLK_100_SEL_SCLKMPLL 0x0
+#define MUX_ACLK_100_SEL_SCLKAPLL 0x1
+#define MUX_ACLK_200_SEL_SCLKMPLL 0x0
+#define MUX_ACLK_200_SEL_SCLKAPLL 0x1
+#define MUX_VPLL_SEL_FINPLL 0x0
+#define MUX_VPLL_SEL_FOUTVPLL 0x1
+#define MUX_EPLL_SEL_FINPLL 0x0
+#define MUX_EPLL_SEL_FOUTEPLL 0x1
+#define MUX_ONENAND_1_SEL_MOUTONENAND 0x0
+#define MUX_ONENAND_1_SEL_SCLKVPLL 0x1
+#define CLK_SRC_TOP0_VAL ((MUX_ONENAND_SEL_ACLK_133 << 28) \
+ | (MUX_ACLK_133_SEL_SCLKMPLL << 24) \
+ | (MUX_ACLK_160_SEL_SCLKMPLL << 20) \
+ | (MUX_ACLK_100_SEL_SCLKMPLL << 16) \
+ | (MUX_ACLK_200_SEL_SCLKMPLL << 12) \
+ | (MUX_VPLL_SEL_FOUTVPLL << 8) \
+ | (MUX_EPLL_SEL_FOUTEPLL << 4)\
+ | (MUX_ONENAND_1_SEL_MOUTONENAND << 0))
+
+/* CLK_SRC_TOP1 */
+#define MUX_ACLK_400_MCUISP_SUB_SEL_FINPLL 0x0
+#define MUX_ACLK_400_MCUISP_SUB_SEL_DIVOUT_ACLK_400_MCUISP 0x1
+#define MUX_ACLK_200_SUB_SEL_FINPLL 0x0
+#define MUX_ACLK_200_SUB_SEL_DIVOUT_ACLK_200 0x1
+#define MUX_ACLK_266_GPS_SUB_SEL_FINPLL 0x0
+#define MUX_ACLK_266_GPS_SUB_SEL_DIVOUT_ACLK_266_GPS 0x1
+#define MUX_MPLL_USER_SEL_T_FINPLL 0x0
+#define MUX_MPLL_USER_SEL_T_SCLKMPLL 0x1
+#define MUX_ACLK_400_MCUISP_SEL_SCLKMPLL_USER_T 0x0
+#define MUX_ACLK_400_MCUISP_SEL_SCLKAPLL 0x1
+#define MUX_ACLK_266_GPS_SEL_SCLKMPLL_USER_T 0x0
+#define MUX_ACLK_266_GPS_SEL_SCLKAPLL 0x0
+#define CLK_SRC_TOP1_VAL ((MUX_ACLK_400_MCUISP_SUB_SEL_DIVOUT_ACLK_400_MCUISP << 24) \
+ | (MUX_ACLK_200_SUB_SEL_DIVOUT_ACLK_200 << 20) \
+ | (MUX_ACLK_266_GPS_SUB_SEL_DIVOUT_ACLK_266_GPS << 16) \
+ | (MUX_MPLL_USER_SEL_T_SCLKMPLL << 12) \
+ | (MUX_ACLK_400_MCUISP_SEL_SCLKMPLL_USER_T << 8) \
+ | (MUX_ACLK_266_GPS_SEL_SCLKMPLL_USER_T << 4))
+
+/* CLK_DIV_TOP */
+#define ACLK_400_MCUISP_RATIO 0x0
+#define ACLK_266_GPS_RATIO 0x0
+#define ONENAND_RATIO 0x1
+#define ACLK_133_RATIO 0x5
+#define ACLK_160_RATIO 0x4
+#define ACLK_100_RATIO 0x7
+#define ACLK_200_RATIO 0x0
+#define CLK_DIV_TOP_VAL ((ACLK_400_MCUISP_RATIO << 24) \
+ | (ACLK_266_GPS_RATIO << 20) \
+ | (ONENAND_RATIO << 16) \
+ | (ACLK_133_RATIO << 12)\
+ | (ACLK_160_RATIO << 8) \
+ | (ACLK_100_RATIO << 4) \
+ | (ACLK_200_RATIO << 0))
+
+/* CLK_SRC_LEFTBUS */
+#define MUX_MPLL_USER_SEL_L_FINPLL 0x0
+#define MUX_MPLL_USER_SEL_L_FOUTMPLL 0x1
+#define MUX_GDL_SEL_SCLKMPLL 0x0
+#define MUX_GDL_SEL_SCLKAPLL 0x1
+#define CLK_SRC_LEFTBUS_VAL ((MUX_MPLL_USER_SEL_L_FOUTMPLL << 4) \
+ | (MUX_GDL_SEL_SCLKMPLL << 0))
+
+/* CLK_DIV_LEFTBUS */
+#define GPL_RATIO 0x1
+#define GDL_RATIO 0x3
+#define CLK_DIV_LEFTBUS_VAL ((GPL_RATIO << 4) | (GDL_RATIO))
+
+/* CLK_SRC_RIGHTBUS */
+#define MUX_MPLL_USER_SEL_R_FINPLL 0x0
+#define MUX_MPLL_USER_SEL_R_FOUTMPLL 0x1
+#define MUX_GDR_SEL_SCLKMPLL 0x0
+#define MUX_GDR_SEL_SCLKAPLL 0x1
+#define CLK_SRC_RIGHTBUS_VAL ((MUX_MPLL_USER_SEL_R_FOUTMPLL << 4) \
+ | (MUX_GDR_SEL_SCLKMPLL << 0))
+
+/* CLK_DIV_RIGHTBUS */
+#define GPR_RATIO 0x1
+#define GDR_RATIO 0x3
+#define CLK_DIV_RIGHTBUS_VAL ((GPR_RATIO << 4) | (GDR_RATIO))
+
+/* CLK_SRS_FSYS: 6 = SCLKMPLL */
+#define SATA_SEL_SCLKMPLL 0
+#define SATA_SEL_SCLKAPLL 1
+
+#define MMC_SEL_XXTI 0
+#define MMC_SEL_XUSBXTI 1
+#define MMC_SEL_SCLK_HDMI24M 2
+#define MMC_SEL_SCLK_USBPHY0 3
+#define MMC_SEL_SCLK_USBPHY1 4
+#define MMC_SEL_SCLK_HDMIPHY 5
+#define MMC_SEL_SCLKMPLL 6
+#define MMC_SEL_SCLKEPLL 7
+#define MMC_SEL_SCLKVPLL 8
+
+#define MMCC0_SEL MMC_SEL_SCLKMPLL
+#define MMCC1_SEL MMC_SEL_SCLKMPLL
+#define MMCC2_SEL MMC_SEL_SCLKMPLL
+#define MMCC3_SEL MMC_SEL_SCLKMPLL
+#define MMCC4_SEL MMC_SEL_SCLKMPLL
+#define CLK_SRC_FSYS_VAL ((SATA_SEL_SCLKMPLL << 24) \
+ | (MMCC4_SEL << 16) \
+ | (MMCC3_SEL << 12) \
+ | (MMCC2_SEL << 8) \
+ | (MMCC1_SEL << 4) \
+ | (MMCC0_SEL << 0))
+
+/* SCLK_MMC[0-4] = MOUTMMC[0-4]/(MMC[0-4]_RATIO + 1)/(MMC[0-4]_PRE_RATIO +1) */
+/* CLK_DIV_FSYS1 */
+#define MMC0_RATIO 0xF
+#define MMC0_PRE_RATIO 0x0
+#define MMC1_RATIO 0xF
+#define MMC1_PRE_RATIO 0x0
+#define CLK_DIV_FSYS1_VAL ((MMC1_PRE_RATIO << 24) \
+ | (MMC1_RATIO << 16) \
+ | (MMC0_PRE_RATIO << 8) \
+ | (MMC0_RATIO << 0))
+
+/* CLK_DIV_FSYS2 */
+#define MMC2_RATIO 0x7
+#define MMC2_PRE_RATIO 0x0
+#define MMC3_RATIO 0x7
+#define MMC3_PRE_RATIO 0x4
+#define CLK_DIV_FSYS2_VAL ((MMC3_PRE_RATIO << 24) \
+ | (MMC3_RATIO << 16) \
+ | (MMC2_PRE_RATIO << 8) \
+ | (MMC2_RATIO << 0))
+
+/* CLK_DIV_FSYS3 */
+#define MMC4_RATIO 0xF
+#define MMC4_PRE_RATIO 0x0
+#define CLK_DIV_FSYS3_VAL ((MMC4_PRE_RATIO << 8) \
+ | (MMC4_RATIO << 0))
+
+/* CLK_SRC_PERIL0 */
+#define UART_SEL_XXTI 0
+#define UART_SEL_XUSBXTI 1
+#define UART_SEL_SCLK_HDMI24M 2
+#define UART_SEL_SCLK_USBPHY0 3
+#define UART_SEL_SCLK_USBPHY1 4
+#define UART_SEL_SCLK_HDMIPHY 5
+#define UART_SEL_SCLKMPLL 6
+#define UART_SEL_SCLKEPLL 7
+#define UART_SEL_SCLKVPLL 8
+
+#define UART0_SEL UART_SEL_SCLKMPLL
+#define UART1_SEL UART_SEL_SCLKMPLL
+#define UART2_SEL UART_SEL_SCLKMPLL
+#define UART3_SEL UART_SEL_SCLKMPLL
+#define UART4_SEL UART_SEL_SCLKMPLL
+#define CLK_SRC_PERIL0_VAL ((UART4_SEL << 16) \
+ | (UART3_SEL << 12) \
+ | (UART2_SEL << 8) \
+ | (UART1_SEL << 4) \
+ | (UART0_SEL << 0))
+
+/* SCLK_UART[0-4] = MOUTUART[0-4]/(UART[0-4]_RATIO + 1) */
+/* CLK_DIV_PERIL0 */
+#define UART0_RATIO 7
+#define UART1_RATIO 7
+#define UART2_RATIO 7
+#define UART3_RATIO 7
+#define UART4_RATIO 7
+#define CLK_DIV_PERIL0_VAL ((UART4_RATIO << 16) \
+ | (UART3_RATIO << 12) \
+ | (UART2_RATIO << 8) \
+ | (UART1_RATIO << 4) \
+ | (UART0_RATIO << 0))
+
+/* Clock Source CAM/FIMC */
+/* CLK_SRC_CAM */
+#define CAM0_SEL_XUSBXTI 1
+#define CAM1_SEL_XUSBXTI 1
+#define CSIS0_SEL_XUSBXTI 1
+#define CSIS1_SEL_XUSBXTI 1
+
+#define FIMC_SEL_SCLKMPLL 6
+#define FIMC0_LCLK_SEL FIMC_SEL_SCLKMPLL
+#define FIMC1_LCLK_SEL FIMC_SEL_SCLKMPLL
+#define FIMC2_LCLK_SEL FIMC_SEL_SCLKMPLL
+#define FIMC3_LCLK_SEL FIMC_SEL_SCLKMPLL
+
+#define CLK_SRC_CAM_VAL ((CSIS1_SEL_XUSBXTI << 28) \
+ | (CSIS0_SEL_XUSBXTI << 24) \
+ | (CAM1_SEL_XUSBXTI << 20) \
+ | (CAM0_SEL_XUSBXTI << 16) \
+ | (FIMC3_LCLK_SEL << 12) \
+ | (FIMC2_LCLK_SEL << 8) \
+ | (FIMC1_LCLK_SEL << 4) \
+ | (FIMC0_LCLK_SEL << 0))
+
+/* SCLK CAM */
+/* CLK_DIV_CAM */
+#define FIMC0_LCLK_RATIO 4
+#define FIMC1_LCLK_RATIO 4
+#define FIMC2_LCLK_RATIO 4
+#define FIMC3_LCLK_RATIO 4
+#define CLK_DIV_CAM_VAL ((FIMC3_LCLK_RATIO << 12) \
+ | (FIMC2_LCLK_RATIO << 8) \
+ | (FIMC1_LCLK_RATIO << 4) \
+ | (FIMC0_LCLK_RATIO << 0))
+
+/* SCLK MFC */
+/* CLK_SRC_MFC */
+#define MFC_SEL_MPLL 0
+#define MOUTMFC_0 0
+#define MFC_SEL MOUTMFC_0
+#define MFC_0_SEL MFC_SEL_MPLL
+#define CLK_SRC_MFC_VAL ((MFC_SEL << 8) | (MFC_0_SEL))
+
+
+/* CLK_DIV_MFC */
+#define MFC_RATIO 3
+#define CLK_DIV_MFC_VAL (MFC_RATIO)
+
+/* SCLK G3D */
+/* CLK_SRC_G3D */
+#define G3D_SEL_MPLL 0
+#define MOUTG3D_0 0
+#define G3D_SEL MOUTG3D_0
+#define G3D_0_SEL G3D_SEL_MPLL
+#define CLK_SRC_G3D_VAL ((G3D_SEL << 8) | (G3D_0_SEL))
+
+/* CLK_DIV_G3D */
+#define G3D_RATIO 1
+#define CLK_DIV_G3D_VAL (G3D_RATIO)
+
+/* SCLK LCD */
+/* CLK_SRC_LCD */
+#define FIMD_SEL_SCLKMPLL 6
+#define MDNIE0_SEL_XUSBXTI 1
+#define MDNIE_PWM0_SEL_XUSBXTI 1
+#define MIPI0_SEL_XUSBXTI 1
+#define CLK_SRC_LCD_VAL ((MIPI0_SEL_XUSBXTI << 12) \
+ | (MDNIE_PWM0_SEL_XUSBXTI << 8) \
+ | (MDNIE0_SEL_XUSBXTI << 4) \
+ | (FIMD_SEL_SCLKMPLL << 0))
+
+/* CLK_DIV_LCD */
+#define MIPI0_PRE_RATIO 0xF
+#define MIPI0_RATIO 0xF
+#define MDNIE_PWM0_PRE_RATIO 0xF
+#define MDNIE_PWM0_RATIO 0xF
+#define MDNIE0_RATIO 0xF
+#define FIMD0_RATIO 0xF
+#define CLK_DIV_LCD_VAL ((MIPI0_PRE_RATIO << 20) \
+ | (MIPI0_RATIO << 16) \
+ | (MDNIE_PWM0_PRE_RATIO << 12) \
+ | (MDNIE_PWM0_RATIO << 8) \
+ | (MDNIE0_RATIO << 4) \
+ | (FIMD0_RATIO << 0))
+
+/* Required period to generate a stable clock output */
+/* PLL_LOCK_TIME */
+#define PLL_LOCKTIME 0x1C20
+
+/* PLL Values */
+#define DISABLE 0
+#define ENABLE 1
+#define SET_PLL(mdiv, pdiv, sdiv) ((ENABLE << 31)\
+ | (mdiv << 16) \
+ | (pdiv << 8) \
+ | (sdiv << 0))
+
+/* APLL_CON0 */
+#define APLL_MDIV 175
+#define APLL_PDIV 3
+#define APLL_SDIV 0
+#define APLL_CON0_VAL SET_PLL(APLL_MDIV, APLL_PDIV, APLL_SDIV)
+
+/* APLL_CON1 */
+#define APLL_RESV1 0x0
+#define APLL_RESV0 0x1
+#define APLL_BYPASS 0x0
+#define APLL_DCC_ENB 0x0
+#define APLL_AFC_ENB 0x0
+#define APLL_FEED_EN 0x0
+#define APLL_LOCK_CON_OUT 0x0
+#define APLL_LOCK_CON_IN 0x3
+#define APLL_LOCK_CON_DLY 0x8
+#define APLL_AFC 0x0
+#define APLL_CON1_VAL ((APLL_RESV1 << 24) \
+ | (APLL_RESV0 << 23) \
+ | (APLL_BYPASS << 22) \
+ | (APLL_DCC_ENB << 21) \
+ | (APLL_AFC_ENB << 20) \
+ | (APLL_FEED_EN << 16) \
+ | (APLL_LOCK_CON_OUT << 14) \
+ | (APLL_LOCK_CON_IN << 12) \
+ | (APLL_LOCK_CON_DLY << 8) \
+ | (APLL_AFC << 0))
+
+/* MPLL_CON0 */
+#define MPLL_MDIV 100
+#define MPLL_PDIV 3
+#define MPLL_SDIV 0
+#define MPLL_CON0_VAL SET_PLL(MPLL_MDIV, MPLL_PDIV, MPLL_SDIV)
+
+/* MPLL_CON1 */
+#define MPLL_RESV1 0x0
+#define MPLL_RESV0 0x1
+#define MPLL_BYPASS 0x0
+#define MPLL_DCC_ENB 0x0
+#define MPLL_AFC_ENB 0x0
+#define MPLL_FEED_EN 0x0
+#define MPLL_LOCK_CON_OUT 0x0
+#define MPLL_LOCK_CON_IN 0x3
+#define MPLL_LOCK_CON_DLY 0x8
+#define MPLL_AFC 0x0
+#define MPLL_CON1_VAL ((MPLL_RESV1 << 24) \
+ | (MPLL_RESV0 << 23) \
+ | (MPLL_BYPASS << 22) \
+ | (MPLL_DCC_ENB << 21) \
+ | (MPLL_AFC_ENB << 20) \
+ | (MPLL_FEED_EN << 16) \
+ | (MPLL_LOCK_CON_OUT << 14) \
+ | (MPLL_LOCK_CON_IN << 12) \
+ | (MPLL_LOCK_CON_DLY << 8) \
+ | (MPLL_AFC << 0))
+
+/* EPLL_CON0 */
+#define EPLL_MDIV 0x30
+#define EPLL_PDIV 0x3
+#define EPLL_SDIV 0x2
+#define EPLL_CON0_VAL SET_PLL(EPLL_MDIV, EPLL_PDIV, EPLL_SDIV)
+
+/* EPLL_CON1 */
+#define EPLL_K 0x0
+#define EPLL_CON1_VAL (EPLL_K >> 0)
+
+/* VPLL_CON0 */
+#define VPLL_MDIV 0x35
+#define VPLL_PDIV 0x3
+#define VPLL_SDIV 0x2
+#define VPLL_CON0_VAL SET_PLL(VPLL_MDIV, VPLL_PDIV, VPLL_SDIV)
+
+/* VPLL_CON1 */
+#define VPLL_SSCG_EN DISABLE
+#define VPLL_SEL_PF_DN_SPREAD 0x0
+#define VPLL_MRR 0x11
+#define VPLL_MFR 0x0
+#define VPLL_K 0x400
+#define VPLL_CON1_VAL ((VPLL_SSCG_EN << 31)\
+ | (VPLL_SEL_PF_DN_SPREAD << 29) \
+ | (VPLL_MRR << 24) \
+ | (VPLL_MFR << 16) \
+ | (VPLL_K << 0))
+
+/* DMC */
+#define DIRECT_CMD_NOP 0x07000000
+#define DIRECT_CMD_ZQ 0x0a000000
+#define DIRECT_CMD_CHIP1_SHIFT (1 << 20)
+#define MEM_TIMINGS_MSR_COUNT 4
+#define CTRL_START (1 << 0)
+#define CTRL_DLL_ON (1 << 1)
+#define AREF_EN (1 << 5)
+#define DRV_TYPE (1 << 6)
+
+struct mem_timings {
+ unsigned direct_cmd_msr[MEM_TIMINGS_MSR_COUNT];
+ unsigned timingref;
+ unsigned timingrow;
+ unsigned timingdata;
+ unsigned timingpower;
+ unsigned zqcontrol;
+ unsigned control0;
+ unsigned control1;
+ unsigned control2;
+ unsigned concontrol;
+ unsigned prechconfig;
+ unsigned memcontrol;
+ unsigned memconfig0;
+ unsigned memconfig1;
+ unsigned dll_resync;
+ unsigned dll_on;
+};
+
+/* MIU */
+/* MIU Config Register Offsets*/
+#define APB_SFR_INTERLEAVE_CONF_OFFSET 0x400
+#define APB_SFR_ARBRITATION_CONF_OFFSET 0xC00
+#define ABP_SFR_SLV_ADDRMAP_CONF_OFFSET 0x800
+#define ABP_SFR_INTERLEAVE_ADDRMAP_START_OFFSET 0x808
+#define ABP_SFR_INTERLEAVE_ADDRMAP_END_OFFSET 0x810
+#define ABP_SFR_SLV0_SINGLE_ADDRMAP_START_OFFSET 0x818
+#define ABP_SFR_SLV0_SINGLE_ADDRMAP_END_OFFSET 0x820
+#define ABP_SFR_SLV1_SINGLE_ADDRMAP_START_OFFSET 0x828
+#define ABP_SFR_SLV1_SINGLE_ADDRMAP_END_OFFSET 0x830
+
+#ifdef CONFIG_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
+
+#ifdef CONFIG_MIU_1BIT_INTERLEAVED
+/* Interleave_bit0: 0xC*/
+#define APB_SFR_INTERLEAVE_CONF_VAL 0x0000000c
+#endif
+#ifdef CONFIG_MIU_2BIT_INTERLEAVED
+/* Interleave: 2Bit, Interleave_bit1: 0x15, Interleave_bit0: 0xc */
+#define APB_SFR_INTERLEAVE_CONF_VAL 0x2000150c
+#endif
+#define SLAVE0_SINGLE_ADDR_MAP_START_ADDR 0x40000000
+#define SLAVE0_SINGLE_ADDR_MAP_END_ADDR 0x7fffffff
+#define SLAVE1_SINGLE_ADDR_MAP_START_ADDR 0x80000000
+#define SLAVE1_SINGLE_ADDR_MAP_END_ADDR 0xbfffffff
+/* Enable SME0 and SME1*/
+#define APB_SFR_SLV_ADDR_MAP_CONF_VAL 0x00000006
+
+#define FORCE_DLL_RESYNC 3
+#define DLL_CONTROL_ON 1
+
+#define DIRECT_CMD1 0x00020000
+#define DIRECT_CMD2 0x00030000
+#define DIRECT_CMD3 0x00010002
+#define DIRECT_CMD4 0x00000328
+
+#define CTRL_ZQ_MODE_NOTERM (0x1 << 0)
+#define CTRL_ZQ_START (0x1 << 1)
+#define CTRL_ZQ_FORCE (0x0 << 2)
+#define CTRL_ZQ_DIV (0 << 4)
+#define CTRL_ZQ_MODE_DDS (0x4 << 8)
+#define CTRL_ZQ_MODE_TERM (0x1 << 11)
+#define CTRL_ZQ_FORCE_IMPN (0x5 << 14)
+#define CTRL_ZQ_FORCE_IMPP (0x2 << 17)
+#define CTRL_DCC (0xE38 << 20)
+#define ZQ_CONTROL_VAL (CTRL_ZQ_MODE_NOTERM | CTRL_ZQ_START | CTRL_ZQ_FORCE\
+ | CTRL_ZQ_DIV | CTRL_ZQ_MODE_DDS\
+ | CTRL_ZQ_MODE_TERM | CTRL_ZQ_FORCE_IMPN\
+ | CTRL_ZQ_FORCE_IMPP | CTRL_DCC)
+
+#define ASYNC (0 << 0)
+#define CLK_RATIO (1 << 1)
+#define DIV_PIPE (1 << 3)
+#define AWR_ON (1 << 4)
+#define AREF_DISABLE (0 << 5)
+#define DRV_TYPE_DISABLE (0 << 6)
+#define CHIP0_NOT_EMPTY (0 << 8)
+#define CHIP1_NOT_EMPTY (0 << 9)
+#define DQ_SWAP_DISABLE (0 << 10)
+#define QOS_FAST_DISABLE (0 << 11)
+#define RD_FETCH (0x3 << 12)
+#define TIMEOUT_LEVEL0 (0xFFF << 16)
+#define CONCONTROL_VAL (ASYNC | CLK_RATIO | DIV_PIPE | AWR_ON\
+ | AREF_DISABLE | DRV_TYPE_DISABLE\
+ | CHIP0_NOT_EMPTY | CHIP1_NOT_EMPTY\
+ | DQ_SWAP_DISABLE | QOS_FAST_DISABLE\
+ | RD_FETCH | TIMEOUT_LEVEL0)
+
+#define CLK_STOP_DISABLE (0 << 1)
+#define DPWRDN_DISABLE (0 << 2)
+#define DPWRDN_TYPE (0 << 3)
+#define TP_DISABLE (0 << 4)
+#define DSREF_DIABLE (0 << 5)
+#define ADD_LAT_PALL (1 << 6)
+#define MEM_TYPE_DDR3 (0x6 << 8)
+#define MEM_WIDTH_32 (0x2 << 12)
+#define NUM_CHIP_2 (0 << 16)
+#define BL_8 (0x3 << 20)
+#define MEMCONTROL_VAL (CLK_STOP_DISABLE | DPWRDN_DISABLE\
+ | DPWRDN_TYPE | TP_DISABLE | DSREF_DIABLE\
+ | ADD_LAT_PALL | MEM_TYPE_DDR3 | MEM_WIDTH_32\
+ | NUM_CHIP_2 | BL_8)
+
+
+#define CHIP_BANK_8 (0x3 << 0)
+#define CHIP_ROW_14 (0x3 << 4)
+#define CHIP_COL_10 (0x3 << 8)
+#define CHIP_MAP_INTERLEAVED (1 << 12)
+#define CHIP_MASK (0xC0 << 16)
+#ifdef CONFIG_MIU_LINEAR
+#define CHIP0_BASE (0x40 << 24)
+#define CHIP1_BASE (0x60 << 24)
+#else
+#define CHIP0_BASE (0x40 << 24)
+#define CHIP1_BASE (0x80 << 24)
+#endif
+#define MEMCONFIG0_VAL (CHIP_BANK_8 | CHIP_ROW_14 | CHIP_COL_10\
+ | CHIP_MAP_INTERLEAVED | CHIP_MASK | CHIP0_BASE)
+#define MEMCONFIG1_VAL (CHIP_BANK_8 | CHIP_ROW_14 | CHIP_COL_10\
+ | CHIP_MAP_INTERLEAVED | CHIP_MASK | CHIP1_BASE)
+
+#define TP_CNT (0xff << 24)
+#define PRECHCONFIG TP_CNT
+
+#define CTRL_OFF (0 << 0)
+#define CTRL_DLL_OFF (0 << 1)
+#define CTRL_HALF (0 << 2)
+#define CTRL_DFDQS (1 << 3)
+#define DQS_DELAY (0 << 4)
+#define CTRL_START_POINT (0x10 << 8)
+#define CTRL_INC (0x10 << 16)
+#define CTRL_FORCE (0x71 << 24)
+#define CONTROL0_VAL (CTRL_OFF | CTRL_DLL_OFF | CTRL_HALF\
+ | CTRL_DFDQS | DQS_DELAY | CTRL_START_POINT\
+ | CTRL_INC | CTRL_FORCE)
+
+#define CTRL_SHIFTC (0x6 << 0)
+#define CTRL_REF (8 << 4)
+#define CTRL_SHGATE (1 << 29)
+#define TERM_READ_EN (1 << 30)
+#define TERM_WRITE_EN (1 << 31)
+#define CONTROL1_VAL (CTRL_SHIFTC | CTRL_REF | CTRL_SHGATE\
+ | TERM_READ_EN | TERM_WRITE_EN)
+
+#define CONTROL2_VAL 0x00000000
+
+#define TIMINGREF_VAL 0x000000BB
+#define TIMINGROW_VAL 0x7a46654f
+#define TIMINGDATA_VAL 0x46400506
+#define TIMINGPOWER_VAL 0x52000A3C
+#endif
2.3.7 arch/arm/mach-exynos/lowlevel_init.c
修改DEBUG_UART引脚复用配置,由UART3改为UART0。
此处的串口仅仅是早期调试串口,启动时会打印“<debug_uart>”,真正的U-Boot命令行终端使用的串口由设备树定义,位于/aliases/节点的console属性。
diff --git a/arch/arm/mach-exynos/lowlevel_init.c b/arch/arm/mach-exynos/lowlevel_init.c
index 97d6ca8fc2..29682d5135 100644
--- a/arch/arm/mach-exynos/lowlevel_init.c
+++ b/arch/arm/mach-exynos/lowlevel_init.c
@@ -220,7 +220,11 @@ int do_lowlevel_init(void)#ifdef CONFIG_DEBUG_UART#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL_SUPPORT)) || \!defined(CONFIG_SPL_BUILD)
+ #if IS_ENABLED(CONFIG_TINY4412)
+ exynos_pinmux_config(PERIPH_ID_UART0, PINMUX_FLAG_NONE);
+ #elseexynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
+ #endifdebug_uart_init();#endif#endif
2.3.8 arch/arm/mach-exynos/tzpc.c
修改TrustZone配置。
diff --git a/arch/arm/mach-exynos/tzpc.c b/arch/arm/mach-exynos/tzpc.c
index abe8e7f458..3134a27f98 100644
--- a/arch/arm/mach-exynos/tzpc.c
+++ b/arch/arm/mach-exynos/tzpc.c
@@ -34,7 +34,11 @@ void tzpc_init(void)if (cpu_is_exynos5() && (addr == end))break;+ #if IS_ENABLED(CONFIG_TINY4412)
+ writel(0xBF, &tzpc->decprot2set);
+ #elsewritel(DECPROTXSET, &tzpc->decprot2set);
+ #endifwritel(DECPROTXSET, &tzpc->decprot3set);}}
2.3.9 board/samsung/tiny4412/Kconfig
在board/samsung目录下新建tiny4412板子的文件夹。
添加板子相关配置项定义。
diff --git a/board/samsung/tiny4412/Kconfig b/board/samsung/tiny4412/Kconfig
new file mode 100644
index 0000000000..044c4f84ec
--- /dev/null
+++ b/board/samsung/tiny4412/Kconfig
@@ -0,0 +1,16 @@
+if TARGET_TINY4412
+
+config TINY4412
+ bool
+ default y
+
+config SYS_BOARD
+ default "tiny4412"
+
+config SYS_VENDOR
+ default "samsung"
+
+config SYS_CONFIG_NAME
+ default "tiny4412"
+
+endif
2.3.10 board/samsung/tiny4412/MAINTAINERS
在board/samsung目录下新建tiny4412板子的文件夹。
添加维护者相关信息。
diff --git a/board/samsung/tiny4412/MAINTAINERS b/board/samsung/tiny4412/MAINTAINERS
new file mode 100644
index 0000000000..e68fdff08a
--- /dev/null
+++ b/board/samsung/tiny4412/MAINTAINERS
@@ -0,0 +1,6 @@
+TINY4412 BOARD
+M: xkwy.xkwy <xkwy001@gmail.com>
+S: Maintained
+F: board/samsung/tiny4412/
+F: include/configs/tiny4412.h
+F: configs/tiny4412_defconfig
2.3.11 board/samsung/tiny4412/Makefile
在board/samsung目录下新建tiny4412板子的文件夹。
添加编译脚本,主要加入编译板级实现的接口tiny4412.c,以及编译制作tiny4412-spl.bin的工具。
diff --git a/board/samsung/tiny4412/Makefile b/board/samsung/tiny4412/Makefile
new file mode 100644
index 0000000000..07170d7803
--- /dev/null
+++ b/board/samsung/tiny4412/Makefile
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2020 xkwy2018.cn
+
+ifdef CONFIG_SPL_BUILD
+# necessary to create built-in.o
+obj- := __dummy__.o
+
+hostprogs-y := tools/mktiny4412spl
+always := $(hostprogs-y)
+else
+obj-y += tiny4412.o
+endif
2.3.12 board/samsung/tiny4412/tiny4412.c
在board/samsung目录下新建tiny4412板子的文件夹。
添加板级接口,如获取、设置板子类型,exynos_init等。
diff --git a/board/samsung/tiny4412/tiny4412.c b/board/samsung/tiny4412/tiny4412.c
new file mode 100644
index 0000000000..2e2bec9ce8
--- /dev/null
+++ b/board/samsung/tiny4412/tiny4412.c
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 xkwy2018.cn
+ */
+
+#include <common.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_BOARD_TYPES
+void set_board_type(void)
+{
+ gd->board_type = 0x1506;
+}
+
+void set_board_revision(void)
+{
+ /*
+ * Revision already set by set_board_type() because it can be
+ * executed early.
+ */
+}
+
+const char *get_board_type(void)
+{
+ return "1506";
+}
+#endif
+
+u32 get_board_rev(void)
+{
+ return 0;
+}
+
+int exynos_init(void)
+{
+ return 0;
+}
2.3.13 board/samsung/tiny4412/tools/mktiny4412spl.c
在board/samsung/tiny4412目录下新建tools文件夹。
添加制作tiny4412-spl.bin的工具。
原始编译出来的spl/u-boot-spl.bin直接烧录到SD卡或eMMC中无法运行,需要使用这个工具加个文件头和校验才行。
本工具将u-boot-spl.bin截断或补齐14KB并计算校验和作为bl2,然后在它前面放8KB的bl1程序(E4412_N.bl1.bin)。
diff --git a/board/samsung/tiny4412/tools/mktiny4412spl.c b/board/samsung/tiny4412/tools/mktiny4412spl.c
new file mode 100644
index 0000000000..d7e4913f63
--- /dev/null
+++ b/board/samsung/tiny4412/tools/mktiny4412spl.c
@@ -0,0 +1,446 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+
+#define BL2_OFFSET (8*1024)
+#define BL2_SIZE (14*1024)
+
+/*
+ * Requirement:
+ * IROM code reads first 14K bytes from boot device.
+ * It then calculates the checksum of 14K-4 bytes and compare with data at
+ * 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 14K buffer.
+ * It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
+ * It writes the buffer to "$(BOARD)-spl.bin" file.
+ */
+
+static unsigned char buf[BL2_OFFSET+BL2_SIZE] = { /* E4412_N.bl1.bin */
+ 0xA3,0x69,0xD3,0x18,0xE9,0x7D,0xB9,0x66,0xD1,0x6B,0xD5,0x6E,0xD4,0x79,0xA6,0x79,
+ 0x07,0x00,0x00,0xEA,0xFE,0xFF,0xFF,0xEA,0xFE,0xFF,0xFF,0xEA,0xFE,0xFF,0xFF,0xEA,
+ 0xFE,0xFF,0xFF,0xEA,0xFE,0xFF,0xFF,0xEA,0xFE,0xFF,0xFF,0xEA,0xFE,0xFF,0xFF,0xEA,
+ 0xFE,0xFF,0xFF,0xEA,0xDC,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,0x02,0x11,0xA0,0xE3,
+ 0x01,0x00,0x10,0xE1,0x24,0x00,0x00,0x0A,0xCC,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,
+ 0x01,0x00,0x10,0xE3,0x20,0x00,0x00,0x0A,0xC0,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,
+ 0x03,0x00,0x00,0xE2,0x03,0x00,0x30,0xE3,0x04,0x00,0x00,0x0A,0xB0,0x00,0x9F,0xE5,
+ 0x00,0x00,0x90,0xE5,0x01,0x00,0x10,0xE3,0x00,0x00,0x00,0x0A,0x16,0x00,0x00,0xEA,
+ 0xA0,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,0x03,0x00,0x00,0xE2,0x03,0x00,0x30,0xE3,
+ 0x04,0x00,0x00,0x0A,0x90,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,0x01,0x00,0x10,0xE3,
+ 0x00,0x00,0x00,0x0A,0x0C,0x00,0x00,0xEA,0x80,0x20,0x9F,0xE5,0x00,0x40,0x92,0xE5,
+ 0x7C,0x20,0x9F,0xE5,0x00,0x50,0x92,0xE5,0x78,0x60,0x9F,0xE5,0x06,0x00,0x54,0xE1,
+ 0x05,0xF0,0xA0,0x01,0x70,0x00,0x9F,0xE5,0x00,0x00,0x90,0xE5,0x07,0x00,0x00,0xE2,
+ 0x07,0x00,0x30,0xE3,0x00,0x00,0x00,0x1A,0xC8,0x07,0x00,0xEA,0x5C,0x00,0x9F,0xE5,
+ 0x5C,0x10,0x9F,0xE5,0x5C,0x30,0x9F,0xE5,0x01,0x00,0x50,0xE1,0x03,0x00,0x00,0x0A,
+ 0x03,0x00,0x51,0xE1,0x04,0x20,0x90,0x34,0x04,0x20,0x81,0x34,0xFB,0xFF,0xFF,0x3A,
+ 0x44,0x10,0x9F,0xE5,0x00,0x20,0xA0,0xE3,0x01,0x00,0x53,0xE1,0x04,0x20,0x83,0x34,
+ 0xFC,0xFF,0xFF,0x3A,0x2B,0x00,0x00,0xEA,0x00,0x06,0x02,0x10,0xC0,0x12,0x02,0x10,
+ 0x88,0x11,0x02,0x10,0x84,0x11,0x02,0x10,0x98,0x11,0x02,0x10,0x94,0x11,0x02,0x10,
+ 0x20,0x00,0x02,0x02,0x24,0x00,0x02,0x02,0x10,0x0D,0xBA,0xFC,0x98,0x13,0x02,0x10,
+ 0xA4,0x2A,0x02,0x02,0xA4,0x2A,0x02,0x02,0xA4,0x2A,0x02,0x02,0xA4,0x2A,0x02,0x02,
+ 0x01,0x12,0xA0,0xE3,0x0C,0x00,0x91,0xE5,0x00,0x00,0x50,0xE3,0x02,0x00,0x00,0x1A,
+ 0x00,0x10,0xA0,0xE3,0x04,0x21,0x9F,0xE5,0x08,0x10,0x82,0xE5,0x1E,0xFF,0x2F,0xE1,
+ 0xFC,0x00,0x9F,0xE5,0x00,0x07,0x90,0xE5,0x02,0x07,0x80,0xE3,0x02,0x0B,0x80,0xE3,
+ 0xEC,0x10,0x9F,0xE5,0x00,0x07,0x81,0xE5,0x01,0x00,0xA0,0xE1,0x04,0x07,0x90,0xE5,
+ 0x02,0x04,0x80,0xE3,0x40,0x00,0x80,0xE3,0x04,0x07,0x81,0xE5,0x01,0x00,0xA0,0xE1,
+ 0x00,0x09,0x90,0xE5,0x02,0x04,0x80,0xE3,0x80,0x00,0x80,0xE3,0x00,0x09,0x81,0xE5,
+ 0x07,0x09,0x01,0xE3,0x19,0x17,0x81,0xE2,0x08,0x00,0x81,0xE5,0x42,0x18,0x81,0xE2,
+ 0x08,0x00,0x81,0xE5,0x1E,0xFF,0x2F,0xE1,0x70,0x40,0x2D,0xE9,0xDF,0xFF,0xFF,0xEB,
+ 0xE6,0xFF,0xFF,0xEB,0x2B,0x00,0x00,0xEB,0x70,0x40,0xFF,0xE6,0x2E,0x00,0x00,0xEB,
+ 0xFF,0x50,0x00,0xE2,0x9D,0x01,0x00,0xEB,0x00,0x60,0xA0,0xE1,0x04,0x00,0xA0,0xE1,
+ 0xDA,0x00,0x00,0xEB,0x00,0x00,0x55,0xE3,0x0A,0x00,0x00,0x1A,0x30,0x00,0x00,0xEB,
+ 0x00,0x00,0x50,0xE3,0x04,0x00,0x00,0x1A,0x68,0x00,0x9F,0xE5,0x68,0x10,0x9F,0xE5,
+ 0x80,0x09,0x81,0xE5,0x00,0xF0,0x20,0xE3,0xFE,0xFF,0xFF,0xEA,0x5C,0x00,0x9F,0xE5,
+ 0x30,0xFF,0x2F,0xE1,0x0F,0x00,0x00,0xEA,0x00,0x00,0x56,0xE3,0x02,0x00,0x00,0x0A,
+ 0x48,0x00,0x9F,0xE5,0x30,0xFF,0x2F,0xE1,0x0A,0x00,0x00,0xEA,0x5E,0x01,0x00,0xEB,
+ 0x01,0x00,0x50,0xE3,0x02,0x00,0x00,0x1A,0x30,0x00,0x9F,0xE5,0x30,0xFF,0x2F,0xE1,
+ 0x04,0x00,0x00,0xEA,0x28,0x00,0x9F,0xE5,0x1C,0x10,0x9F,0xE5,0x80,0x09,0x81,0xE5,
+ 0x00,0xF0,0x20,0xE3,0xFE,0xFF,0xFF,0xEA,0x00,0x00,0xA0,0xE3,0x70,0x80,0xBD,0xE8,
+ 0x00,0x00,0x9D,0x13,0x00,0x00,0x04,0x10,0x60,0x00,0xAD,0xDE,0x00,0x00,0x02,0x10,
+ 0x00,0x34,0x02,0x02,0x61,0x00,0xAD,0xDE,0xAC,0x00,0x9F,0xE5,0x80,0x09,0x90,0xE5,
+ 0x70,0x10,0xFF,0xE6,0x01,0x00,0xA0,0xE1,0x1E,0xFF,0x2F,0xE1,0x98,0x00,0x9F,0xE5,
+ 0x80,0x19,0x90,0xE5,0x01,0x08,0x11,0xE3,0x01,0x00,0x00,0x0A,0x01,0x00,0xA0,0xE3,
+ 0x1E,0xFF,0x2F,0xE1,0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x00,0xF0,0x20,0xE3,
+ 0xFE,0xFF,0xFF,0xEA,0x30,0x40,0x2D,0xE9,0x00,0x30,0xA0,0xE3,0x6C,0x00,0x9F,0xE5,
+ 0xFC,0x4B,0x90,0xE5,0x00,0x20,0xA0,0xE3,0x0E,0x00,0x00,0xEA,0x60,0x00,0x9F,0xE5,
+ 0x02,0x01,0x80,0xE0,0x00,0x14,0x90,0xE5,0x00,0x00,0x51,0xE3,0x00,0x00,0x00,0x1A,
+ 0x07,0x00,0x00,0xEA,0x51,0x58,0xE7,0xE7,0x21,0x0C,0x85,0xE0,0x51,0x54,0xE7,0xE7,
+ 0x05,0x00,0x80,0xE0,0xFF,0x50,0x01,0xE2,0x05,0x00,0x80,0xE0,0x00,0x30,0x83,0xE0,
+ 0x00,0xF0,0x20,0xE3,0x01,0x20,0x82,0xE2,0xFF,0x0D,0x00,0xE3,0x00,0x00,0x52,0xE1,
+ 0xED,0xFF,0xFF,0x3A,0x03,0x00,0x54,0xE1,0x01,0x00,0x00,0x0A,0x00,0x00,0xA0,0xE3,
+ 0x30,0x80,0xBD,0xE8,0x01,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x00,0x00,0x02,0x10,
+ 0x00,0x60,0x02,0x02,0x00,0x30,0x02,0x02,0x10,0x40,0x2D,0xE9,0x20,0x40,0xA0,0xE3,
+ 0x60,0x04,0x9F,0xE5,0x0D,0x1B,0x80,0xE2,0x3C,0x20,0x90,0xE5,0x04,0x00,0xA0,0xE1,
+ 0x32,0xFF,0x2F,0xE1,0x01,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,
+ 0x10,0x80,0xBD,0xE8,0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x10,0x40,0x2D,0xE9,
+ 0x20,0x40,0xA0,0xE3,0x2C,0x04,0x9F,0xE5,0x0D,0x1B,0x80,0xE2,0x44,0x20,0x90,0xE5,
+ 0x04,0x00,0xA0,0xE1,0x32,0xFF,0x2F,0xE1,0x01,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,
+ 0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,
+ 0x10,0x40,0x2D,0xE9,0xFC,0x13,0x9F,0xE5,0x6C,0x00,0x91,0xE5,0x30,0xFF,0x2F,0xE1,
+ 0x10,0x80,0xBD,0xE8,0x70,0x40,0x2D,0xE9,0x20,0x40,0xA0,0xE3,0xF7,0xFF,0xFF,0xEB,
+ 0x01,0x10,0xA0,0xE3,0xA0,0x54,0x81,0xE0,0xD8,0x03,0x9F,0xE5,0x0D,0x2B,0x80,0xE2,
+ 0x04,0x10,0xA0,0xE1,0x30,0x30,0x90,0xE5,0x05,0x00,0xA0,0xE1,0x33,0xFF,0x2F,0xE1,
+ 0x01,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,0x70,0x80,0xBD,0xE8,
+ 0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x10,0x40,0x2D,0xE9,0xE7,0xFF,0xFF,0xEB,
+ 0x00,0x40,0xA0,0xE1,0x9C,0x03,0x9F,0xE5,0x0D,0x2B,0x80,0xE2,0x01,0x19,0xA0,0xE3,
+ 0x58,0x30,0x90,0xE5,0x04,0x00,0xA0,0xE1,0x33,0xFF,0x2F,0xE1,0x00,0x00,0x50,0xE3,
+ 0x01,0x00,0x00,0x0A,0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,0x00,0x00,0xA0,0xE3,
+ 0xFC,0xFF,0xFF,0xEA,0x10,0x40,0x2D,0xE9,0x68,0x13,0x9F,0xE5,0x70,0x00,0x91,0xE5,
+ 0x30,0xFF,0x2F,0xE1,0x10,0x80,0xBD,0xE8,0x10,0x40,0x2D,0xE9,0x54,0x03,0x9F,0xE5,
+ 0x01,0x19,0xA0,0xE3,0x60,0x20,0x90,0xE5,0x0D,0x0B,0x80,0xE2,0x32,0xFF,0x2F,0xE1,
+ 0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,0x10,0x40,0x2D,0xE9,0xCB,0xFF,0xFF,0xEB,
+ 0x00,0x40,0xA0,0xE1,0x2C,0x03,0x9F,0xE5,0x0D,0x2B,0x80,0xE2,0x01,0x19,0xA0,0xE3,
+ 0x64,0x30,0x90,0xE5,0x04,0x00,0xA0,0xE1,0x33,0xFF,0x2F,0xE1,0x00,0x00,0x50,0xE3,
+ 0x08,0x00,0x00,0x0A,0x0C,0x13,0x9F,0xE5,0x68,0x00,0x91,0xE5,0x30,0xFF,0x2F,0xE1,
+ 0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x0A,0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,
+ 0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x00,0x00,0xA0,0xE3,0xFA,0xFF,0xFF,0xEA,
+ 0xF8,0x43,0x2D,0xE9,0x00,0x40,0xA0,0xE3,0x00,0x00,0xA0,0xE3,0x00,0x00,0x8D,0xE5,
+ 0x00,0x50,0xA0,0xE3,0xB1,0xFF,0xFF,0xEB,0x00,0x80,0xA0,0xE1,0x01,0x69,0xA0,0xE3,
+ 0xC0,0x02,0x9F,0xE5,0x50,0x10,0x90,0xE5,0x0D,0x00,0xA0,0xE1,0x31,0xFF,0x2F,0xE1,
+ 0x06,0x00,0xA0,0xE1,0x00,0x10,0x9D,0xE5,0x5E,0x04,0x00,0xEB,0x00,0x50,0xA0,0xE1,
+ 0x08,0x00,0xA0,0xE1,0x00,0x10,0x9D,0xE5,0x5A,0x04,0x00,0xEB,0x00,0x70,0xA0,0xE1,
+ 0x00,0xF0,0x20,0xE3,0x09,0x00,0x00,0xEA,0x07,0x20,0x84,0xE0,0x00,0x10,0x9D,0xE5,
+ 0x91,0x04,0x01,0xE0,0x02,0x04,0x81,0xE2,0x8D,0x0B,0x80,0xE2,0x74,0x12,0x9F,0xE5,
+ 0x4C,0x30,0x91,0xE5,0x00,0x10,0xA0,0xE3,0x33,0xFF,0x2F,0xE1,0x01,0x40,0x84,0xE2,
+ 0x05,0x00,0x54,0xE1,0xF3,0xFF,0xFF,0x3A,0x01,0x00,0xA0,0xE3,0xF8,0x83,0xBD,0xE8,
+ 0x10,0x40,0x2D,0xE9,0x00,0x40,0xA0,0xE1,0x12,0x00,0x54,0xE3,0x42,0x00,0x00,0x0A,
+ 0x14,0x00,0x00,0xCA,0x12,0x00,0x54,0xE3,0x04,0xF1,0x8F,0x30,0x87,0x00,0x00,0xEA,
+ 0x43,0x00,0x00,0xEA,0x38,0x00,0x00,0xEA,0x2E,0x00,0x00,0xEA,0x38,0x00,0x00,0xEA,
+ 0x41,0x00,0x00,0xEA,0x4C,0x00,0x00,0xEA,0x40,0x00,0x00,0xEA,0x2B,0x00,0x00,0xEA,
+ 0x57,0x00,0x00,0xEA,0x5D,0x00,0x00,0xEA,0x4E,0x00,0x00,0xEA,0x68,0x00,0x00,0xEA,
+ 0x7A,0x00,0x00,0xEA,0x79,0x00,0x00,0xEA,0x72,0x00,0x00,0xEA,0x77,0x00,0x00,0xEA,
+ 0x37,0x00,0x00,0xEA,0x2B,0x00,0x00,0xEA,0x1A,0x00,0x54,0xE3,0x47,0x00,0x00,0x0A,
+ 0x0A,0x00,0x00,0xCA,0x13,0x00,0x44,0xE2,0x07,0x00,0x50,0xE3,0x00,0xF1,0x8F,0x30,
+ 0x6E,0x00,0x00,0xEA,0x25,0x00,0x00,0xEA,0x2E,0x00,0x00,0xEA,0x38,0x00,0x00,0xEA,
+ 0x2D,0x00,0x00,0xEA,0x16,0x00,0x00,0xEA,0x43,0x00,0x00,0xEA,0x49,0x00,0x00,0xEA,
+ 0x1E,0x00,0x54,0xE3,0x2B,0x00,0x00,0x0A,0x06,0x00,0x00,0xCA,0x1B,0x00,0x54,0xE3,
+ 0x51,0x00,0x00,0x0A,0x1C,0x00,0x54,0xE3,0x24,0x00,0x00,0x0A,0x1D,0x00,0x54,0xE3,
+ 0x5E,0x00,0x00,0x1A,0x22,0x00,0x00,0xEA,0x01,0x0C,0x54,0xE3,0x4F,0x00,0x00,0x0A,
+ 0x01,0x0C,0xE0,0xE3,0x04,0x00,0x90,0xE0,0x06,0x00,0x00,0x0A,0x01,0x00,0x50,0xE3,
+ 0x56,0x00,0x00,0x1A,0x3C,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x59,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,
+ 0x00,0x00,0x00,0x1A,0x14,0xFF,0xFF,0xEB,0x4F,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,
+ 0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x30,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0x0A,0xFF,0xFF,0xEB,
+ 0x45,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x2F,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,
+ 0x00,0x00,0x00,0x1A,0xFC,0xFE,0xFF,0xEB,0x37,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,
+ 0x00,0xF0,0x20,0xE3,0x7D,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,
+ 0xF5,0xFE,0xFF,0xEB,0x30,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x44,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0xEE,0xFE,0xFF,0xEB,
+ 0x29,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0xB6,0x00,0x00,0xEB,
+ 0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0xE7,0xFE,0xFF,0xEB,0x22,0x00,0x00,0xEA,
+ 0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0xBF,0x00,0x00,0xEB,0x00,0x00,0x50,0xE3,
+ 0x00,0x00,0x00,0x1A,0xE0,0xFE,0xFF,0xEB,0x1B,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,
+ 0x44,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0xDA,0xFE,0xFF,0xEB,
+ 0x15,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0x45,0xFF,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0xD3,0xFE,0xFF,0xEB,0x0E,0x00,0x00,0xEA,
+ 0x00,0xF0,0x20,0xE3,0x32,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,
+ 0xCD,0xFE,0xFF,0xEB,0x08,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x0C,0xFF,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x00,0x00,0x00,0x1A,0xC7,0xFE,0xFF,0xEB,0x02,0x00,0x00,0xEA,
+ 0x00,0xF0,0x20,0xE3,0xC4,0xFE,0xFF,0xEB,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,
+ 0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,0x00,0x00,0x02,0x02,0xF8,0x40,0x2D,0xE9,
+ 0xFA,0xFE,0xFF,0xEB,0x00,0x60,0xA0,0xE1,0x02,0x54,0x86,0xE2,0x21,0x5A,0x85,0xE2,
+ 0x01,0x3C,0xA0,0xE3,0x00,0x30,0x8D,0xE5,0x28,0x30,0x9F,0xE5,0x0E,0x2B,0xA0,0xE3,
+ 0x02,0x10,0x43,0xE0,0x05,0x00,0xA0,0xE1,0x07,0x00,0x00,0xEB,0x00,0x40,0xA0,0xE1,
+ 0x00,0x00,0x54,0xE3,0x01,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,0xF8,0x80,0xBD,0xE8,
+ 0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0x00,0x6C,0x02,0x02,0xFC,0x47,0x2D,0xE9,
+ 0x00,0x40,0xA0,0xE1,0x01,0x50,0xA0,0xE1,0x02,0x60,0xA0,0xE1,0x03,0x70,0xA0,0xE1,
+ 0x28,0x80,0x9D,0xE5,0x33,0xAE,0x84,0xE2,0x80,0x01,0x8D,0xE8,0x06,0x30,0xA0,0xE1,
+ 0x05,0x20,0xA0,0xE1,0x43,0x1F,0xA0,0xE3,0x04,0x00,0xA0,0xE1,0x30,0xC0,0x9A,0xE5,
+ 0x3C,0xFF,0x2F,0xE1,0x00,0x90,0xA0,0xE1,0x00,0x00,0x59,0xE3,0x01,0x00,0x00,0x0A,
+ 0x09,0x00,0xA0,0xE1,0xFC,0x87,0xBD,0xE8,0x00,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,
+ 0xF0,0x40,0x2D,0xE9,0x74,0xE1,0x9F,0xE5,0x00,0xE6,0x9E,0xE5,0x02,0x11,0x0E,0xE2,
+ 0x6C,0xE1,0x9F,0xE5,0xC0,0xE2,0x9E,0xE5,0x01,0x20,0x0E,0xE2,0x60,0xE1,0x9F,0xE5,
+ 0x88,0xE1,0x9E,0xE5,0x03,0x30,0x0E,0xE2,0x54,0xE1,0x9F,0xE5,0x98,0xE1,0x9E,0xE5,
+ 0x03,0x40,0x0E,0xE2,0x48,0xE1,0x9F,0xE5,0x84,0xE1,0x9E,0xE5,0x01,0x50,0x0E,0xE2,
+ 0x3C,0xE1,0x9F,0xE5,0x94,0xE1,0x9E,0xE5,0x01,0x60,0x0E,0xE2,0x30,0xE1,0x9F,0xE5,
+ 0xE0,0xE1,0x9E,0xE5,0x03,0x70,0x0E,0xE2,0x28,0xE1,0x9F,0xE5,0x08,0xEF,0x9E,0xE5,
+ 0x10,0xC0,0x0E,0xE2,0x00,0x00,0x51,0xE3,0x42,0x00,0x00,0x0A,0x00,0x00,0x52,0xE3,
+ 0x01,0x00,0x00,0x1A,0x04,0x00,0xA0,0xE3,0x3F,0x00,0x00,0xEA,0x03,0x00,0x53,0xE3,
+ 0x13,0x00,0x00,0x1A,0x03,0x00,0x54,0xE3,0x11,0x00,0x00,0x1A,0x03,0x00,0x54,0xE3,
+ 0x07,0x00,0x00,0x1A,0x00,0x00,0x57,0xE3,0x03,0x00,0x00,0x1A,0x00,0x00,0x5C,0xE3,
+ 0x01,0x00,0x00,0x1A,0x02,0x00,0xA0,0xE3,0x33,0x00,0x00,0xEA,0x01,0x00,0xA0,0xE3,
+ 0x31,0x00,0x00,0xEA,0x00,0x00,0x57,0xE3,0x03,0x00,0x00,0x1A,0x10,0x00,0x5C,0xE3,
+ 0x01,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,0x2B,0x00,0x00,0xEA,0x02,0x00,0xA0,0xE3,
+ 0x29,0x00,0x00,0xEA,0x00,0x00,0x55,0xE3,0x13,0x00,0x00,0x1A,0x00,0x00,0x56,0xE3,
+ 0x11,0x00,0x00,0x1A,0x03,0x00,0x54,0xE3,0x07,0x00,0x00,0x1A,0x00,0x00,0x57,0xE3,
+ 0x03,0x00,0x00,0x1A,0x00,0x00,0x5C,0xE3,0x01,0x00,0x00,0x1A,0x02,0x00,0xA0,0xE3,
+ 0x1D,0x00,0x00,0xEA,0x01,0x00,0xA0,0xE3,0x1B,0x00,0x00,0xEA,0x00,0x00,0x57,0xE3,
+ 0x03,0x00,0x00,0x1A,0x10,0x00,0x5C,0xE3,0x01,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,
+ 0x15,0x00,0x00,0xEA,0x02,0x00,0xA0,0xE3,0x13,0x00,0x00,0xEA,0x03,0x00,0x54,0xE3,
+ 0x07,0x00,0x00,0x1A,0x00,0x00,0x57,0xE3,0x03,0x00,0x00,0x1A,0x00,0x00,0x5C,0xE3,
+ 0x01,0x00,0x00,0x1A,0x04,0x00,0xA0,0xE3,0x0B,0x00,0x00,0xEA,0x03,0x00,0xA0,0xE3,
+ 0x09,0x00,0x00,0xEA,0x00,0x00,0x57,0xE3,0x04,0x00,0x00,0x1A,0x10,0x00,0x5C,0xE3,
+ 0x02,0x00,0x00,0x1A,0x00,0xF0,0x20,0xE3,0x00,0xF0,0x20,0xE3,0xFE,0xFF,0xFF,0xEA,
+ 0x04,0x00,0xA0,0xE3,0x00,0x00,0x00,0xEA,0x00,0x00,0xA0,0xE3,0xF0,0x80,0xBD,0xE8,
+ 0x00,0x00,0x02,0x10,0x00,0x10,0x02,0x10,0x00,0x20,0x02,0x10,0x70,0x40,0x2D,0xE9,
+ 0x08,0x50,0xA0,0xE3,0x00,0x40,0xA0,0xE3,0x07,0x00,0x00,0xEA,0xFF,0x10,0x04,0xE2,
+ 0x05,0x00,0xA0,0xE1,0xA4,0x02,0x00,0xEB,0x01,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,
+ 0x01,0x00,0xA0,0xE3,0x70,0x80,0xBD,0xE8,0x01,0x40,0x84,0xE2,0x04,0x00,0x54,0xE3,
+ 0xF5,0xFF,0xFF,0xBA,0x00,0x00,0xA0,0xE3,0xF9,0xFF,0xFF,0xEA,0x70,0x40,0x2D,0xE9,
+ 0x10,0x50,0xA0,0xE3,0x00,0x40,0xA0,0xE3,0x07,0x00,0x00,0xEA,0xFF,0x10,0x04,0xE2,
+ 0x05,0x00,0xA0,0xE1,0x94,0x02,0x00,0xEB,0x01,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,
+ 0x01,0x00,0xA0,0xE3,0x70,0x80,0xBD,0xE8,0x01,0x40,0x84,0xE2,0x04,0x00,0x54,0xE3,
+ 0xF5,0xFF,0xFF,0xBA,0x00,0x00,0xA0,0xE3,0xF9,0xFF,0xFF,0xEA,0xFE,0x4F,0x2D,0xE9,
+ 0x00,0x20,0xA0,0xE1,0x84,0x0A,0x9F,0xE5,0xC0,0x40,0x90,0xE5,0xC4,0x50,0x90,0xE5,
+ 0xC8,0x60,0x90,0xE5,0xCC,0x70,0x90,0xE5,0xD0,0xC0,0x90,0xE5,0xD4,0xE0,0x90,0xE5,
+ 0xD8,0x80,0x90,0xE5,0xDC,0x90,0x90,0xE5,0xF0,0xA0,0x90,0xE5,0xF4,0x00,0x90,0xE5,
+ 0x08,0x00,0x8D,0xE5,0x54,0x0A,0x9F,0xE5,0xF8,0x00,0x90,0xE5,0x04,0x00,0x8D,0xE5,
+ 0x48,0x0A,0x9F,0xE5,0xFC,0x00,0x90,0xE5,0x00,0x00,0x8D,0xE5,0x00,0x30,0xA0,0xE3,
+ 0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,0x34,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,
+ 0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,
+ 0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,0x35,0x00,0xA0,0xE1,
+ 0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,
+ 0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,
+ 0x36,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,
+ 0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,
+ 0x03,0x02,0xA0,0xE1,0x37,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,
+ 0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,
+ 0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,0x3C,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,
+ 0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,
+ 0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,0x3E,0x00,0xA0,0xE1,
+ 0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,
+ 0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,0x03,0x02,0xA0,0xE1,
+ 0x38,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,0x01,0x30,0x83,0xE2,
+ 0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,0x04,0x00,0x00,0xEA,
+ 0x03,0x02,0xA0,0xE1,0x39,0x00,0xA0,0xE1,0x1F,0x06,0xDF,0xE7,0x04,0x00,0x82,0xE4,
+ 0x01,0x30,0x83,0xE2,0x02,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,
+ 0x04,0x00,0x00,0xEA,0x83,0x01,0xA0,0xE1,0x3A,0x00,0xA0,0xE1,0xFF,0x00,0x00,0xE2,
+ 0x04,0x00,0x81,0xE4,0x01,0x30,0x83,0xE2,0x04,0x00,0x53,0xE3,0xF8,0xFF,0xFF,0x3A,
+ 0x00,0x30,0xA0,0xE3,0x05,0x00,0x00,0xEA,0x83,0x01,0xA0,0xE1,0x08,0xB0,0x9D,0xE5,
+ 0x3B,0x00,0xA0,0xE1,0xFF,0x00,0x00,0xE2,0x04,0x00,0x81,0xE4,0x01,0x30,0x83,0xE2,
+ 0x04,0x00,0x53,0xE3,0xF7,0xFF,0xFF,0x3A,0x00,0x30,0xA0,0xE3,0x05,0x00,0x00,0xEA,
+ 0x83,0x01,0xA0,0xE1,0x04,0xB0,0x9D,0xE5,0x3B,0x00,0xA0,0xE1,0xFF,0x00,0x00,0xE2,
+ 0x04,0x00,0x81,0xE4,0x01,0x30,0x83,0xE2,0x04,0x00,0x53,0xE3,0xF7,0xFF,0xFF,0x3A,
+ 0x00,0x30,0xA0,0xE3,0x05,0x00,0x00,0xEA,0x83,0x01,0xA0,0xE1,0x00,0xB0,0x9D,0xE5,
+ 0x3B,0x00,0xA0,0xE1,0xFF,0x00,0x00,0xE2,0x04,0x00,0x81,0xE4,0x01,0x30,0x83,0xE2,
+ 0x04,0x00,0x53,0xE3,0xF7,0xFF,0xFF,0x3A,0x01,0x00,0xA0,0xE3,0xFE,0x8F,0xBD,0xE8,
+ 0xF0,0x43,0x2D,0xE9,0x06,0xDD,0x4D,0xE2,0x00,0x40,0xA0,0xE1,0x01,0x50,0xA0,0xE1,
+ 0x68,0x08,0x9F,0xE5,0x40,0x00,0x90,0xE5,0xFF,0x70,0x00,0xE2,0x00,0x00,0x57,0xE3,
+ 0x02,0x00,0x00,0x1A,0x01,0x00,0xA0,0xE3,0x06,0xDD,0x8D,0xE2,0xF0,0x83,0xBD,0xE8,
+ 0x05,0x00,0x57,0xE1,0x01,0x00,0x00,0x9A,0x00,0x00,0xA0,0xE3,0xF9,0xFF,0xFF,0xEA,
+ 0x08,0x00,0x55,0xE3,0x02,0x00,0x00,0x0A,0x10,0x00,0x55,0xE3,0x08,0x00,0x00,0x1A,
+ 0x03,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x02,0x8C,0xA0,0xE3,0x0D,0x90,0xA0,0xE3,
+ 0x06,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x02,0x8C,0xA0,0xE3,0x1A,0x90,0xA0,0xE3,
+ 0x02,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x00,0x00,0xA0,0xE3,0xE9,0xFF,0xFF,0xEA,
+ 0x00,0xF0,0x20,0xE3,0x0D,0x10,0xA0,0xE1,0xC0,0x00,0x8D,0xE2,0x56,0xFF,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,0x00,0x00,0xA0,0xE3,0xE1,0xFF,0xFF,0xEA,
+ 0x00,0x60,0xA0,0xE3,0x10,0x00,0x00,0xEA,0xC0,0x00,0x8D,0xE2,0x06,0x01,0x90,0xE7,
+ 0x09,0x10,0x88,0xE0,0x01,0x00,0x50,0xE1,0x08,0x00,0x00,0x2A,0xC0,0x00,0x8D,0xE2,
+ 0x06,0x01,0x90,0xE7,0x00,0x00,0xD4,0xE7,0x06,0x11,0x9D,0xE7,0x01,0x00,0x20,0xE0,
+ 0xC0,0x10,0x8D,0xE2,0x06,0x11,0x91,0xE7,0x01,0x00,0xC4,0xE7,0x01,0x00,0x00,0xEA,
+ 0x00,0x00,0xA0,0xE3,0xCF,0xFF,0xFF,0xEA,0x01,0x60,0x86,0xE2,0x07,0x00,0x56,0xE1,
+ 0xEC,0xFF,0xFF,0x3A,0x01,0x00,0xA0,0xE3,0xCA,0xFF,0xFF,0xEA,0x7C,0x17,0x9F,0xE5,
+ 0x20,0x00,0x91,0xE5,0x01,0x05,0xC0,0xE3,0x20,0x00,0x81,0xE5,0x1E,0xFF,0x2F,0xE1,
+ 0x68,0x17,0x9F,0xE5,0x20,0x00,0x91,0xE5,0x01,0x05,0x80,0xE3,0x20,0x00,0x81,0xE5,
+ 0x1E,0xFF,0x2F,0xE1,0x54,0x17,0x9F,0xE5,0x20,0x00,0x91,0xE5,0x02,0x05,0x80,0xE3,
+ 0x20,0x00,0x81,0xE5,0x1E,0xFF,0x2F,0xE1,0x00,0x20,0xA0,0xE1,0x9F,0x27,0xDF,0xE7,
+ 0x02,0x10,0xA0,0xE1,0x34,0x27,0x9F,0xE5,0x50,0x10,0x82,0xE5,0x1E,0xFF,0x2F,0xE1,
+ 0x10,0x40,0x2D,0xE9,0x70,0x00,0xA0,0xE3,0xCE,0x46,0xA0,0xE3,0x08,0x00,0x84,0xE5,
+ 0x00,0x30,0xA0,0xE3,0x00,0x00,0x00,0xEA,0x01,0x30,0x83,0xE2,0x20,0x0E,0x04,0xE3,
+ 0x00,0x00,0x53,0xE1,0xFB,0xFF,0xFF,0x3A,0x70,0x00,0xA0,0xE3,0xCE,0x46,0xA0,0xE3,
+ 0x08,0x00,0x84,0xE5,0x00,0x10,0xA0,0xE3,0x09,0x00,0x00,0xEA,0xCE,0x06,0xA0,0xE3,
+ 0x10,0x20,0xD0,0xE5,0x40,0x00,0x12,0xE3,0x04,0x00,0x00,0x0A,0x00,0x00,0xA0,0xE3,
+ 0xCE,0x46,0xA0,0xE3,0x08,0x00,0x84,0xE5,0x01,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,
+ 0x01,0x10,0x81,0xE2,0xC8,0x06,0x9F,0xE5,0x00,0x00,0x51,0xE1,0xF2,0xFF,0xFF,0x3A,
+ 0x00,0x00,0xA0,0xE3,0xF8,0xFF,0xFF,0xEA,0x00,0x10,0xA0,0xE3,0x06,0x00,0x00,0xEA,
+ 0xCE,0x06,0xA0,0xE3,0x28,0x00,0x90,0xE5,0x10,0x00,0x10,0xE3,0x01,0x00,0x00,0x0A,
+ 0x01,0x00,0xA0,0xE3,0x1E,0xFF,0x2F,0xE1,0x01,0x10,0x81,0xE2,0x90,0x06,0x9F,0xE5,
+ 0x00,0x00,0x51,0xE1,0xF5,0xFF,0xFF,0x3A,0x00,0x00,0xA0,0xE3,0xF8,0xFF,0xFF,0xEA,
+ 0xFE,0x4F,0x2D,0xE9,0x00,0x40,0xA0,0xE1,0x01,0x50,0xA0,0xE1,0x02,0x60,0xA0,0xE1,
+ 0x03,0x70,0xA0,0xE1,0x00,0x00,0xA0,0xE3,0x04,0x00,0x8D,0xE5,0xA9,0x89,0x05,0xE3,
+ 0x08,0x00,0x56,0xE3,0x02,0x00,0x00,0x0A,0x10,0x00,0x56,0xE3,0x0E,0x00,0x00,0x1A,
+ 0x06,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,0x01,0x90,0xA0,0xE3,0x03,0xA0,0xA0,0xE3,
+ 0x02,0x0C,0xA0,0xE3,0x00,0x00,0x8D,0xE5,0x0D,0xB0,0xA0,0xE3,0x09,0x00,0x00,0xEA,
+ 0x00,0xF0,0x20,0xE3,0x02,0x90,0xA0,0xE3,0x03,0xA0,0xA0,0xE3,0x02,0x0C,0xA0,0xE3,
+ 0x00,0x00,0x8D,0xE5,0x1A,0xB0,0xA0,0xE3,0x02,0x00,0x00,0xEA,0x00,0xF0,0x20,0xE3,
+ 0x00,0x00,0xA0,0xE3,0xFE,0x8F,0xBD,0xE8,0x00,0xF0,0x20,0xE3,0x20,0x00,0xA0,0xE3,
+ 0xCE,0x16,0xA0,0xE3,0x28,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,0x04,0x00,0x90,0xE5,
+ 0x80,0x00,0x80,0xE3,0x04,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,
+ 0x01,0x00,0x57,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,0x00,0x00,0x00,0xEA,
+ 0x01,0x00,0x87,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0xC1,0xE1,0xCE,0x16,0xA0,0xE3,
+ 0x04,0x00,0x81,0xE5,0x10,0x00,0xA0,0xE3,0x28,0x00,0x81,0xE5,0x01,0x04,0xA0,0xE3,
+ 0xC0,0x13,0x81,0xE1,0x30,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,0x04,0x00,0x90,0xE5,
+ 0x80,0x00,0x80,0xE3,0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x10,0x00,0xA0,0xE3,
+ 0x28,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0x08,0x00,0x81,0xE5,0x08,0x00,0x8D,0xE5,
+ 0x05,0x00,0x00,0xEA,0x00,0x00,0xA0,0xE3,0xCE,0x16,0xA0,0xE3,0x0C,0x00,0x81,0xE5,
+ 0x08,0x00,0x9D,0xE5,0x01,0x00,0x80,0xE2,0x08,0x00,0x8D,0xE5,0x08,0x00,0x9D,0xE5,
+ 0x09,0x00,0x50,0xE1,0xF6,0xFF,0xFF,0x3A,0x00,0x00,0xA0,0xE3,0x08,0x00,0x8D,0xE5,
+ 0x08,0x00,0x00,0xEA,0x08,0x00,0x9D,0xE5,0x80,0x01,0xA0,0xE1,0x35,0x00,0xA0,0xE1,
+ 0xFF,0x00,0x00,0xE2,0xCE,0x16,0xA0,0xE3,0x0C,0x00,0x81,0xE5,0x08,0x00,0x9D,0xE5,
+ 0x01,0x00,0x80,0xE2,0x08,0x00,0x8D,0xE5,0x08,0x00,0x9D,0xE5,0x0A,0x00,0x50,0xE1,
+ 0xF3,0xFF,0xFF,0x3A,0x08,0x00,0x56,0xE3,0x02,0x00,0x00,0x0A,0x30,0x00,0xA0,0xE3,
+ 0xCE,0x16,0xA0,0xE3,0x08,0x00,0x81,0xE5,0x00,0x00,0x57,0xE3,0x0F,0x00,0x00,0x1A,
+ 0x90,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x1C,0x00,0x00,0x1A,0xCE,0x06,0xA0,0xE3,
+ 0x04,0x10,0x90,0xE5,0x01,0x00,0x57,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,
+ 0x00,0x00,0x00,0xEA,0x01,0x00,0x87,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,
+ 0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0xAC,0xFF,0xFF,0xEA,
+ 0x62,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x0C,0x00,0x00,0x1A,0xCE,0x06,0xA0,0xE3,
+ 0x04,0x10,0x90,0xE5,0x01,0x00,0x57,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,
+ 0x00,0x00,0x00,0xEA,0x01,0x00,0x87,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,
+ 0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0x9C,0xFF,0xFF,0xEA,
+ 0x10,0x00,0xA0,0xE3,0xCE,0x16,0xA0,0xE3,0x28,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,
+ 0x04,0x00,0x90,0xE5,0x80,0x00,0xC0,0xE3,0x04,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,
+ 0x04,0x00,0x90,0xE5,0x30,0x00,0x80,0xE3,0x04,0x00,0x81,0xE5,0x02,0x08,0x81,0xE2,
+ 0x20,0x00,0x90,0xE5,0x04,0x00,0x80,0xE3,0x02,0x18,0x81,0xE2,0x20,0x00,0x81,0xE5,
+ 0x08,0x00,0x56,0xE3,0x03,0x00,0x00,0x0A,0x08,0x00,0xA0,0xE1,0x39,0xFF,0xFF,0xEB,
+ 0x33,0xFF,0xFF,0xEB,0x2D,0xFF,0xFF,0xEB,0x00,0x00,0xA0,0xE3,0x08,0x00,0x8D,0xE5,
+ 0x05,0x00,0x00,0xEA,0xCE,0x06,0xA0,0xE3,0x10,0x00,0xD0,0xE5,0x01,0x00,0xC4,0xE4,
+ 0x08,0x00,0x9D,0xE5,0x01,0x00,0x80,0xE2,0x08,0x00,0x8D,0xE5,0x08,0x00,0x9D,0xE5,
+ 0x00,0x10,0x9D,0xE5,0x01,0x00,0x50,0xE1,0xF5,0xFF,0xFF,0x3A,0x00,0x00,0xA0,0xE3,
+ 0x08,0x00,0x8D,0xE5,0x04,0x00,0x00,0xEA,0xCE,0x06,0xA0,0xE3,0x10,0x00,0xD0,0xE5,
+ 0x08,0x00,0x9D,0xE5,0x01,0x00,0x80,0xE2,0x08,0x00,0x8D,0xE5,0x08,0x00,0x9D,0xE5,
+ 0x0B,0x00,0x50,0xE1,0xF7,0xFF,0xFF,0x3A,0x08,0x00,0x56,0xE3,0x00,0x00,0x00,0x0A,
+ 0x0D,0xFF,0xFF,0xEB,0xCE,0x06,0xA0,0xE3,0x04,0x00,0x90,0xE5,0x80,0x00,0x80,0xE3,
+ 0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x00,0xF0,0x20,0xE3,0x9C,0x03,0x9F,0xE5,
+ 0x30,0x00,0x90,0xE5,0x01,0x04,0x10,0xE3,0xFB,0xFF,0xFF,0x0A,0x01,0x04,0xA0,0xE3,
+ 0x88,0x13,0x9F,0xE5,0x30,0x00,0x81,0xE5,0x00,0xF0,0x20,0xE3,0x7C,0x03,0x9F,0xE5,
+ 0x30,0x00,0x90,0xE5,0x02,0x01,0x10,0xE3,0xFB,0xFF,0xFF,0x1A,0x00,0x10,0x9D,0xE5,
+ 0x01,0x00,0x44,0xE0,0x06,0x10,0xA0,0xE1,0xB8,0xFE,0xFF,0xEB,0x00,0x00,0x50,0xE3,
+ 0x0C,0x00,0x00,0x1A,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,0x01,0x00,0x57,0xE3,
+ 0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,0x00,0x00,0x00,0xEA,0x01,0x00,0x87,0xE2,
+ 0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,
+ 0x00,0x00,0xA0,0xE3,0x46,0xFF,0xFF,0xEA,0xCE,0x06,0xA0,0xE3,0x28,0x00,0x90,0xE5,
+ 0x20,0x00,0x10,0xE3,0x0F,0x00,0x00,0x0A,0x20,0x00,0xA0,0xE3,0xCE,0x16,0xA0,0xE3,
+ 0x28,0x00,0x81,0xE5,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,0x01,0x00,0x57,0xE3,
+ 0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,0x00,0x00,0x00,0xEA,0x01,0x00,0x87,0xE2,
+ 0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,
+ 0x00,0x00,0xA0,0xE3,0x32,0xFF,0xFF,0xEA,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,
+ 0x01,0x00,0x57,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x87,0xE2,0x00,0x00,0x00,0xEA,
+ 0x01,0x00,0x87,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,0xCE,0x16,0xA0,0xE3,
+ 0x04,0x00,0x81,0xE5,0x01,0x00,0xA0,0xE3,0x25,0xFF,0xFF,0xEA,0xF8,0x4F,0x2D,0xE9,
+ 0x00,0x40,0xA0,0xE1,0x01,0x50,0xA0,0xE1,0x02,0x60,0xA0,0xE1,0x03,0x70,0xA0,0xE1,
+ 0x04,0x80,0xA0,0xE1,0x84,0x02,0x9F,0xE5,0x20,0x00,0x90,0xE5,0x01,0x08,0xC0,0xE3,
+ 0x78,0x12,0x9F,0xE5,0x20,0x00,0x81,0xE5,0x08,0x00,0x57,0xE3,0x05,0x00,0x00,0x1A,
+ 0x01,0x00,0xA0,0xE1,0x00,0x00,0x90,0xE5,0x0F,0x00,0xC0,0xE3,0x03,0x00,0x80,0xE3,
+ 0x00,0x00,0x81,0xE5,0x02,0xAC,0xA0,0xE3,0x10,0x00,0x57,0xE3,0x06,0x00,0x00,0x1A,
+ 0x48,0x02,0x9F,0xE5,0x00,0x00,0x90,0xE5,0x0F,0x00,0xC0,0xE3,0x05,0x00,0x80,0xE3,
+ 0x38,0x12,0x9F,0xE5,0x00,0x00,0x81,0xE5,0x02,0xAC,0xA0,0xE3,0x2C,0x02,0x9F,0xE5,
+ 0x00,0x00,0x90,0xE5,0x1F,0x08,0xDA,0xE7,0x01,0x10,0x4A,0xE2,0x01,0x08,0x80,0xE1,
+ 0x18,0x12,0x9F,0xE5,0x00,0x00,0x81,0xE5,0x0A,0x10,0xA0,0xE1,0x05,0x00,0xA0,0xE1,
+ 0xE4,0x00,0x00,0xEB,0x00,0xB0,0xA0,0xE1,0x0A,0x10,0x86,0xE0,0x01,0x00,0x41,0xE2,
+ 0x0A,0x10,0xA0,0xE1,0xDF,0x00,0x00,0xEB,0x00,0x00,0x8D,0xE5,0x0B,0x90,0xA0,0xE1,
+ 0x0A,0x00,0x00,0xEA,0x07,0x20,0xA0,0xE1,0x09,0x10,0xA0,0xE1,0x08,0x00,0xA0,0xE1,
+ 0x28,0x30,0x9D,0xE5,0xD5,0xFE,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,
+ 0x00,0x00,0xA0,0xE3,0xF8,0x8F,0xBD,0xE8,0x0A,0x80,0x88,0xE0,0x01,0x90,0x89,0xE2,
+ 0x00,0x00,0x9D,0xE5,0x0B,0x00,0x80,0xE0,0x09,0x00,0x50,0xE1,0xF0,0xFF,0xFF,0x8A,
+ 0x01,0x00,0xA0,0xE3,0xF6,0xFF,0xFF,0xEA,0x10,0x40,0x2D,0xE9,0x00,0x40,0xA0,0xE1,
+ 0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,0x01,0x00,0x54,0xE3,0x01,0x00,0x00,0xDA,
+ 0x14,0x00,0x84,0xE2,0x00,0x00,0x00,0xEA,0x01,0x00,0x84,0xE2,0x01,0x20,0xA0,0xE3,
+ 0x12,0x00,0xC1,0xE1,0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x10,0x00,0xA0,0xE3,
+ 0x28,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0x08,0x00,0x81,0xE5,0xFF,0x00,0xA0,0xE3,
+ 0x08,0x00,0x81,0xE5,0x00,0x00,0x54,0xE3,0x0F,0x00,0x00,0x1A,0xA5,0xFE,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x1C,0x00,0x00,0x1A,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,
+ 0x01,0x00,0x54,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x84,0xE2,0x00,0x00,0x00,0xEA,
+ 0x01,0x00,0x84,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,0xCE,0x16,0xA0,0xE3,
+ 0x04,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0x10,0x80,0xBD,0xE8,0x77,0xFE,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x0C,0x00,0x00,0x1A,0xCE,0x06,0xA0,0xE3,0x04,0x10,0x90,0xE5,
+ 0x01,0x00,0x54,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x84,0xE2,0x00,0x00,0x00,0xEA,
+ 0x01,0x00,0x84,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,0xCE,0x16,0xA0,0xE3,
+ 0x04,0x00,0x81,0xE5,0x00,0x00,0xA0,0xE3,0xEE,0xFF,0xFF,0xEA,0xCE,0x06,0xA0,0xE3,
+ 0x04,0x10,0x90,0xE5,0x01,0x00,0x54,0xE3,0x01,0x00,0x00,0xDA,0x14,0x00,0x84,0xE2,
+ 0x00,0x00,0x00,0xEA,0x01,0x00,0x84,0xE2,0x01,0x20,0xA0,0xE3,0x12,0x00,0x81,0xE1,
+ 0xCE,0x16,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x01,0x00,0xA0,0xE3,0xE1,0xFF,0xFF,0xEA,
+ 0x10,0x40,0x2D,0xE9,0x00,0x40,0xA0,0xE1,0x72,0x07,0x07,0xE3,0xCE,0x16,0xA0,0xE3,
+ 0x00,0x00,0x81,0xE5,0x07,0x00,0xA0,0xE3,0x04,0x00,0x81,0xE5,0x04,0x00,0xA0,0xE1,
+ 0xB4,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,0x00,0x00,0xA0,0xE3,
+ 0x10,0x80,0xBD,0xE8,0x01,0x00,0xA0,0xE3,0xFC,0xFF,0xFF,0xEA,0xF8,0x43,0x2D,0xE9,
+ 0x00,0x40,0xA0,0xE1,0x01,0x50,0xA0,0xE1,0x58,0x60,0x9F,0xE5,0xBF,0xFB,0xFF,0xEB,
+ 0x00,0x80,0xA0,0xE1,0x01,0x79,0xA0,0xE3,0x05,0x00,0xA0,0xE1,0xE7,0xFF,0xFF,0xEB,
+ 0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,0x00,0x00,0xA0,0xE3,0xF8,0x83,0xBD,0xE8,
+ 0x04,0x30,0xA0,0xE1,0x07,0x20,0xA0,0xE1,0x08,0x10,0xA0,0xE1,0x06,0x00,0xA0,0xE1,
+ 0x00,0x50,0x8D,0xE5,0x5C,0xFF,0xFF,0xEB,0x00,0x00,0x50,0xE3,0x01,0x00,0x00,0x1A,
+ 0x00,0x00,0xA0,0xE3,0xF4,0xFF,0xFF,0xEA,0x01,0x00,0xA0,0xE3,0xF2,0xFF,0xFF,0xEA,
+ 0x00,0x00,0xE2,0x0C,0x00,0x5A,0x62,0x02,0x00,0x34,0x02,0x02,0x01,0x30,0x90,0xE1,
+ 0x21,0x00,0x00,0x4A,0x00,0x20,0xB0,0xE3,0xA0,0x30,0x71,0xE0,0x1A,0x00,0x00,0x3A,
+ 0x20,0x32,0x71,0xE0,0x0F,0x00,0x00,0x3A,0x20,0x34,0x71,0xE0,0x01,0x00,0x00,0x3A,
+ 0x00,0xC0,0xA0,0xE3,0x20,0x00,0x00,0xEA,0xA0,0x33,0x71,0xE0,0x81,0x03,0x40,0x20,
+ 0x02,0x20,0xB2,0xE0,0x20,0x33,0x71,0xE0,0x01,0x03,0x40,0x20,0x02,0x20,0xB2,0xE0,
+ 0xA0,0x32,0x71,0xE0,0x81,0x02,0x40,0x20,0x02,0x20,0xB2,0xE0,0x20,0x32,0x71,0xE0,
+ 0x01,0x02,0x40,0x20,0x02,0x20,0xB2,0xE0,0xA0,0x31,0x71,0xE0,0x81,0x01,0x40,0x20,
+ 0x02,0x20,0xB2,0xE0,0x20,0x31,0x71,0xE0,0x01,0x01,0x40,0x20,0x02,0x20,0xB2,0xE0,
+ 0xA0,0x30,0x71,0xE0,0x81,0x00,0x40,0x20,0x02,0x20,0xB2,0xE0,0x01,0x10,0x50,0xE0,
+ 0x00,0x10,0xA0,0x31,0x02,0x00,0xA2,0xE0,0x1E,0xFF,0x2F,0xE1,0x02,0x21,0x11,0xE2,
+ 0x00,0x10,0x61,0x42,0x40,0xC0,0x32,0xE0,0x00,0x00,0x60,0x22,0x20,0x32,0x71,0xE0,
+ 0x1D,0x00,0x00,0x3A,0x20,0x34,0x71,0xE0,0x0F,0x00,0x00,0x3A,0x01,0x13,0xA0,0xE1,
+ 0x20,0x34,0x71,0xE0,0x3F,0x23,0x82,0xE3,0x0B,0x00,0x00,0x3A,0x01,0x13,0xA0,0xE1,
+ 0x20,0x34,0x71,0xE0,0x3F,0x26,0x82,0xE3,0x07,0x00,0x00,0x3A,0x01,0x13,0xA0,0xE1,
+ 0x20,0x34,0x71,0xE0,0x3F,0x29,0x82,0xE3,0x01,0x13,0xA0,0x21,0x3F,0x2C,0x82,0x23,
+ 0x00,0x30,0x71,0xE2,0x1D,0x00,0x00,0x2A,0x21,0x13,0xA0,0x21,0xA0,0x33,0x71,0xE0,
+ 0x81,0x03,0x40,0x20,0x02,0x20,0xB2,0xE0,0x20,0x33,0x71,0xE0,0x01,0x03,0x40,0x20,
+ 0x02,0x20,0xB2,0xE0,0xA0,0x32,0x71,0xE0,0x81,0x02,0x40,0x20,0x02,0x20,0xB2,0xE0,
+ 0x20,0x32,0x71,0xE0,0x01,0x02,0x40,0x20,0x02,0x20,0xB2,0xE0,0xA0,0x31,0x71,0xE0,
+ 0x81,0x01,0x40,0x20,0x02,0x20,0xB2,0xE0,0x20,0x31,0x71,0xE0,0x01,0x01,0x40,0x20,
+ 0x02,0x20,0xB2,0xE0,0xEB,0xFF,0xFF,0x2A,0xA0,0x30,0x71,0xE0,0x81,0x00,0x40,0x20,
+ 0x02,0x20,0xB2,0xE0,0x01,0x10,0x50,0xE0,0x00,0x10,0xA0,0x31,0x02,0x00,0xA2,0xE0,
+ 0xCC,0xCF,0xB0,0xE1,0x00,0x00,0x60,0x42,0x00,0x10,0x61,0x22,0x1E,0xFF,0x2F,0xE1,
+ 0xCC,0xCF,0xB0,0xE1,0x00,0x00,0x60,0x42,0x01,0x40,0x2D,0xE9,0x00,0x00,0xB0,0xE3,
+ 0x00,0x00,0xA0,0xE1,0x02,0x80,0xBD,0xE8,0x00,0x20,0xB0,0xE3,0x20,0x32,0x71,0xE0,
+ 0xB4,0xFF,0xFF,0x3A,0x20,0x34,0x71,0xE0,0xA6,0xFF,0xFF,0x3A,0x00,0xC0,0xA0,0xE3,
+ 0xC5,0xFF,0xFF,0xEA,0x00,0x00,0x00,0x00,0x32,0x30,0x31,0x31,0x31,0x31,0x32,0x38,
+};
+
+int main(int argc, char *argv[])
+{
+ int fd_in = -1;
+ int fd_out = -1;
+
+ if (argc != 3) {
+ printf("Usage: %s <in.bin> <out.bin>\n", argv[0]);
+ return 0;
+ }
+
+ do {
+ const char *inFile = argv[1];
+ const char *outFile = argv[2];
+
+ fd_in = open(inFile, O_RDONLY);
+ if (fd_in < 0) break;
+
+ int r_sz = read(fd_in, buf+BL2_OFFSET, BL2_SIZE-4);
+ if (r_sz == -1) break;
+
+ int in_size = lseek(fd_in, 0, SEEK_END);
+ if (in_size > r_sz) {
+ printf("WARNING: Cut head %d of %dbytes(%s)\n",
+ r_sz, in_size, inFile);
+ }
+
+ close(fd_in);
+ fd_in = -1;
+
+ unsigned int checksum = 0;
+ for (int i = 0; i < r_sz; i++)
+ checksum += buf[BL2_OFFSET+i];
+ memcpy(&buf[BL2_OFFSET+BL2_SIZE-4], &checksum, 4);
+
+ remove(outFile);
+ fd_out = open(outFile, O_CREAT|O_WRONLY|O_TRUNC, 0664);
+ if (fd_out < 0) break;
+
+ int w_sz = write(fd_out, buf, sizeof(buf));
+ if (w_sz != sizeof(buf)) break;
+
+ close(fd_out);
+ fd_out = -1;
+
+ return 0;
+ } while (0);
+
+ if (fd_in >= 0)
+ close(fd_in);
+
+ if (fd_out >= 0)
+ close(fd_out);
+
+ printf("Failed!\n");
+ return -1;
+}
2.3.14 configs/tiny4412_defconfig
添加tiny4412板子的默认配置文件。
diff --git a/configs/tiny4412_defconfig b/configs/tiny4412_defconfig
new file mode 100644
index 0000000000..ccd50ee90d
--- /dev/null
+++ b/configs/tiny4412_defconfig
@@ -0,0 +1,59 @@
+CONFIG_ARM=y
+CONFIG_SYS_ARM_CACHE_WRITETHROUGH=y
+CONFIG_ARCH_CPU_INIT=y
+CONFIG_ARCH_EXYNOS=y
+CONFIG_SYS_TEXT_BASE=0x40000000
+CONFIG_ARCH_EXYNOS4=y
+CONFIG_TARGET_TINY4412=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_ENV_SIZE=0x10000
+CONFIG_ENV_OFFSET=0xF0000
+CONFIG_SPL_TEXT_BASE=0x02023400
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SPL_SIZE_LIMIT=0x37fc
+CONFIG_SPL=y
+CONFIG_DEBUG_UART_BASE=0x13800000
+CONFIG_DEBUG_UART_CLOCK=100000000
+CONFIG_IDENT_STRING=" for Tiny4412"
+CONFIG_DEBUG_UART=y
+CONFIG_DEFAULT_DEVICE_TREE="exynos4412-tiny4412"
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttySAC0,921600 earlyprintk root=/dev/ram rw initrd=0x44000000,8M"
+CONFIG_BOOTCOMMAND="mw 110002a0 10000 && mw 110002a4 00 && mmc rescan && mmc dev 2 && load mmc 2 40008000 zImage && load mmc 2 42000000 exynos4412-tiny4412.dtb && load mmc 2 44000000 ramdisk && mw 110002a4 10 && bootz 40008000 - 42000000"
+CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_BOARD_LATE_INIT=y
+CONFIG_BOARD_TYPES=y
+# CONFIG_SPL_FRAMEWORK is not set
+CONFIG_SYS_PROMPT="Tiny4412 # "
+CONFIG_CMD_CONFIG=y
+CONFIG_CMD_LICENSE=y
+CONFIG_BOOTM_OPENRTOS=y
+CONFIG_BOOTM_OSE=y
+CONFIG_CMD_BOOTMENU=y
+CONFIG_CMD_ADTIMG=y
+CONFIG_CMD_SPL=y
+CONFIG_CMD_DFU=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_MMC=y
+# CONFIG_CMD_NET is not set
+CONFIG_CMD_CACHE=y
+# CONFIG_CMD_MISC is not set
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_OF_CONTROL=y
+CONFIG_DFU_MMC=y
+CONFIG_SUPPORT_EMMC_RPMB=y
+CONFIG_SUPPORT_EMMC_BOOT=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_SDMA=y
+CONFIG_MMC_SDHCI_S5P=y
+CONFIG_DM_ETH=y
+CONFIG_DM_ETH_PHY=y
+CONFIG_BAUDRATE=921600
+CONFIG_CONS_INDEX=0
+CONFIG_SERIAL_RX_BUFFER=y
+CONFIG_SERIAL_RX_BUFFER_SIZE=4096
+CONFIG_DEBUG_UART_ANNOUNCE=y
2.3.15 include/configs/tiny4412.h
添加tiny4412板子头文件。
diff --git a/include/configs/tiny4412.h b/include/configs/tiny4412.h
new file mode 100755
index 0000000000..9731ffaf9f
--- /dev/null
+++ b/include/configs/tiny4412.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2020 xkwy2018.cn
+ *
+ * Configuration settings for the xkwy Tiny4412 (EXYNOS4412) board.
+ */
+
+#ifndef __CONFIG_TINY4412_H
+#define __CONFIG_TINY4412_H
+
+#include <configs/exynos4-common.h>
+
+#define CONFIG_EXYNOS4210 1 /* for spl dmc&clock */
+
+#define CONFIG_MACH_TYPE MACH_TYPE_TINY4412
+
+#define CONFIG_CLK_1000_400_200
+
+/* Dual Samsung's DDR3 K4B4G1646D-BCK0 (total: 8Gbit) */
+#define PHYS_SDRAM_1 0x40000000
+#define SDRAM_BANK_SIZE SZ_1G
+#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+
+#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_32M)
+#define CONFIG_LOADADDR 0x42000000
+
+
+/* copy form \linux\kernel\4.15.12\drivers\tty\tty_baudrate.c static const speed_t baud_table[] */
+#define CONFIG_SYS_BAUDRATE_TABLE {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, \
+ 9600, 19200, 38400, 57600, 115200, 230400, 460800, \
+ 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, \
+ 2500000, 3000000, 3500000, 4000000}
+
+#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_SYS_MMC_ENV_DEV 0
+
+#define CONFIG_SPL_MAX_FOOTPRINT (14 * 1024)
+
+#define CONFIG_SYS_INIT_SP_ADDR 0x02040000
+
+/*
+ * SD Card layout:
+ * +-----+-----+----------+-----+----------------+-------+
+ * | 0K5 | 8K | 14K(BL2) | 1K5 | 936KiB | 64K |
+ * | MBR | BL1 | spl.bin | | u-boot-dtb.bin | u-env |
+ * +-----+-----+----------+-----+----------------+-------+
+ *
+ * eMMC layout: (Boot Capacity: 4 MiB ENH)
+ * +-----+----------+-----------+----------------+-------+
+ * | 8K | 14K(BL2) | 2K | 936KiB | 64K |
+ * | BL1 | spl.bin | | u-boot-dtb.bin | u-env |
+ * +-----+----------+-----------+----------------+-------+
+ */
+/* U-Boot copy size from boot Media to DRAM.*/
+#define BL2_START_OFFSET (1 + 0x6000/512)
+#define BL2_SIZE_BLOC_COUNT (936*2)
+
+#endif /* __CONFIG_H */
3 配置、编译、下载、测试
3.1 配置
$ make CROSS_COMPILE=arm-xkwy-linux-gnueabi- tiny4412_defconfigHOSTCC scripts/basic/fixdepHOSTCC scripts/kconfig/conf.oYACC scripts/kconfig/zconf.tab.cLEX scripts/kconfig/zconf.lex.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
3.2 编译
$ make CROSS_COMPILE=arm-xkwy-linux-gnueabi- -j8
scripts/kconfig/conf --syncconfig KconfigUPD include/config.hCFG u-boot.cfgGEN include/autoconf.mk.depCFG spl/u-boot.cfgGEN include/autoconf.mkGEN spl/include/autoconf.mkUPD include/generated/dt.hUPD include/generated/timestamp_autogenerated.hUPD include/config/uboot.releaseUPD include/generated/version_autogenerated.hHOSTCC scripts/bin2cHOSTCC scripts/dtc/flattree.oHOSTCC scripts/dtc/dtc.oHOSTCC scripts/dtc/fstree.oHOSTCC scripts/dtc/data.oHOSTCC scripts/dtc/livetree.oHOSTCC scripts/dtc/treesource.oHOSTCC scripts/dtc/srcpos.oHOSTCC scripts/dtc/checks.oHOSTCC scripts/dtc/util.oLEX scripts/dtc/dtc-lexer.lex.cYACC scripts/dtc/dtc-parser.tab.hCC lib/asm-offsets.sCC arch/arm/lib/asm-offsets.sYACC scripts/dtc/dtc-parser.tab.cHOSTCC scripts/dtc/dtc-lexer.lex.oUPD include/generated/generic-asm-offsets.hUPD include/generated/asm-offsets.hLDS u-boot.ldsHOSTCC scripts/dtc/dtc-parser.tab.oHOSTLD scripts/dtc/dtcHOSTCC tools/img2srecHOSTCC tools/mkenvimage.oHOSTCC tools/os_support.oWRAP tools/lib/crc32.cHOSTCC tools/aisimage.oHOSTCC tools/atmelimage.oWRAP tools/common/fdt_region.cWRAP tools/common/bootm.cHOSTCC tools/default_image.oWRAP tools/lib/fdtdec_common.cWRAP tools/lib/fdtdec.cWRAP tools/common/image.cHOSTCC tools/imagetool.oHOSTCC tools/imximage.oHOSTCC tools/imx8image.oHOSTCC tools/imx8mimage.oHOSTCC tools/kwbimage.oWRAP tools/lib/md5.cHOSTCC tools/lpc32xximage.oHOSTCC tools/mxsimage.oHOSTCC tools/omapimage.oHOSTCC tools/pblimage.oHOSTCC tools/pbl_crc32.oHOSTCC tools/vybridimage.oHOSTCC tools/stm32image.oWRAP tools/lib/rc4.cHOSTCC tools/rkcommon.oHOSTCC tools/rkimage.oHOSTCC tools/rksd.oHOSTCC tools/rkspi.oHOSTCC tools/socfpgaimage.oWRAP tools/lib/crc16.cWRAP tools/lib/sha1.cWRAP tools/lib/sha256.cWRAP tools/common/hash.cHOSTCC tools/ublimage.oHOSTCC tools/zynqimage.oHOSTCC tools/zynqmpimage.oHOSTCC tools/zynqmpbif.oHOSTCC tools/libfdt/fdt.oHOSTCC tools/libfdt/fdt_ro.oHOSTCC tools/libfdt/fdt_wip.oHOSTCC tools/libfdt/fdt_sw.oHOSTCC tools/libfdt/fdt_rw.oHOSTCC tools/libfdt/fdt_strerror.oHOSTCC tools/libfdt/fdt_empty_tree.oHOSTCC tools/libfdt/fdt_addresses.oHOSTCC tools/libfdt/fdt_overlay.oHOSTCC tools/gpimage.oHOSTCC tools/gpimage-common.oHOSTCC tools/mtk_image.oHOSTCC tools/dumpimage.oHOSTCC tools/common/fdt_region.oHOSTCC tools/common/bootm.oHOSTCC tools/lib/crc32.oHOSTCC tools/lib/fdtdec_common.oHOSTCC tools/lib/fdtdec.oHOSTCC tools/common/image.oHOSTCC tools/lib/md5.oHOSTCC tools/lib/rc4.oHOSTCC tools/lib/crc16.oHOSTCC tools/lib/sha1.oHOSTCC tools/lib/sha256.oHOSTCC tools/common/hash.oHOSTCC tools/mkimage.oHOSTCC tools/proftoolHOSTCC tools/fdtgrep.oHOSTCC tools/spl_size_limitHOSTLD tools/mkenvimageHOSTLD tools/fdtgrepHOSTLD tools/dumpimageHOSTLD tools/mkimageLD arch/arm/cpu/built-in.oCC arch/arm/cpu/armv7/cache_v7.oAS arch/arm/cpu/armv7/cache_v7_asm.oCC arch/arm/cpu/armv7/cpu.oCC arch/arm/cpu/armv7/cp15.oAS arch/arm/lib/vectors.oCC arch/arm/cpu/armv7/s5p-common/cpu_info.oCC arch/arm/mach-exynos/soc.oCC board/samsung/common/board.oAS arch/arm/lib/crt0.oCC arch/arm/cpu/armv7/syslib.oAS arch/arm/lib/setjmp.oAS arch/arm/lib/relocate.oCC arch/arm/lib/bootm-fdt.oCC arch/arm/mach-exynos/clock.oCC arch/arm/cpu/armv7/s5p-common/timer.oCC arch/arm/mach-exynos/pinmux.oAS arch/arm/cpu/armv7/sctlr.oCC arch/arm/lib/bootm.oCC arch/arm/mach-exynos/power.oCC arch/arm/mach-exynos/system.oAS arch/arm/cpu/armv7/start.oCC arch/arm/cpu/armv7/s5p-common/sromc.oLD board/samsung/common/built-in.oCC arch/arm/cpu/armv7/s5p-common/pwm.oCC board/samsung/tiny4412/tiny4412.oLD cmd/arm/built-in.oCC cmd/boot.oCC cmd/bootm.oCC arch/arm/lib/zimage.oAS arch/arm/lib/memset.oLD board/samsung/tiny4412/built-in.oAS arch/arm/lib/memcpy.oCC cmd/help.oCC cmd/version.oCC cmd/blk_common.oLD arch/arm/cpu/armv7/s5p-common/built-in.oLD arch/arm/cpu/armv7/built-in.oCC arch/arm/lib/sections.oCC arch/arm/lib/stack.oCC cmd/source.oCC cmd/bdinfo.oCC cmd/blkcache.oCC cmd/bootefi.oCC cmd/bootmenu.oCC arch/arm/lib/interrupts.oCC common/init/board_init.oCC cmd/bootz.oCC common/main.oCC disk/part.oLD common/init/built-in.oLD arch/arm/mach-exynos/built-in.oCC common/exports.oLD drivers/adc/built-in.oCC common/hash.oLD drivers/ata/built-in.oLD drivers/dma/ti/built-in.oLD drivers/axi/built-in.oCC arch/arm/lib/reset.oCC drivers/block/blk-uclass.oLD drivers/dma/built-in.oCC arch/arm/lib/cache.oCC common/cli_hush.oCC cmd/cache.oCC disk/part_dos.oCC common/autoboot.oCC arch/arm/lib/cache-cp15.oCC disk/part_iso.oGZIP cmd/config_data.gzUPD cmd/config_data_size.hCC arch/arm/lib/psci-dt.oCC cmd/console.oCC disk/part_efi.oAS arch/arm/lib/ashldi3.oAS arch/arm/lib/ashrdi3.oCC cmd/dm.oCC arch/arm/lib/div0.oCC drivers/block/blkcache.oCC cmd/adtimg.oAS arch/arm/lib/div64.oCC common/board_f.oCC common/board_r.oAS arch/arm/lib/lib1funcs.oAS arch/arm/lib/lshrdi3.oAS arch/arm/lib/muldi3.oAS arch/arm/lib/uldivmod.oCC arch/arm/lib/eabi_compat.oLD drivers/block/built-in.oLD drivers/cache/built-in.oCC cmd/echo.oAS arch/arm/lib/crt0_arm_efi.oCC drivers/core/device.oCC arch/arm/lib/reloc_arm_efi.oLD arch/arm/lib/built-in.oAR arch/arm/lib/lib.aCC cmd/elf.oCC cmd/exit.oCC common/board_info.oCC drivers/gpio/gpio-uclass.oCC drivers/i2c/i2c-uclass.oLD drivers/net/mscc_eswitch/built-in.oLD drivers/net/ti/built-in.oCC drivers/gpio/s5p_gpio.oCC drivers/net/eth-phy-uclass.oCC cmd/ext4.oCC common/bootm.oLD drivers/net/built-in.oCC cmd/ext2.oLD disk/built-in.oCC drivers/core/fdtaddr.oCC cmd/fat.oCC cmd/fdt.oCC cmd/fs.oCC drivers/core/lists.oLD drivers/i2c/built-in.oCC drivers/core/root.oLD drivers/net/phy/built-in.oCC drivers/core/uclass.oLD drivers/power/built-in.oCC common/bootm_os.oLD drivers/power/battery/built-in.oLD drivers/power/domain/built-in.oLD drivers/power/fuel_gauge/built-in.oLD drivers/gpio/built-in.oLD drivers/power/mfd/built-in.oLD drivers/power/pmic/built-in.oCC common/fdt_support.oCC cmd/itest.oGZIP cmd/license_data.gzCC drivers/core/util.oCC drivers/core/device-remove.oUPD cmd/license_data_size.hCC cmd/load.oLD drivers/power/regulator/built-in.oCC drivers/core/simple-bus.oCC drivers/serial/serial-uclass.oCC drivers/core/dump.oCC drivers/serial/serial_s5p.oCC common/splash.oCC common/menu.oCC cmd/mem.oCC drivers/core/of_extra.oCC drivers/core/ofnode.oCC drivers/core/read_extra.oLD drivers/serial/built-in.oCC drivers/spi/spi-uclass.oCC cmd/mmc.oLD drivers/usb/cdns3/built-in.oCC cmd/legacy-mtd-utils.oLD drivers/usb/common/built-in.oCC common/cli_readline.oCC drivers/spi/spi-mem.oCC cmd/part.oCC common/cli_simple.oCC common/bouncebuf.oCC common/console.oLD drivers/spi/built-in.oCC common/dlmalloc.oLD drivers/usb/dwc3/built-in.oCC common/malloc_simple.oCC common/image.oLD drivers/core/built-in.oCC common/image-fdt.oCC drivers/crypto/fsl/sec.oLD drivers/crypto/rsa_mod_exp/built-in.oCC common/memsize.oCC cmd/pxe.oLD drivers/crypto/fsl/built-in.oLD drivers/crypto/built-in.oCC cmd/pxe_utils.oCC drivers/dfu/dfu.oCC drivers/input/key_matrix.oCC cmd/sf.oLD drivers/mailbox/built-in.oCC common/stdio.oLD drivers/memory/built-in.oCC drivers/input/input.oLD drivers/misc/built-in.oCC cmd/setexpr.oCC cmd/sysboot.oCC drivers/dfu/dfu_mmc.oCC common/image-android-dt.oCC common/cli.oCC drivers/mmc/mmc.oCC drivers/mmc/mmc-uclass.oCC drivers/input/keyboard-uclass.oCC common/command.oCC drivers/mmc/mmc_write.oCC cmd/test.oCC cmd/ximg.oLD drivers/input/built-in.oLD drivers/mtd/nand/built-in.oLD drivers/mtd/onenand/built-in.oCC drivers/mtd/spi/sf-uclass.oCC drivers/mtd/spi/sf_probe.oCC cmd/spl.oLD drivers/dfu/built-in.oCC drivers/mtd/spi/spi-nor-ids.oCC common/s_record.oCC common/xyzModem.oCC drivers/mmc/mmc_boot.oCC cmd/dfu.oCC drivers/mtd/spi/spi-nor-core.oCC drivers/mmc/dw_mmc.oLD drivers/usb/emul/built-in.oCC drivers/mmc/exynos_dw_mmc.oLD drivers/usb/eth/built-in.oCC drivers/mmc/rpmb.oLD drivers/usb/host/built-in.oCC drivers/mmc/sdhci.oCC cmd/gpt.oLD common/built-in.oCC drivers/mmc/s5p_sdhci.oCC cmd/nvedit.oLD drivers/usb/musb-new/built-in.oLD drivers/usb/musb/built-in.oLD drivers/phy/allwinner/built-in.oLD drivers/phy/marvell/built-in.oLD drivers/phy/rockchip/built-in.oLD drivers/reset/built-in.oLD drivers/pwm/built-in.oCC drivers/rtc/rtc-lib.oLD drivers/scsi/built-in.oLD drivers/smem/built-in.oLD drivers/soc/built-in.oLD drivers/sound/built-in.oLD drivers/spmi/built-in.oLD drivers/usb/phy/built-in.oUPD cmd/config_data_gz.hLD drivers/thermal/built-in.oLD drivers/ufs/built-in.oLD drivers/usb/ulpi/built-in.oLD drivers/video/bridge/built-in.oLD drivers/video/sunxi/built-in.oCC drivers/watchdog/s5p_wdt.oLD drivers/mmc/built-in.oLD drivers/video/built-in.oCC env/common.oUPD cmd/license_data_gz.hCC fs/ext4/ext4fs.oLD lib/crypto/built-in.oCC fs/fat/fat_write.oLD drivers/mtd/spi/spi-nor.oLD drivers/rtc/built-in.oCC lib/efi_driver/efi_uclass.oLD drivers/mtd/spi/built-in.oCC lib/efi_driver/efi_block_device.oLD drivers/mtd/built-in.oLD drivers/watchdog/built-in.oCC lib/efi_loader/efi_bootmgr.oLD drivers/built-in.oCC cmd/config.oCC env/env.oCC fs/fs.oCC lib/efi_loader/efi_boottime.oLD lib/efi_driver/built-in.oCC cmd/license.oCC fs/fs_internal.oCC lib/libfdt/fdt.oCC fs/ext4/ext4_common.oCC env/attr.oLD cmd/built-in.oCC lib/libfdt/fdt_ro.oCC net/arp.oCC env/flags.oCC env/callback.oCC net/eth-uclass.oCC env/mmc.oCC net/eth_common.oCC fs/ext4/dev.oCC fs/ext4/ext4_write.oLD env/built-in.oCC net/net.oCC lib/zlib/zlib.oCC lib/libfdt/fdt_wip.oCC lib/charset.oCC lib/libfdt/fdt_strerror.oCC lib/libfdt/fdt_sw.oCC lib/crc8.oCC lib/crc16.oLD net/built-in.oLD fs/fat/built-in.oCC lib/smbios.oCC lib/libfdt/fdt_rw.oCC lib/libfdt/fdt_empty_tree.oCC lib/libfdt/fdt_addresses.oCC fs/ext4/ext4_journal.oCC fs/ext4/crc16.oCC lib/efi_loader/efi_console.oCC lib/ldiv.oCC lib/efi_loader/efi_device_path.oCC lib/efi_loader/efi_device_path_to_text.oCC lib/net_utils.oCC lib/efi_loader/efi_device_path_utilities.oCC lib/rc4.oCC lib/efi_loader/efi_file.oLD lib/libfdt/built-in.oCC lib/sha256.oCC lib/efi_loader/efi_hii.oCC lib/list_sort.oLD fs/ext4/built-in.oLD fs/built-in.oCC lib/efi_loader/efi_hii_config.oCC lib/gunzip.oLD lib/zlib/built-in.oCC lib/fdtdec_common.oCC lib/fdtdec.oCC lib/efi_loader/efi_image_loader.oCC lib/efi_loader/efi_memory.oCC lib/qsort.oCC lib/efi_loader/efi_root_node.oCC lib/efi_loader/efi_runtime.oCC lib/hashtable.oCC lib/errno.oCC lib/display_options.oCC lib/efi_loader/efi_setup.oCC lib/efi_loader/efi_unicode_collation.oCC lib/crc32.oCC lib/efi_loader/efi_variable.oCC lib/ctype.oCC lib/efi_loader/efi_watchdog.oCC lib/div64.oCC lib/hang.oCC lib/linux_compat.oCC lib/linux_string.oCC lib/lmb.oCC lib/membuff.oCC lib/slre.oCC lib/efi_loader/efi_disk.oCC lib/string.oCC lib/efi_loader/efi_net.oCC lib/tables_csum.oCC lib/time.oCC lib/efi_loader/efi_smbios.oCC lib/efi_loader/efi_signature.oCC lib/hexdump.oCC lib/efi_loader/helloworld.oCC lib/uuid.oAS lib/efi_loader/efi_crt0.oCC lib/rand.oCC lib/efi_loader/efi_reloc.oCC lib/panic.oCC lib/efi_loader/efi_freestanding.oLD lib/efi_loader/built-in.oCC lib/vsprintf.oCC lib/strto.oCC lib/date.oCC lib/elf.oLD lib/efi_loader/helloworld_efi.soOBJCOPY lib/efi_loader/helloworld.efiLD lib/built-in.oCC examples/standalone/hello_world.oCC examples/standalone/stubs.oLD examples/standalone/libstubs.oLD examples/standalone/hello_worldOBJCOPY examples/standalone/hello_world.srecOBJCOPY examples/standalone/hello_world.binLD u-bootOBJCOPY u-boot.srecOBJCOPY u-boot-nodtb.binSYM u-boot.symDTC arch/arm/dts/exynos4210-origen.dtbDTC arch/arm/dts/exynos4210-smdkv310.dtbDTC arch/arm/dts/exynos4210-universal_c210.dtbDTC arch/arm/dts/exynos4210-trats.dtbDTC arch/arm/dts/exynos4412-tiny4412.dtbDTC arch/arm/dts/exynos4412-trats2.dtbDTC arch/arm/dts/exynos4412-odroid.dtbSHIPPED dts/dt.dtbFDTGREP dts/dt-spl.dtbCAT u-boot-dtb.binCOPY u-boot.dtbCOPY u-boot.binCC spl/./lib/asm-offsets.sCC spl/./arch/arm/lib/asm-offsets.sLDS spl/u-boot-spl.ldsUPD spl/./include/generated/asm-offsets.hUPD spl/./include/generated/generic-asm-offsets.hLD spl/arch/arm/cpu/built-in.oCC spl/arch/arm/mach-exynos/soc.oLD spl/board/samsung/common/built-in.oCC spl/common/init/board_init.oAS spl/arch/arm/lib/vectors.oLD spl/board/samsung/tiny4412/built-in.oHOSTCC spl/board/samsung/tiny4412/tools/mktiny4412splCC spl/arch/arm/cpu/armv7/s5p-common/cpu_info.oLD spl/dts/built-in.oCC spl/drivers/block/blk_legacy.oCC spl/fs/fs_internal.oCC spl/drivers/gpio/s5p_gpio.oAS spl/arch/arm/lib/crt0.oLD spl/common/init/built-in.oCC spl/arch/arm/mach-exynos/clock.oAS spl/arch/arm/lib/setjmp.oCC spl/arch/arm/lib/bootm-fdt.oCC spl/arch/arm/cpu/armv7/cache_v7.oLD spl/arch/arm/cpu/armv7/s5p-common/built-in.oLD spl/drivers/mtd/built-in.oAS spl/arch/arm/lib/memset.oAS spl/arch/arm/cpu/armv7/cache_v7_asm.oLD spl/fs/built-in.oCC spl/arch/arm/cpu/armv7/cpu.oAS spl/arch/arm/lib/memcpy.oCC spl/arch/arm/mach-exynos/pinmux.oLD spl/drivers/gpio/built-in.oCC spl/arch/arm/cpu/armv7/cp15.oCC spl/arch/arm/lib/sections.oLD spl/drivers/block/built-in.oCC spl/arch/arm/mach-exynos/power.oCC spl/arch/arm/mach-exynos/system.oCC spl/drivers/serial/serial.oCC spl/arch/arm/lib/stack.oCC spl/arch/arm/cpu/armv7/syslib.oLD spl/drivers/soc/built-in.oCC spl/arch/arm/lib/interrupts.oAS spl/arch/arm/cpu/armv7/start.oCC spl/arch/arm/mach-exynos/dmc_init_exynos4.oCC spl/arch/arm/mach-exynos/clock_init_exynos4.oLD spl/arch/arm/cpu/armv7/built-in.oCC spl/arch/arm/mach-exynos/spl_boot.oCC spl/drivers/serial/serial_s5p.oCC spl/arch/arm/mach-exynos/tzpc.oCC spl/arch/arm/lib/reset.oCC spl/arch/arm/lib/cache.oCC spl/arch/arm/mach-exynos/lowlevel_init.oCC spl/arch/arm/lib/cache-cp15.oCC spl/arch/arm/lib/psci-dt.oAS spl/arch/arm/lib/ashldi3.oAS spl/arch/arm/lib/ashrdi3.oLD spl/drivers/serial/built-in.oLD spl/drivers/built-in.oCC spl/arch/arm/lib/div0.oAS spl/arch/arm/lib/div64.oAS spl/arch/arm/lib/lib1funcs.oAS spl/arch/arm/lib/lshrdi3.oAS spl/arch/arm/lib/muldi3.oAS spl/arch/arm/lib/uldivmod.oCC spl/arch/arm/lib/eabi_compat.oAS spl/arch/arm/lib/crt0_arm_efi.oCC spl/arch/arm/lib/reloc_arm_efi.oLD spl/arch/arm/mach-exynos/built-in.oLD spl/arch/arm/lib/built-in.oAR spl/arch/arm/lib/lib.aLD spl/u-boot-splOBJCOPY spl/u-boot-spl-nodtb.binCOPY spl/u-boot-spl.bin
./spl/board/samsung/tiny4412/tools/mktiny4412spl spl/u-boot-spl.bin spl/tiny4412-spl.binCFGCHK u-boot.cfg
3.3 下载
SD卡烧录工具:https://xkwy2018.cn/tiny4412/u-boot/tools/tiny4412Fusing.sh
注意:执行此操作会擦除SD卡,请注意备份SD卡的文件。
$ wget https://xkwy2018.cn/tiny4412/u-boot/tools/tiny4412Fusing.sh
--2020-07-25 12:33:04-- https://xkwy2018.cn/tiny4412/u-boot/tools/tiny4412Fusing.sh
Resolving xkwy2018.cn (xkwy2018.cn)... 64.64.240.120
Connecting to xkwy2018.cn (xkwy2018.cn)|64.64.240.120|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1466 (1.4K) [text/x-sh]
Saving to: ‘tiny4412Fusing.sh’tiny4412Fusing.sh 100%[====================================================>] 1.43K --.-KB/s in 0s 2020-07-25 12:33:09 (154 MB/s) - ‘tiny4412Fusing.sh’ saved [1466/1466]$ chmod +x tiny4412Fusing.sh
$ ./tiny4412Fusing.sh -h
Usage: ./tiny4412Fusing.sh [-q] [-e] [-D <SD Reader''s device file>] [-d <u-boot source directory>]
$ ./tiny4412Fusing.sh -e -D /dev/mmcblk0 -d $PWD
erase count: 8191
u-boot: /dev/shm/u-boot-2020.07
/dev/mmcblk0: 120GiB
3809280 bytes (3.8 MB, 3.6 MiB) copied, 7 s, 544 kB/s
8191+0 records in
8191+0 records out
4193792 bytes (4.2 MB, 4.0 MiB) copied, 7.67944 s, 546 kB/s
44+0 records in
44+0 records out
22528 bytes (23 kB, 22 KiB) copied, 0.072426 s, 311 kB/s
679+1 records in
679+1 records out
347739 bytes (348 kB, 340 KiB) copied, 0.660174 s, 527 kB/s
3.4 SD卡启动测试
将SD卡插入开发板,将开发板启动方式开关拨到SD卡模式,上电,将会打印如下信息:
<debug_uart> U-Boot 2020.07 (Jul 25 2020 - 12:39:46 +0800) for Tiny4412CPU: Exynos4412 @ 1.4 GHz
Model: xkwy Tiny4412 based on Exynos4412
Type: 1506
DRAM: 1 GiB
MMC: SAMSUNG SDHCI: 2, EXYNOS DWMMC: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environmentIn: serial
Out: serial
Err: serial
Boot device: MMC(2)
Hit any key to stop autoboot: 0
Tiny4412 #
3.5 查看板子信息
Tiny4412 # bdinfo
arch_number = 0x00001200
boot_params = 0x40000100
DRAM bank = 0x00000000
-> start = 0x40000000
-> size = 0x40000000
baudrate = 921600 bps
TLB addr = 0x7fff0000
relocaddr = 0x7ff8c000
reloc off = 0x3ff8c000
irq_sp = 0x7af78a10
sp start = 0x7af78a00
Board Type = 5382
Early malloc usage: f0 / 400
fdt_blob = 0x7af78a20
Build = 32-bit
Tiny4412 #
3.6 查看SD卡信息
Tiny4412 # mmc rescan
Tiny4412 # mmc dev 2
switch to partitions #0, OK
mmc2 is current device
Tiny4412 # mmc info
Device: SAMSUNG SDHCI
Manufacturer ID: 1b
OEM: 534d
Name: BD4QT
Bus Speed: 50000000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 119.3 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
Tiny4412 #
3.7 查看eMMC信息
Tiny4412 # mmc rescan
Tiny4412 # mmc dev 0
switch to partitions #0, OK
mmc0(part 0) is current device
Tiny4412 # mmc info
Device: EXYNOS DWMMC
Manufacturer ID: 15
OEM: 100
Name: M8G2F
Bus Speed: 52000000
Mode: MMC High Speed (52MHz)
Rd Block Len: 512
MMC version 4.4.1
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 8-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.4 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH
Boot area 0 is not write protected
Boot area 1 is not write protected
Tiny4412 #
3.8 eMMC启动
3.8.1 eMMC 配置
配置boot分区为4MB,配置boot_bus_width为1。
Tiny4412 # mmc bootpart-resize 0 4 4
Tiny4412 # mmc bootbus 0 1 0 0
Tiny4412 #
3.8.2 从SD卡读取U-Boot镜像,并烧录到eMMC BOOT1分区
Tiny4412 # mmc rescan
Tiny4412 # mmc dev 2
switch to partitions #0, OK
mmc2 is current device
Tiny4412 # mmc read 42000000 1 2000MMC read: dev # 2, block # 1, count 8192 ... 8192 blocks read: OK
Tiny4412 # mmc dev 0
switch to partitions #0, OK
mmc0(part 0) is current device
Tiny4412 # mmc partconf 0 1 1 1
Tiny4412 # mmc erase 0 2000MMC erase: dev # 0, block # 0, count 8192 ... 8192 blocks erased: OK
Tiny4412 # mmc write 42000000 0 2000MMC write: dev # 0, block # 0, count 8192 ... 8192 blocks written: OK
Tiny4412 #
3.8.3 eMMC启动测试
将开发板启动方式拨码开关拨到NAND或eMMC模式,按下复位键或重启上电,将会打印如下信息:
(可以拔掉SD卡测试一下)
<debug_uart> U-Boot 2020.07 (Jul 25 2020 - 12:39:46 +0800) for Tiny4412CPU: Exynos4412 @ 1.4 GHz
Model: xkwy Tiny4412 based on Exynos4412
Type: 1506
DRAM: 1 GiB
MMC: sdhci@12530000 - probe failed: -19Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
Boot device: MMC(0)
Hit any key to stop autoboot: 0
Tiny4412 #
4 附录
4.1 交叉编译工具链
下载地址:https://xkwy2018.cn/gcc/
版本:gcc version 10.1.0 (xkwy-gcc-20200517)
$ arm-xkwy-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-xkwy-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/xkwy-gcc/20200517/libexec/gcc/arm-xkwy-linux-gnueabi/10.1.0/lto-wrapper
Target: arm-xkwy-linux-gnueabi
Configured with: ../gcc-10.1.0/configure --prefix=/opt/xkwy-gcc/20200517 --target=arm-xkwy-linux-gnueabi --with-pkgversion=xkwy-gcc-20200517 --with-bugurl='https://xkwy2018.cn/gcc/bug-report.php?pkgversion=xkwy-gcc-20200517' --with-sysroot=/opt/xkwy-gcc/20200517/arm-xkwy-linux-gnueabi --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=softfp --enable-threads=posix --quiet --silent
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.1.0 (xkwy-gcc-20200517)
4.1 源码
【U-Boot 2020.07原始源码】官方下载地址:ftp://ftp.denx.de/pub/u-boot/u-boot-2020.07.tar.bz2
【U-Boot 2020.07原始源码】xkwy2018.cn镜像地址:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07.tar.bz2
【tin4412 patch】下载地址:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07-tiny4412.patch
【已打好patch源码包】下载地址:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/u-boot-2020.07-tiny4412.tar.xz
4.2 已编译好的二进制镜像
下载地址:https://xkwy2018.cn/tiny4412/u-boot/2020.07-tiny4412/build/
烧录到SD卡只需要u-boot-dtb.bin和spl/tiny4412-spl.bin,注意下载后保持文件相对位置。
4.3 SD卡烧录工具
下载地址:https://xkwy2018.cn/tiny4412/u-boot/tools/tiny4412Fusing.sh
4.3.1 使用方法
- -h 查看帮助信息
- -q 安静模式,执行烧录时不打印过程信息
- -e 烧录前彻底擦除4MB空间,适用于第一次烧录
- -D <SD Reader's device file> 指定SD卡设备文件,默认为/dev/mmcblk0,实际SD卡设备文件名可使用lsblk命令查看
- -d <u-boot source directory> 指定U-Boot源码目录,默认为/works/u-boot,脚本会向该目录找u-boot-dtb.bin和spl/tiny4412-spl.bin
4.4 开发板原理图
下载地址:https://xkwy2018.cn/tiny4412/Schematic-PCB/
tiny4412移植U-Boot 2020.07相关推荐
- 2020.07 学习日记
废话 寒假到现在,在家里玩了5个月,来学校又玩了大半个月.以为会做点东西了就什么都懂了,竟然没做准备就投了字节秋招提前批.结果被挂了之后,又被捞起来面试.可以说十分幸运了,但机会都是留给有准备的人 2 ...
- 第十弹:网络公开课,免费学习资源,2020.07.05更新
第十弹:网络公开课,免费学习资源,2020.07.05更新 按照个人兴趣整理的网络公开课资源导航网址:http://www.trochilidaetechnology.com/ 以下为[网络公开课]领 ...
- 猎人手游最新服务器,【猎人mm服务端】2020.07月升级經典手工制作搭建网游服务器...
[猎人mm服务端]2020.07月升级經典手工制作搭建网游服务器 修改标的物的设置,并修改标的物的销售和价格.修改精制道具的价格,并与掉落的道具统一. 无人岛的经验值增加了紫圣诞鹿(经验值是圣诞怪物的 ...
- 312戳气球——力扣算法系列2020.07.19 Python
第25天 2020.07.19 周日 难度系数:困难 题目:有n个气球,编号为0到n-1,每个气球上都标有一个数字,这些数字存在数组nums中. 现在要求你戳破所有的气球.如果你戳破气球i,就可以获得 ...
- tiny4412移植uboot-2019-01(三)
开发环境:win7 64位 + Ubuntu16.04 64位 开发板:tiny4412ADK + S700 + 4GB eMMC + 1G DDR3 工具链:友善之臂提供的 arm-linux-g ...
- tiny4412搭建linux开发环境,[Tiny4412] 移植 Linux4.4 到 Tiny4412 开发板上
一. 前言 一直以来都是基于 Linux-2.6 内核学习嵌入式,但是工作之后发现,主流的 kernel 早已经不再使用 platform device 结构去描述设备信息了,而是换成了更为简洁的 d ...
- 安富莱v6开发板网口通讯_安富莱嵌入式周报第170期:2020.07.202020.07.26
说明: 谢谢大家的关注,继续为大家盘点上周精彩内容. 1.沁恒推出带USB3.0,千兆以太网,光纤接口的RISC内核单片机CH569 CH569/565 微控制器使用 RISC-V3A 内核, ...
- (4)tiny4412移植uboot_2018_07
开发板:tiny4412(1611) 编译器: arm-tiny4412-linux-gnueabi-gcc (gcc version 6.1) 说明:本次移植希望在新版uboot支持sd卡启动方式 ...
- [u-boot 2020.07] README
挖坑,难填! 摘要: 状态: 在哪里获得帮助: 在哪里获取源代码: 我们来自哪里: 名称和拼写: 版本控制: 目录层次结构: 软件配置: 处理器架构和板类型的选择: 沙盒环境(Sandbox): Bo ...
- tiny4412移植tslib库
1.将tslib-1.4.tar.gz拷贝到虚拟机某个路径进行解压 2.进入解压路径tslib 3.执行#./autogen.sh 如果提示:./autogen.sh: 4: ./autogen.sh ...
最新文章
- 扫描PDF转换成word文档如何操作
- Bluetooth Low Energy 嗅探
- Java字符串格式化
- Swift - static和class的使用
- 使用神经网络拟合曲线(MATLAB/Python)
- ASP.NET2.0中配置文件的加密与解密
- 你知道自己适合做程序员吗?
- 解决火狐https问题 安全连接问题
- linux目标文件链接命令,ld 命令:将目标文件链接为可执行程序 - dute.org
- python︱mysql数据库连接——pyodbc
- 慕课软件工程(第二十章.ISO9000标准)
- 电机选型计算电机转动惯量、启动转矩和额定转速
- 软件测试 - Linux和数据库
- android+关闭屏幕旋转,Android:即使设备自动旋转屏幕关闭,如何强制反向纵向?...
- 拯救win10系统,如何开机进入DOS等删除恶意软件
- java开发基础知识学习总结
- Flutter pageview indicator指示器实现
- Victor ti99不错
- 没有乌云,天就一定晴了么
- PLSQL Developer13.0.4安装破解教程
热门文章
- FOI冬令营 Day1
- python断言语句的语法_Python断言教程
- assert:python断言报错语句
- win10安装python27_《win10python27安装教程》 win10怎么安装python
- java gdal生成彩色tiff文件 并压缩大小
- 用R的igraph包来画蛋白质互作网络图 | PPI | protein protein interaction network | Cytoscape...
- 基因家族分析-蛋白互作网络分析
- XTUOJ-1277-Triangle
- 大陆身份证号码正则验证js脚本
- 电子信息业取得长足发展 效益与质量同步提升