三星 exynos 4412 (如何从0移植uboot支持exynos4412?

科技知识 2023-07-23 16:23www.caominkang.com科技知识

本文主要目的是如何从0编译和移植uboot,增加串口、网络、emmc等功能,让他支持exynos4412开发板。

一、移植步骤

1. Uboot配置

  1. 指定交叉编译工具链 进入uboot代码根目录
$cdu-boot-2013.01

修改 Makefile 在

ifeq($(HOSTARCH),$(ARCH))    CROSS_COMPILE ?= endif

下添加

ifeq   (arm,$(ARCH))    CROSS_COMPILE ?= arm-none-linux-gnueabi- endif

交叉编译工具

  1. 指定产品CPU 我们产品用的CPU是 exynos 4412;

查看u-boot源码

arch/arm/cpu/armv7/exynos/

可见U-boot已支持该CPU。

  1. 指定产品BOARD 三星公司已经为exynos 4412发布了初始化的程序

origen

  1. cpu硬件信息 对应的该CPU硬件信息头文件位于以下位置
include/configs/origen.h

该文件定义了uboot启动必须关于exynos 4412必须的一些资源信息。

  1. boards.cfg 在uboot-2013-01中,顶层目录下的boards.cfs文件中查看它支持的开发板和相应的信息,后续的编译过程需要根据配置名检索到相应的信息。文件格式如下

和以前的老版本比,配置更加规范化了,其实这些就是相关文件分类的一个文件夹的描述。依照这个层次关系,我们可以很方便地对我们开发板进行配置。

  1. 编译u-boot

不同版本的uboot的配置命令可能是不同的,源码包的文件README通常会有相应的配置命令【其他版本的uboot会不一样】

配置和编译命令如下

$ makedistclean $ makeorigen_config

改配置命令会生成以下文件

include/config.h

config.h

编译

$ makeall

编译完成后生成的u-boot.bin就是可执行的镜像文件。

并不会生成真正适配我们板子的uboot,只是适配参考板,该文件还不能在我们板子上运行,我们需要对u-boot源代码进行相应的修改。

2. 确认第一条指令有运行到 (点灯法)

在arch/arm/cpu/armv7/start.S 134 行后添加点灯程序

#if 1ldrr0, =0x11000c40 @GPX2_7led2   ldr r1, [r0]   bic r1, r1, #0xf0000000orr r1, r1, #0x10000000str r1, [r0]     ldr r0, =0x11000c44   mov r1,#0xffstr r1, [r0] #endif 

因为uboot刚启动的时候,串口没有来得及初始化,我们可以通过点亮LED的方法来判断程序是否执行到此处。

代码详解参考《十、LED汇编、C语言驱动编写》

3. 添加三星加密方式

exynos 需要三星提供的初始引导加密后,我们的u-boot,才能被引导运行,这其中要用到下面的几个命令或三星提供的工具软件,这些操作的目的就是根据三星的芯片的启动要求对uboot.bin 进行一些处理,包括在特定长度的位置加上和校验信息以及插入一些文件段。

$cp  sdfuse_q  u-boot-2013.01-rf  $ chmod777u-boot-2013.01/sdfuse_q  -R       $cp  CodeSign4SecureBoot  u-boot-2013.01-rf     

注CodeSign4SecureBoot 三星提供的安全启动方式 ,对应的程序由三星提供。sdfuse_q目录下的文件是针对三星堆uboot.bin文件格式要求进行加密编写的文件。

修改根目录Makefile,实现sdfuse_q的编译 在

$(obj)u-boot.bin:$(obj)u-boot   $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@   $(BOARD_SIZE_CHECK) 

下添加

@#./mkuboot@split  -b  14336u-boot.bin  bl2  @make -C sdfuse_q/  @#cp u-boot.bin u-boot-4212.bin@#cp u-boot.bin u-boot-4412.bin@#./sdfuse_q/add_sign@./sdfuse_q/chksum  @./sdfuse_q/add_padding  @rm bl2a  @echo

注意是tab键缩进的,否则makefile编译报错 注意如果执行了make distclean 需重新拷贝CodeSign4SecureBoot

为方便起见,在根目录下创建编译脚本build.sh,该脚本将自动完成添加加密方式。

1#!/bin/sh23sec_path="CodeSign4SecureBoot/"4CPU_JOB_NUM=$(grepprocessor/proc/cpuinfo|ak'{field=$NF};END{print field+1}')5ROOT_DIR=$(pd)6CUR_DIR=${ROOT_DIR##

Copyright © 2016-2025 www.jianfeikang.com 建飞家电维修 版权所有 Power by