exynos4412uboot移植笔记Word下载.docx

上传人:b****5 文档编号:19943347 上传时间:2023-01-12 格式:DOCX 页数:13 大小:32.05KB
下载 相关 举报
exynos4412uboot移植笔记Word下载.docx_第1页
第1页 / 共13页
exynos4412uboot移植笔记Word下载.docx_第2页
第2页 / 共13页
exynos4412uboot移植笔记Word下载.docx_第3页
第3页 / 共13页
exynos4412uboot移植笔记Word下载.docx_第4页
第4页 / 共13页
exynos4412uboot移植笔记Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

exynos4412uboot移植笔记Word下载.docx

《exynos4412uboot移植笔记Word下载.docx》由会员分享,可在线阅读,更多相关《exynos4412uboot移植笔记Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

exynos4412uboot移植笔记Word下载.docx

ViMakefile

33行:

COBJS-y:

=smdk4212.o//改为:

=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,cdyygy4412-uboot/yygy4412-uboot

修改boards.cfg添加yygy4412armarmv7yygy4412samsungexynos

Cp-avinclude/configs/smdk4412.hinclude/configs/yygy4412.h

Viinclude/configs/yygy4412.h

265:

#defineCONFIG_SYS_PROMPT"

SMDK4412#"

改为:

#defineCONFIG_SYS_PROMPT"

YYGY4412#"

319:

#defineCONFIG_IDENT_STRING"

forSMDK4412"

改为;

forYYGY4412"

Viu-boot.lds

board/samsung/smdk4212/libsmdk4212.o(.text)

修改为:

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

5.编译makeyygy4412_configmake

6.制作UBOOT

因CPUexynos_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-bbinary-marmE4412_N.bl1.SCP2G.bin>

b1.asm

BL2<

14k//bl2完成基本硬件初始化(Low_init.s时钟串口内存flash等)

u-boot.bin

所以我们单独运行u-boot是不行的,需使用三星提供的BL1BL2进行打包加密校验

cp-rfsdfuse_q.///sdfuse_q三星提供的加密处理(checksum)

Cpmkuboot.///拷贝SD卡制作UBOOT脚本。

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

vimMakefile

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

在354ifeq($(CONFIG_CPU_EXYNOS5250),y)

./mkbl2u-boot.binbl2.bin14336

Endif后添加

@split-b14336u-boot.binbl2

@+make-Csdfuse_q/

@./sdfuse_q/chksum

@./sdfuse_q/add_padding

@rmbl2a*

@echo

Cpbuild_uboot.sh./拷贝编译脚本

Vibuild_uboot.sh

修改路径:

sec_path="

../CodeSign4SecureBoot/"

if[-z$1]

then

maketc4_android_config//改makeyygy4412_config

elif[$1=$option1]

maketc4_plus_android_config//改makeyygy4412_config

else

echopleaseinputrightparameter.//改makeyygy4412_config

exit0

Fi

catE4412_N.bl1.SCP2G.binbl2.binall00_padding.binu-boot.bintzsw_SMDK4412_SCP_2GB.bin>

u-boot-iTOP-4412.bin改为>

u-boot-yygy-4412.bin

mvu-boot-iTOP-4412.bin$ROOT_DIR

改为mvu-boot-yygy-4412.bin$ROOT_DIR

chmod777./build.sh

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

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

Viboard/samsung/yygy4412/lowlevel_init.S

96:

/*PS-Holdhigh*/电源管理

ldrr0,=0x1002330c

ldrr1,[r0]

orrr1,r1,#0x300

strr1,[r0]后添加

ldrr0,=0x11000c08

ldrr1,=0x0

strr1,[r0]

/*ClearMASK_WDT_RESET_REQUEST*/

ldrr0,=0x1002040c

ldrr1,=0x00

//ledtest

ldrr0,=0x11000060//GPK1[1]

bicr1,r1,#0xf0

orrr1,r1,#0x10

