上一节:README分析
Platform:itop4412
U-boot:u-boot-2017.11
###2018/11/9###
因是第一次进行移植,有很多问题,目前只是实现了串口的输出,是否可以引导uImage还未知,我的知识储备还是不够,所有如果有更好的资源,也请留言指导下,谢谢!
我会继续研究下去~~
###2018/11/7###
有的文件可能不需要加,也不是很懂;
可以优先移植linux;
我的linux是3.0的,不支持uimage,移植u-boot后无法引导kernel img
###2018/10/26###
最近在看uboot,开发板提供的是较早前的uboot版本,然后借鉴网上的一些教程,摸着石头过河
参考的文章
下面的资料都是有续集的
基于tiny4412的u-boot移植(一)
iTop-4412精英版的u-boot-2017.11移植教程
基于iTop-4412的U-Boot 2017移植
移植u-boot-2014.4到S5PV210/TQ210(完整)
Makefile文件交叉编译环境
在Makefile中添加交叉编译环境,方便后续编译:
CROSS_COMPILE = arm-linux-gnueabi- (根据情况修改编译器名字)
在编译时遇到的问题
Error: You must add new CONFIG options using Kconfig
The following new ad-hoc CONFIG options were detected:
CONFIG_ITOP4412
Please add these via Kconfig instead. Find a suitable Kconfig
file and add a ‘config’ or ‘menuconfig’ option.
Makefile:871: recipe for target ‘all’ failed
make: *** [all] Error 1
找打871行左右,对下面代码进行注释,就可以正常编译了
quiet_cmd_cfgcheck = CFGCHK $2
cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
<span> </span>$(srctree)/scripts/config_whitelist.txt $(srctree)
创建board文件
在board文件夹下找到你的芯片厂家和架构类似的芯片,然后进行复制粘贴,修改相应内容就很简单了;如果没有,先找找网上是否有dalao进行了移植,可以借鉴借鉴
也可以通过找到arch文件夹下对应芯片厂家文件夹下的Kconfig文件,如:
arch/arm/mach-exynos/Kconfig
搜索:4412
可以找到多个板子,根据需要选择一个
我需要支持SPL,选择board\samsung\origen
- 在board下创建板级文件
因itop4412和board\samsung\origen芯片一样,并支持SPL;
复制一份,然后现将对应的名字进行修改
将Kconfig、MAINTAINERS、Makefile中的origen替换为itop4412,注意大小写;cp -r origen/ itop4412/ cd itop4412/ mv origen.c itop4412.c mv tools/mkorigenspl.c tools/mkitop4412spl.c
itop4412.c不用修改
File | Description |
---|---|
xxx.c | 板级基础.c文件 |
Kconfig | 在内核配置时候,作为配置选项 |
MAINTAINERS | 包含一些我们可能需要修改的文件 |
Makefile | 编译的文件 |
tools/mkitop4412spl.c | 输出u-boot-spl.bin,等同BL2.bin,详情:doc/README.SPL |
- mkxxxspl.c
这个非常重要的,用于spl.bin文件的生成,等同于BL2+chacksum关于tools/mkitop4412spl.c,根据提供的mkbl2.c文件进行修改,加入checksum,忽略signature
创建<board.h>文件
修改include/configs/<board.h>
SPL的链接地址 CONFIG_SPL_TEXT_BASE,它的值是0x02023400
U-boot的链接地址 CONFIG_SYS_TEXT_BASE,它的值是0x43e00000
#define CONFIG_SYS_TEXT_BASE 0x43E00000
#define CONFIG_SPL_TEXT_BASE 0x02023400 /* 0x02021410 */
SD卡的布局
创建configs文件
- 通过命令:
make menuconfig
进行配置,最好保存到configs/xxx_defconfig下,方便下次修改编译 - 通过复制configs/origen_defconfig为itop4412_defconfig;然后进行相应的修改
CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_DEBUG_UART=y
CONFIG_SD_BOOT=y
CONFIG_BOOTDELAY=5
# 串口的设置
CONFIG_DEBUG_UART_S5P=y
#uart2 地址:0x13820000
CONFIG_DEBUG_UART_BASE=0x13820000
CONFIG_DEBUG_UART_CLOCK=100000000
创建ARCH文件
这里包含了系统时钟初始化、内存初始化以及串口初始化
- 修改arch/arm/mach-exynos/Kconfig
仿照origen加入以下代码,主要用于make menuconfigconfig TARGET_ITOP4412 bool "Exynos4412 iTop-4412 board" select SUPPORT_SPL
source "board/samsung/itop4412/Kconfig"
- 设备树(感觉好像不加也没事,不懂。。)
2.1修改arch/arm/dts/Makefile,用于编译设备树修改arch/arm/dts/Makefile,用于编译设备树
2.2 修改arch/arm/dts/exynos4412-itop4412.dts,使用uart2作为终端,需要修改对应的地址138x0000exynos4412-tiny4412.dtb (在上一个程序后面加入 "\")
这个还能加其他的,串口为主要,具体再研究/dts-v1/; #include "exynos4412.dtsi" / { model = "ITOP4412 based on Exynos4412"; compatible = "samsung,itop4412", "samsung,exynos4412"; chosen { stdout-path = "serial2:115200n8"; }; aliases { serial2 = "/serial@13820000";//0:13800000;1:13810000... console = "/serial@13820000"; }; serial2:serial@13820000 { status = "okay"; }; };
- 修改arch/arm/include/asm/mach-types.h,增加tiny4412的machine ID
#define MACH_TYPE_ITOP4412 5115 (根据文件情况,在最后添加ID)