iTop4412 uboot-2019.2移植之杨帆启航(一)

一、环境准备

1.1操作系统

本人使用Debian9 x64和VMwae作为开发环境,因为熟悉该环境,能同时运行32位和64位程序,能直接利用各种命令访问硬件。

1.2编译系统

我用的编译器为Linaro,建议JLINK用户使用arm-eabi版本,链接地址为(https://www.linaro.org/downloads/),

arm-compile.png

1.3 UBOOT

我采用最u-boot-2019.1版,对版本唯一要求就是要用现在的项目结构,不然以后还得熟悉重构后的项目结构。下载地址(http://ftp.denx.de/pub/u-boot/).

二、初次编译

2.1目的

检查环境正常,只有编译通过了,才能做其他事情。想尽一切办法,让程序编译通过。

2.2过程

  1. 修改顶层Makefile,添加编译器前缀,例如CROSS_COMPILE := arm-eabi-
  2. 执行make origen_defconfig
  3. 执行make menuconfig
  4. 执行make -j4
  5. 执行make clean
  6. 执行make distclean

2.3 问题

如果遇到问题,请认真阅读错误信息(看不懂找有道),基本上都是某些库没安装,安装上就好了。

三、拷贝模板

3.1 默认配置

在configs目录下有众多形如xxx_defconfig的文件,存放默认编译选项。make origen_defconfig就是将origen_defconfig写入到.config文件中。

我们需要创建自己的配置文件,取名itop4412_defconfig。复制origen_defconfig,并把内容中的ORIGEN替换为ITOP4412,注意大小写。

CONFIG_ARM=y
CONFIG_ARCH_EXYNOS=y
CONFIG_SYS_TEXT_BASE=0x43E00000
CONFIG_ARCH_EXYNOS4=y
CONFIG_TARGET_ITOP4412=y
CONFIG_SPL=y
CONFIG_IDENT_STRING=" for ITOP4412"
CONFIG_DISTRO_DEFAULTS=y
# CONFIG_USE_BOOTCOMMAND is not set
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_SYS_CONSOLE_INFO_QUIET=y
# CONFIG_SPL_FRAMEWORK is not set
CONFIG_SYS_PROMPT="ITOP4412 # "
# CONFIG_CMD_XIMG is not set
CONFIG_CMD_THOR_DOWNLOAD=y
CONFIG_CMD_DFU=y
CONFIG_CMD_GPT=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB_MASS_STORAGE=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_DEFAULT_DEVICE_TREE="exynos4412-itop4412"
CONFIG_DFU_MMC=y
CONFIG_DM_MMC=y
CONFIG_MMC_DW=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_SDMA=y
CONFIG_MMC_SDHCI_S5P=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Samsung"
CONFIG_USB_GADGET_VENDOR_NUM=0x04e8
CONFIG_USB_GADGET_PRODUCT_NUM=0x6601
CONFIG_USB_GADGET_DWC2_OTG=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_USB_FUNCTION_THOR=y
# CONFIG_REGEX is not set

执行make itop4412_defconfigmake -j4,看下缺什么。

3.2 板级文件

拷贝board/samsung/origen到board/samsung/itop4412。


文件结构.png

跟ORIGEN的结构差不了多少,只是进行了字符串替换,但tools目录下的文件,需要用我提供的。

3.3 文件关联

修改arch/arm/mach-exynos/Kconfig。


菜单添加.png

3.4 自定配置

执行make -j2,会报错误:include/config.h:5:10: fatal error: configs/itop4412.h: No such file or directory

我们需要添加文件include/configs/itop4412.h,内容来自include/configs/origen.h,并且还需要处理。

 #ifndef __CONFIG_ITOP4412_H
#define __CONFIG_ITOP4412_H

#include <configs/exynos4-common.h>

/* High Level Configuration Options */
#define CONFIG_EXYNOS4412                   1   /* 添加 which is a EXYNOS4412 SoC */
#define CONFIG_ITOP4412                     1   /* 添加 working with ITOP4412*/

#define CONFIG_SYS_DCACHE_OFF           1

/* ITOP4412 has 4 bank of DRAM */
#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 + 0x6000000)
#define CONFIG_SYS_LOAD_ADDR            (CONFIG_SYS_SDRAM_BASE + 0x3E00000)

#define CONFIG_MACH_TYPE                MACH_TYPE_ITOP4412  /*机器ID,会报错*/

/* select serial console configuration */

/* 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_SLEEP                 0x00000BAD
#define S5P_CHECK_DIDLE                 0xBAD00000
#define S5P_CHECK_LPA                   0xABAD0000

/* MMC SPL */
#define COPY_BL2_FNPTR_ADDR     0x02020030
#define CONFIG_SPL_TEXT_BASE    0x02023400  /*修改,不管你是什么版本的SPL1,SPL2都被SPL1加载至0x02023400*/

#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} "
/* MIU (Memory Interleaving Unit) */
#define CONFIG_MIU_2BIT_21_7_INTERLEAVED

#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 BL1*/
#define CONFIG_ENV_OFFSET                   (RESERVE_BLOCK_SIZE + BL1_SIZE)

#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)/512)
#define BL2_SIZE_BLOC_COUNT         (COPY_BL2_SIZE/512)

#endif  /* __CONFIG_H */

大胆修改该配置,锻炼自己!日后遇到配置错误,皆可自行解决。现在会报错误:
MACH_TYPE_ITOP4412’ undeclared

3.5 机器类型

执行grep "MACH_TYPE_ORIGEN" . -nR,可找到arch/arm/include/asm/mach-types.h:3405:#define MACH_TYPE_ORIGEN 3455

因此在文件末尾添加#define MACH_TYPE_ITOP4412 5115

不知这个是做什么的,故依葫芦画瓢,但需要注意该值,他是个定时炸弹。

3.6 设备树

出现错误:No rule to make target 'arch/arm/dts/exynos4412-itop4412.dts', needed by 'arch/arm/dts/exynos4412-itop4412.dtb'

暂时不知设备树干嘛的,直接拷贝arch/arm/dts/exynos4412-odroid.dts,修改下里面内容。怎么改呢?字符串替换啊。

3.7 符号未定义

现在报错误:arch/arm/mach-exynos/lowlevel_init.c:217 undefined reference to `system_clock_init

先鼓起勇气看看Makefile吧!

# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (C) 2009 Samsung Electronics
# Minkyu Kang <mk7.kang@samsung.com>

obj-y   += soc.o
obj-$(CONFIG_CPU_V7A) += clock.o pinmux.o power.o system.o
obj-$(CONFIG_ARM64)     += mmu-arm64.o

obj-$(CONFIG_EXYNOS5420)        += sec_boot.o

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_exynos4412.o clock_init_exynos4412.o
obj-y   += spl_boot.o tzpc.o
obj-y   += lowlevel_init.o
endif

原来是因为我们把宏CONFIG_EXYNOS4210改为了CONFIG_EXYNOS4412,依葫芦画瓢,创建新的环境变量,并且创建相应的原文件dmc_init_exynos4412.oc, clock_init_exynos4412.c

浏览上述两个源文件dmc_init_exynos4412.oc, clock_init_exynos4412.c,发现出现了头文件exynos4_setup.h。把它该为exynos4412_setup.h,并创建该头文件,记得进行字符串替换,怎么替换自行研究。

3.8 符号校验

继续执行make -j4,又报错误:

  CFG     u-boot.cfg
  CFGCHK  u-boot.cfg
Error: You must add new CONFIG options using Kconfig
The following new ad-hoc CONFIG options were detected:
CONFIG_EXYNOS4412
CONFIG_ITOP4412

经过百度,终于明白了,是校验不通过!因此我们需要去掉校验,CFG u-boot.cfg,这句话是个提示,去全局Makefile找找。

注释掉下面语句:

 909 cfg: u-boot.cfg
 910
 911 #quiet_cmd_cfgcheck = CFGCHK  $2
 912 #cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
 913 #        $(srctree)/scripts/config_whitelist.txt $(srctree)

现在全部错误已经解决,模板创建成功。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容