exynos4412-uboot移植笔记

2026/1/13 18:21:25

Exynos4412 uboot移植笔记

一、准备原料

三星原厂提供的UBOOT代码-u-boot-samsung-dev. 二、在4212平台代码基础上修改成自己的平台YYGY4412

1.用户目录下新建文件夹yygy4412-uboot cd, mkdir yygy4412-uboot

2.进入yygy4412-uboot文件夹,将三星平台代码压缩文件拷贝至此。解压, 重命名为:yygy4412-uboot tar -vxf u-boot-samsung-dev.tar.gz mv u-boot-samsung-dev yygy4412-uboot

3.拷贝迅为的CodeSign4SecureBoot文件夹到当前目录。至此当前目录结构为:

4.进入文件夹yygy4412-uboot cd yygy4412-uboot 进入三星平台cd board/samsung cp -rf smdk4212 yygy4412 cd yygy4412 Mv clock_init_smdk4212.S clock_init_yygy4412.S Mv mem_init_smdk4212.S mem_init_yygy4412.S Mv smdk4212.c yygy4412.c

Mv smdk4212_val.h yygy4212_val.h Mv smdk4412_val.h yygy4412_val.h

Vi lowlevel_init.S

#ifdef CONFIG_EXYNOS4412 #include \//改为#include \ #else #include \//改为#include \ #endif

Vi clock_init_yygy4412.S

#ifdef CONFIG_EXYNOS4412 #include \ //改为#include \ #else

#include \ //改为#include \ #endif

Vi Makefile

33行:COBJS-y := smdk4212.o //改为:COBJS-y := yygy4412.o

37行;SOBJS += mem_init_smdk4212.o //改为:SOBJS += mem_init_yygy4412.o 38 ;SOBJS += clock_init_smdk4212.o //改为:SOBJS += clock_init_yygy4412.o

Cd , cd yygy4412-uboot/yygy4412-uboot

修改boards.cfg 添加yygy4412 arm armv7 yygy4412 samsung exynos Cp -av include/configs/smdk4412.h include/configs/yygy4412.h Vi include/configs/yygy4412.h

265: #define CONFIG_SYS_PROMPT \

改为:#define CONFIG_SYS_PROMPT \319:#define CONFIG_IDENT_STRING \

改为;#define CONFIG_IDENT_STRING \

Vi u-boot.lds

board/samsung/smdk4212/libsmdk4212.o (.text) 修改为 :

board/samsung/yygy4412/libyygy4412.o (.text)

5.编译 make yygy4412_config make

6.制作UBOOT

因CPU exynos_4412的启动过程是

BL0 //BL0固化在iram中的程序 (关闭看门狗,关闭中断及MMU,时钟设置,检测om决定启动方式,拷贝bl1到iram中 BL1 <8k /*BL1 初始化化环境(中断初始化,设置堆栈等),搬移bl2代码到RAM中,并允许它, BL1是三星提供的,无源码,见CodeSign4SecureBoot/E4412_N.bl1.SCP2G.bin | 如果想看源码,可以反汇编分析,如arm-none-linux-gnueabi-objdump -D -b binary -m arm E4412_N.bl1.SCP2G.bin > b1.asm BL2 <14k //bl2 完成基本硬件初始化(Low_init.s 时钟串口内存flash等) u-boot.bin

所以我们单独运行u-boot是不行的,需使用三星提供的BL1 BL2进行打包加密校验 cp -rf sdfuse_q ./ //sdfuse_q 三星提供的加密处理(checksum) Cp mkuboot ./ //拷贝SD卡制作UBOOT脚 本。

//cp -rf CodeSign4SecureBoot ../ // CodeSign4SecureBoot 三星提供的安全启动方式 前面已拷贝

vim Makefile

修改,添加sdfuse_q的编译 (sdfuse_q主要是进行checksum ,大小等检验,还有通过脚本可制作sd启动盘)

在354 ifeq ($(CONFIG_CPU_EXYNOS5250),y) ./mkbl2 u-boot.bin bl2.bin 14336 Endif后添加

@split -b 14336 u-boot.bin bl2

@+make -C sdfuse_q/ @./sdfuse_q/chksum

@./sdfuse_q/add_padding @rm bl2a* @echo

Cp build_uboot.sh ./ 拷贝编译脚本

Vi build_uboot.sh

修改路径:sec_path=\if [ -z $1 ] then make tc4_android_config //改make yygy4412_config elif [ $1 = $option1 ] then make tc4_plus_android_config //改make yygy4412_config else echo please input right parameter. //改make yygy4412_config exit 0 Fi cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-iTOP-4412.bin改 为>u-boot-yygy-4412.bin

mv u-boot-iTOP-4412.bin $ROOT_DIR

改为mv u-boot-yygy-4412.bin $ROOT_DIR

chmod 777 ./build.sh

./build_uboot.sh 编译 生成u-boot-yygy-4412.bin

7.加入点灯代码,确认uboot运行。

Vi board/samsung/yygy4412/lowlevel_init.S

96: /* PS-Hold high */ 电源管理

ldr r0, =0x1002330c ldr r1, [r0] orr r1, r1, #0x300 str r1, [r0] 后添加

ldr r0, =0x11000c08 ldr r1, =0x0 str r1, [r0]

/* Clear MASK_WDT_RESET_REQUEST */ ldr r0, =0x1002040c ldr r1, =0x00 str r1, [r0]

//led test ldr r0, =0x11000060 //GPK1[1] ldr r1, [r0] bic r1, r1, #0xf0

orr r1, r1, #0x10 str r1, [r0] ldr r1, [r0, #4] orr r1, r1, #2 str r1, [r0, #4]

保存重新编译,烧到开发板,运行,可 以看灯一闪而过。但是串口无任何输出。 8.开启串口

开发板串口为UART2.

Vi include/configs/yygy4412.h

添加#define DEBUG 输出调试信息 161: #define CONFIG_SERIAL1 1

改为:#define CONFIG_SERIAL2 1

保存编译,烧到开发板,可以看到串口输出信息,进入UBOOT读秒,读取内核,但是EMMC读取速度超慢,无法忍受,但最终读取完成。

9.修改MMC驱动。加快内核的读取速度。

Vi drivers\\mmc\\mmc.c

1271; 在函数mmc_init中

mmc_set_clock(mmc, 1);

mmc_set_bus_width(mmc, MMC_BUS_WIDTH_1); 修改为:

mmc_set_clock(mmc, 40000000); //40M mmc_set_bus_width(mmc, MMC_MODE_4BIT);

保存编译,烧到开发板,可以看到串口输出信息,进入UBOOT读秒,读取内核EMMC读取速度超快,读取完成。但是无法加载内核。打印信息如下 :

### main_loop: bootcmd=\100000;bootm 40008000 41000000\

Hit any key to stop autoboot: 0

reading kernel..device 0 Start 1063, Count 8192

MMC read: dev # 0, block # 1063, count 8192 ... 8192 blocks read: OK

completed reading RFS..device 0 Count 9255, Start 2048

MMC read: dev # 0, block # 9255, count 2048 ... 2048 blocks read: OK

completed ## Current stack ends at 0xc3cfbdc8 * kernel: cmdline image address = 0x40008000 Wrong Image Format for bootm command ERROR: can't get kernel image!

10.修改EMMC分区信息。

Vi arch\\arm\\include\\asm\\arch-exynos\\Movi_partition.h 修改21-57行为:

#define PART_SIZE_FWBL1 (8 * 1024)


exynos4412-uboot移植笔记.doc 将本文的Word文档下载到电脑
搜索更多关于: exynos4412-uboot移植笔记 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219