iTop4412 uboot-2019.2移植之楊帆啟航(一)

一、環(huán)境準(zhǔn)備

1.1操作系統(tǒng)

本人使用Debian9 x64和VMwae作為開發(fā)環(huán)境盗痒,因?yàn)槭煜ぴ摥h(huán)境横漏,能同時(shí)運(yùn)行32位和64位程序谨设,能直接利用各種命令訪問硬件。

1.2編譯系統(tǒng)

我用的編譯器為Linaro缎浇,建議JLINK用戶使用arm-eabi版本扎拣,鏈接地址為(https://www.linaro.org/downloads/),

arm-compile.png

1.3 UBOOT

我采用最u-boot-2019.1版素跺,對(duì)版本唯一要求就是要用現(xiàn)在的項(xiàng)目結(jié)構(gòu)二蓝,不然以后還得熟悉重構(gòu)后的項(xiàng)目結(jié)構(gòu)。下載地址(http://ftp.denx.de/pub/u-boot/).

二指厌、初次編譯

2.1目的

檢查環(huán)境正常刊愚,只有編譯通過了,才能做其他事情踩验。想盡一切辦法鸥诽,讓程序編譯通過。

2.2過程

  1. 修改頂層Makefile箕憾,添加編譯器前綴牡借,例如CROSS_COMPILE := arm-eabi-
  2. 執(zhí)行make origen_defconfig厕九。
  3. 執(zhí)行make menuconfig蓖捶。
  4. 執(zhí)行make -j4
  5. 執(zhí)行make clean
  6. 執(zhí)行make distclean

2.3 問題

如果遇到問題扁远,請(qǐng)認(rèn)真閱讀錯(cuò)誤信息(看不懂找有道),基本上都是某些庫沒安裝刻像,安裝上就好了畅买。

三、拷貝模板

3.1 默認(rèn)配置

在configs目錄下有眾多形如xxx_defconfig的文件细睡,存放默認(rèn)編譯選項(xiàng)谷羞。make origen_defconfig就是將origen_defconfig寫入到.config文件中。

我們需要?jiǎng)?chuàng)建自己的配置文件,取名itop4412_defconfig湃缎。復(fù)制origen_defconfig犀填,并把內(nèi)容中的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

執(zhí)行make itop4412_defconfigmake -j4九巡,看下缺什么。

3.2 板級(jí)文件

拷貝board/samsung/origen到board/samsung/itop4412蹂季。


文件結(jié)構(gòu).png

跟ORIGEN的結(jié)構(gòu)差不了多少冕广,只是進(jìn)行了字符串替換,但tools目錄下的文件偿洁,需要用我提供的撒汉。

3.3 文件關(guān)聯(lián)

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


菜單添加.png

3.4 自定配置

執(zhí)行make -j2涕滋,會(huì)報(bào)錯(cuò)誤:include/config.h:5:10: fatal error: configs/itop4412.h: No such file or directory睬辐。

我們需要添加文件include/configs/itop4412.h,內(nèi)容來自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  /*機(jī)器ID,會(huì)報(bào)錯(cuò)*/

/* 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 */

大膽修改該配置,鍛煉自己黔酥!日后遇到配置錯(cuò)誤藻三,皆可自行解決。現(xiàn)在會(huì)報(bào)錯(cuò)誤:
MACH_TYPE_ITOP4412’ undeclared跪者。

3.5 機(jī)器類型

執(zhí)行grep "MACH_TYPE_ORIGEN" . -nR棵帽,可找到arch/arm/include/asm/mach-types.h:3405:#define MACH_TYPE_ORIGEN 3455

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

不知這個(gè)是做什么的逗概,故依葫蘆畫瓢,但需要注意該值忘衍,他是個(gè)定時(shí)炸彈逾苫。

3.6 設(shè)備樹

出現(xiàn)錯(cuò)誤:No rule to make target 'arch/arm/dts/exynos4412-itop4412.dts', needed by 'arch/arm/dts/exynos4412-itop4412.dtb'

暫時(shí)不知設(shè)備樹干嘛的,直接拷貝arch/arm/dts/exynos4412-odroid.dts枚钓,修改下里面內(nèi)容铅搓。怎么改呢?字符串替換啊搀捷。

3.7 符號(hào)未定義

現(xiàn)在報(bào)錯(cuò)誤: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

原來是因?yàn)槲覀儼押闏ONFIG_EXYNOS4210改為了CONFIG_EXYNOS4412氢烘,依葫蘆畫瓢怀偷,創(chuàng)建新的環(huán)境變量,并且創(chuàng)建相應(yīng)的原文件dmc_init_exynos4412.oc, clock_init_exynos4412.c播玖。

瀏覽上述兩個(gè)源文件dmc_init_exynos4412.oc, clock_init_exynos4412.c椎工,發(fā)現(xiàn)出現(xiàn)了頭文件exynos4_setup.h。把它該為exynos4412_setup.h黎棠,并創(chuàng)建該頭文件晋渺,記得進(jìn)行字符串替換,怎么替換自行研究脓斩。

3.8 符號(hào)校驗(yàn)

繼續(xù)執(zhí)行make -j4木西,又報(bào)錯(cuò)誤:

  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

經(jīng)過百度,終于明白了随静,是校驗(yàn)不通過八千!因此我們需要去掉校驗(yàn),CFG u-boot.cfg燎猛,這句話是個(gè)提示恋捆,去全局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)

現(xiàn)在全部錯(cuò)誤已經(jīng)解決重绷,模板創(chuàng)建成功沸停。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昭卓,隨后出現(xiàn)的幾起案子愤钾,更是在濱河造成了極大的恐慌,老刑警劉巖候醒,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件能颁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡倒淫,警方通過查閱死者的電腦和手機(jī)伙菊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敌土,“玉大人镜硕,你說我怎么就攤上這事》蹈桑” “怎么了谦疾?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犬金。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么晚顷? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任峰伙,我火速辦了婚禮,結(jié)果婚禮上该默,老公的妹妹穿的比我還像新娘瞳氓。我一直安慰自己,他們只是感情好栓袖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布匣摘。 她就那樣靜靜地躺著,像睡著了一般裹刮。 火紅的嫁衣襯著肌膚如雪音榜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天捧弃,我揣著相機(jī)與錄音赠叼,去河邊找鬼。 笑死违霞,一個(gè)胖子當(dāng)著我的面吹牛嘴办,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播买鸽,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涧郊,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了眼五?” 一聲冷哼從身側(cè)響起妆艘,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弹砚,沒想到半個(gè)月后双仍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桌吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年朱沃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茅诱。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逗物,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑟俭,到底是詐尸還是另有隱情翎卓,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布摆寄,位于F島的核電站失暴,受9級(jí)特大地震影響坯门,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逗扒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一古戴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矩肩,春花似錦现恼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刽酱,卻和暖如春喳逛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肛跌。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工艺配, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衍慎。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓转唉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稳捆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赠法,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容