ldrr1,[r0,#4]

orrr1,r1,#2

strr1,[r0,#4]

保存重新编译,烧到开发板,运行,可以看灯一闪而过。

但是串口无任何输出。

8.开启串口

开发板串口为UART2.

Viinclude/configs/yygy4412.h

添加#defineDEBUG输出调试信息

161:

#defineCONFIG_SERIAL11

改为:

#defineCONFIG_SERIAL21

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

9.修改MMC驱动。

加快内核的读取速度。

Vidrivers\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="

movireadkernel040008000;

movireadrootfs041000000100000;

bootm4000800041000000"

Hitanykeytostopautoboot:

0

readingkernel..device0Start1063,Count8192

MMCread:

dev#0,block#1063,count8192...8192blocksread:

OK

completed

readingRFS..device0Count9255,Start2048

dev#0,block#9255,count2048...2048blocksread:

##Currentstackendsat0xc3cfbdc8*kernel:

cmdlineimageaddress=0x40008000

WrongImageFormatforbootmcommand

ERROR:

can'

tgetkernelimage!

10.修改EMMC分区信息。

Viarch\arm\include\asm\arch-exynos\Movi_partition.h

修改21-57行为:

#definePART_SIZE_FWBL1(8*1024)

#definePART_SIZE_BL1(16*1024)

#definePART_SIZE_UBOOT(495*1024)

#definePART_SIZE_KERNEL(6*1024*1024)

#definePART_SIZE_ROOTFS(2*1024*1024)//2M

////#definePART_SIZE_TZSW(156*1024)

#definePART_SIZE_TZSW(24*1024)//为了与迅为UBOOT中的environmentstart544一致。

 

#defineMOVI_FWBL1_BLKCNT(PART_SIZE_FWBL1/MOVI_BLKSIZE)

#defineMOVI_BL1_BLKCNT(PART_SIZE_BL1/MOVI_BLKSIZE)

#defineMOVI_ENV_BLKCNT(CONFIG_ENV_SIZE/MOVI_BLKSIZE)/*16KB*/

#defineMOVI_UBOOT_BLKCNT(PART_SIZE_UBOOT/MOVI_BLKSIZE)/*328KB*/

#defineMOVI_ZIMAGE_BLKCNT(PART_SIZE_KERNEL/MOVI_BLKSIZE)/*4MB*/

#defineMOVI_ROOTFS_BLKCNT(PART_SIZE_ROOTFS/MOVI_BLKSIZE)/*26MB*/

#defineMOVI_TZSW_BLKCNT(PART_SIZE_TZSW/MOVI_BLKSIZE)/*160KB*/

#defineMOVI_UBOOT_POS((eFUSE_SIZE/MOVI_BLKSIZE)+MOVI_FWBL1_BLKCNT+MOVI_BL1_BLKCNT)

#defineMOVI_TZSW_POS((eFUSE_SIZE/MOVI_BLKSIZE)+MOVI_FWBL1_BLKCNT\

+MOVI_BL1_BLKCNT+MOVI_UBOOT_BLKCNT)

#defineENV_START_BLOCKMOVI_FWBL1_BLKCNT+MOVI_BL1_BLKCNT+MOVI_UBOOT_BLKCNT+MOVI_TZSW_BLKCNT+1

Viarch\arm\cpu\armv7\exynos\Movi_partition.c

25:

修改函数init_raw_area_table

Image[2]部分修改为:

image[2].start_blk=location;

image[2].used_blk=MOVI_UBOOT_BLKCNT+MOVI_BL1_BLKCNT+MOVI_FWBL1_BLKCNT;

image[2].size=PART_SIZE_UBOOT+PART_SIZE_FWBL1+PART_SIZE_BL1;

image[2].attribute=0x2;

strcpy(image[2].description,"

u-boot"

);

dbg("

u-boot:

%d\n"

image[2].start_blk);

Image[3]部分:

image[3].start_blk=image[2].start_blk+MOVI_UBOOT_BLKCNT;

修改为:

image[3].start_blk=image[2].start_blk+MOVI_UBOOT_BLKCNT+MOVI_BL1_BLKCNT+MOVI_FWBL1_BLKCNT;

Image[4]部分

image[4].attribute=0x10;

strcpy(image[4].description,"

environment"

后改为:

if(location==0)

image[4].start_blk=image[4].start_blk+2;

else

image[4].start_blk=image[4].start_blk+1;

为了与迅为UBOOT中的environmentstart544一致。

加载内核成功,文件系统也成功加载。

但是UBOOT下,fastboot失败!

Startingdownloadof527104bytes

---------ERROR:

DMAAddressisnotalignedby8---------

11.使用fastboot功能

Viinclude\configs\yygy4412.h

167:

#undefCONFIG_USB_CPUMODE

修改为#defineCONFIG_USB_CPUMODE

保存编译,烧到开发板.fastboot命令成功

12.环境变量的保存。

到目前为止,环境变量是默认的。

迅为开发板环境变量保存在错误的分区了,只要使用saveenv命令,就会破坏EMMC中的文件系统。

导致加载文件系统不断重启而失败。

最后连fastboot命令都失效。

EMMC分区被破坏。

重新分区,烧UBOOT,文件系统。

在函数mmc_read_ext_csd中。

959:

if(ext_csd_struct>

6){

printf("

unrecognisedEXT_CSDstructure"

"

version%d\n"

ext_csd_struct);

err=-1;

gotoout;

}

改为

if((ext_csd_struct>

5)&

&

(7!

=ext_csd_struct)){

因刚好version=7;

保存编译,烧到开发板.saveenv命令成功,现在读取的是EMMC中的环境变量。

13.疑问:

迅为提供的UBOOTE4412_N.bl1.SCP2G.bin已经将整个UBOOT拷贝到内存中。

测试是否如此?

修改lowlevel_init.S

load_uboot函数修改为:

/*****************************************************************************/

.globlload_uboot

load_uboot:

push{lr}

ldrr0,=INF_REG_BASE

ldrr1,[r0,#INF_REG3_OFFSET]

cmpr1,#BOOT_MMCSD

beqmmcsd_boot

cmpr1,#BOOT_EMMC

beqemmc_boot

cmpr1,#BOOT_EMMC_4_4

beqemmc_boot_4_4

cmpr1,#BOOT_SEC_DEV

beqmmcsd_boot

second_mmcsd_boot:

ldrr3,=BOOT_MMCSD

strr3,[r0,#INF_REG3_OFFSET]

mmcsd_boot:

#ifdefCONFIG_CLK_1000_400_200

ldrr0,=ELFIN_CLOCK_BASE

ldrr2,=CLK_DIV_FSYS2_OFFSET

ldrr1,[r0,r2]

orrr1,r1,#0xf

strr1,[r0,r2]

#endif

movr0,#SDMMC_CH2

strr0,_boot_device

blload_uboot_image

bload_uboot_exit

emmc_boot:

#ifdefined(CONFIG_CLK_1000_400_200)||defined(CONFIG_CLK_1000_200_200)||defined(CONFIG_CLK_800_400_200)

ldrr2,=CLK_DIV_FSYS1_OFFSET

orrr1,r1,#0x3

strr1,[r0,r2]

movr0,#EMMC

emmc_boot_4_4:

ldrr2,=CLK_DIV_FSYS3_OFFSET

orrr1,r1,#0x3

/*mmcch4devidervaluechange*/

//blmmc_ch4_devider_change

movr0,#EMMC_4_4

/*storesecondbootinformationinDRAM*/

ldrr0,=CONFIG_PHY_UBOOT_BASE

ldrr2,=0x2000

cmpr1,r2

bnesecond_mmcsd_boot

load_uboot_exit:

pop{pc}

/********************************************************************/

149行附近时钟,内存初始化部分。

ldrr0,=0xff000fff

bicr1,pc,r0/*r0<

-currentbaseaddrofcode*/

ldrr2,_TEXT_BASE/*r1<

-originalbaseaddrinram*/

bicr2,r2,r0/*r0<

cmpr1,r2/*comparer0,r1*/

beqafter_copy/*r0==r1thenskipsdraminitandu-boot.binloading*/

ldrr0,=CHIP_ID_BASE

lsrr1,r1,#8

andr1,r1,#3

cmpr1,#2

bnev310_1

blmem_ctrl_asm_init

blsystem_cl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1