exynos 4412 uboot的 bl2.bin 文件从何而来

移植u-boot-samsung-dev的过程中一直在对比迅为的4412开发板的uboot,下面是最先运行的脚本文件  Build_uboot.sh

#!/bin/sh


if [ -z $1 ]
then    
   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
   echo "Please use correct make config.for example make SCP_1GDDR for SCP 1G DDR CoreBoard linux,android OS"
   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
   exit 0
fi

if   [ "$1" = "SCP_1GDDR" ] ||   [ "$1" = "SCP_2GDDR" ] || [ "$1" = "SCP_1GDDR_Ubuntu" ] ||   [ "$1" = "SCP_2GDDR_Ubuntu" ]
then 
      sec_path="../CodeSign4SecureBoot_SCP/"
      CoreBoard_type="SCP"

elif [ "$1" = "POP_1GDDR" ] || [ "$1" = "POP_1GDDR_Ubuntu" ]
then
      sec_path="../CodeSign4SecureBoot_POP/"
      CoreBoard_type="POP"

elif [ "$1" = "POP_2GDDR" ] ||  [ "$1" = "POP_2GDDR_Ubuntu" ]
then
     sec_path="../CodeSign4SecureBoot_POP/"
     CoreBoard_type="POP2G"
else
      echo "make config error,please use correct params......"
      exit 0
fi

 
CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
ROOT_DIR=$(pwd)
CUR_DIR=${ROOT_DIR##*/}

#clean
make distclean

#rm link file
rm ${ROOT_DIR}/board/samsung/smdkc210/lowlevel_init.S    
rm ${ROOT_DIR}/cpu/arm_cortexa9/s5pc210/cpu_init.S

case "$1" in
    clean)
        echo make clean
        make mrproper
        ;;
    *)
            
        if [ ! -d $sec_path ]
        then
            echo "**********************************************"
            echo "[ERR]please get the CodeSign4SecureBoot first"
            echo "**********************************************"
            return
        fi

                if [ "$1" = "SCP_1GDDR" ]
                then
                    make itop_4412_android_config_scp_1GDDR

                elif [ "$1" = "SCP_2GDDR" ]
                then
                       make itop_4412_android_config_scp_2GDDR

                elif [ "$1" = "POP_1GDDR" ]
                then
                       make itop_4412_android_config_pop_1GDDR

                elif [ "$1" = "POP_2GDDR" ]
                then
                       make itop_4412_android_config_pop_2GDDR

                elif [ "$1" = "SCP_1GDDR_Ubuntu" ]    
                then
                       make itop_4412_ubuntu_config_scp_1GDDR

                elif [ "$1" = "SCP_2GDDR_Ubuntu" ]
                then
                       make itop_4412_ubuntu_config_scp_2GDDR

                elif [ "$1" = "POP_1GDDR_Ubuntu" ]
                then
                       make itop_4412_ubuntu_config_pop_1GDDR

                elif [ "$1" = "POP_2GDDR_Ubuntu" ]
                then
                       make itop_4412_ubuntu_config_pop_2GDDR
        fi    
        
        make -j$CPU_JOB_NUM
        
        if [ ! -f checksum_bl2_14k.bin ]
        then
            echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
            echo "There are some error(s) while building uboot, please use command make to check."
            echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
            exit 0
        fi
        
        cp -rf checksum_bl2_14k.bin $sec_path
        cp -rf u-boot.bin $sec_path
        rm checksum_bl2_14k.bin
        
        cd $sec_path
        #./codesigner_v21 -v2.1 checksum_bl2_14k.bin BL2.bin.signed.4412 Exynos4412_V21.prv -STAGE2
        
        # gernerate the uboot bin file support trust zone
        #cat E4412.S.BL1.SSCR.EVT1.1.bin E4412.BL2.TZ.SSCR.EVT1.1.bin all00_padding.bin u-boot.bin E4412.TZ.SSCR.EVT1.1.bin > u-boot-iTOP-4412.bin


                if  [ "$CoreBoard_type" = "SCP" ]
                then
                cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-iTOP-4412.bin

                elif [ "$CoreBoard_type" = "POP" ]
                then
                   cat E4412.S.BL1.SSCR.EVT1.1.bin E4412.BL2.TZ.SSCR.EVT1.1.bin all00_padding.bin u-boot.bin E4412.TZ.SSCR.EVT1.1.bin > u-boot-iTOP-4412.bin

                elif [ "$CoreBoard_type" = "POP2G"  ]
                then
                   cat bl2.bin u-boot.bin E4412.TZ.SSCR.EVT1.1.bin > u-boot-iTOP-4412.bin

                else
                   echo  "make uboot image error......" 
                fi

        mv u-boot-iTOP-4412.bin $ROOT_DIR
        
        rm checksum_bl2_14k.bin
        #rm BL2.bin.signed.4412
        rm u-boot.bin

        echo 
        echo 
        ;;
        
esac

在上述脚本中有一个地方不明白:

cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-iTOP-4412.bin

其中的有很多bin文件生成了一个u-boot-iTOP-4412.bin。了解过后发现bl2.bin不知道从何而来。我查阅资料得知bl2.bin应该是我们编译uboot源码所产生的uboot.bin截取前14K所得。但是查看迅为的资料,他们却将bl2.bin 放到了

与迅为高级技术沟通,得到的回复是bl2是三星给的,没有源码。。。。。直接就能用的。。。。。。

还是看看下面的2篇文章介绍吧:

第一篇

分类: eyxnos4412 裸机程序  |  标签: exynos4,程序开发,三星  |  作者: eshing 相关  |  发布日期 : 2014-10-06  |  热度 : 137°

一、控制原理说明

首先查看《Tiny4412_1306_sch.pdf》原理图,找到我们想控制的LED灯,如下图2-1所示。

 

 

图2-1、LED灯电路原理图

 

如上图1可知,PCB板上有4个LED灯可受IO控制的,控制它们四个引脚分别是GPM4_0~ GPM4_3,由原理可知,当IO引脚为高电平时,LED灯灭,当IO引脚为低电平时LED亮。我们要做的工作就是设置GPM4_0~ GPM4_3为输出功能,且控制且输出电平高低即可。

二、程序说明

程序代码目录为1_leds_s。以下进行必要说明。

1、       start.s说明

由原理图可知,程序只进行了两步操作;

第一步:设置GPM4_0~GPM4_3相对应的控制寄存器GPM2CON,使GPM4_0~ GPM4_3四个引脚为功能。

第二步:设置其对应的数据寄存器GPM2DAT对应的4个bit位为0,使GPM4_0~ GPM4_3为低电平,4个LED灯全亮,等待一段时间设置其为1,使GPM4_0~ GPM4_3为高电平,4个LED灯全灭。

程序代码中,也有相关解释这里不做过多说明。

2、       MakeFile说明

led.bin: start.o

arm-linux-ld -Ttext 0x0 -o led.elf $^

arm-linux-objcopy -O binary led.elf  u-boot.bin

arm-linux-objdump -D led.elf > led_elf.dis 

%.o : %.S

arm-linux-gcc -o $@ $< -c

 

%.o : %.c

arm-linux-gcc -o $@ $< -c

 

clean:

rm *.o *.elf *.bin *.dis  -f

如上是Makefile的全部内容,其实需求学习目标不一,我现在的要求是能看明白,进行相关修改,能让自己修改程序运行编译通过,运行起来即可。Makefile高深的语法,我也不甚了解,大家可以自行学习,关于Makefile网上的相关资料相当多,推荐《跟我一起写makefile》。

下面只是进行粗略地讲解下此Makefile。当我们在Makefile所在目录下执行make命令时,系统会进行如下操作:

第一步 执行arm-linux-gcc -o $@$< -c命令将当前目录下存在的汇编文件和C文件编译成.o文件;

第二步 执行arm-linux-ld -Ttext0x0 -o led.elf $^将所有.o文件链接成elf文件,-Ttext 0x0表示程序的运行地址是0x0,由于目前我们编写的代码是位置无关码,所以程序能在任何一个地址上运行;

第三步 执行arm-linux-objcopy-O binary led.elf u-boot.bin将elf文件抽取为可在开发板上运行的bin文件;为什么不是arm-linux-objcopy -O binary led.elf  led.bin,这是由于我在参考《Linux平台下Mini210S裸机程序开发指南》进行实验时,发现一个问题,按照其说明的方法,不能成功运行程序,这是由于Exynos4412的启动原理和S5PV210的不同,虽然都有一个检验拷贝的16K代码较验和的过程,但是Exynos4412好像第一段程序是是一段叫BL1的程序,然后才能执行我们所写的程序,具体原理启动原理大家可以好好看一下Exynos4412手册的第5节启动原理说明。我想找到写BL1程序方法,但我从网上找不到Exynos4412的类似S5PV210的启动说明文档《链接地址S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》,所以,我想uboot里面有一个sd_fuse的文件夹,是用来烧写U-boot程序到SD卡的。我想他可能可以工作,我拷贝了里面必要的文件到我们的裸机程序下,进行了必要的修改,发现其真的能运行,所以我们裸机程序不像Mini512S的是用write2sd脚本文件了。为了这个修改过的sd_fuse文件夹的程序,能在不同的裸机程序上运行,所以这里让我们裸机程序来匹配sd_fuse下的程序。这里写成arm-linux-objcopy -O binary led.elf u-boot.bin,让其生成的Bin文件名为u-boot。

建议大家可以先看一次《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》文档。

第四步 执行arm-linux-objdump-D led.elf > led_elf.dis将elf文件反汇编后保存在dis文件中,调试程序时可能会用到。

 

clean:

rm *.o *.elf *.bin *.dis  -f

上面代码是用来清除编译链接过程生成的一切文件。

 

3、       sd_fuse文件夹简单说明

sd_fuse文件夹下我只抽取了我们需要的4个文件:

a、     E4412_N.bl1.bin,这个文件很有可能是三星提供的,我不清楚其来源,但它是我们要烧写在SD卡上seek=1位置处一文件,也就是第一个执行的文件吧。算了,像我们这些学习者,资料都拿不全,不知其源直接用吧。

链接地址b、     fast_fuse.sh 是烧写SD卡的shell脚本文件。

链接地址c、     V310-EVT1-mkbl2.c是为裸机程序增加检验和的程序。

d、     Makefile是用来将V310-EVT1-mkbl2.c编译成可执行的文件mkbl2。

 

下面来说一下V310-EVT1-mkbl2.c程序。

大家又可参考《Linux平台下Mini210S裸机程序开发指南》,文中以下内容:

从三星提供的S5PV210文档《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》以及芯片手册《S5PV210_UM_REV1.1.pdf》得知,S5PV210启动时,会先运行内部IROM中的固化代码进行一些必要的初始化,执行完后硬件上会自动读取NAND Flash或sd卡等启动设备的前16K的数据到IRAM中,这16K数据中的前16byte中保存了一个叫校验和的值,拷贝数据时S5PV210会统计出待运行的bin文件中含‘1’的个数,然后和校验和做比较,如果相等则继续运行程序,否则停止运行。所以所有在S5PV210上运行的bin文件都必须具有一个16byte的头部,该头部中需包含校验和信息。

Exynos4412的启动顺序和S5PV210的虽然不同,要先执行一个BL1.bin的文件,但其第二个BL2.bin的文件也是需要这个的校验和信息的,V310-EVT1-mkbl2.c作用就是用来给原始的bin文件添加较验和信息的,不过不同于S5PV210是在bin文件的状况,4412的是在这个14K的Bin文件尾部。V310-EVT1-mkbl2.c程序中虽然我做了必要修改,让其程序适应我们裸机程序,但其核心部分是没有变动的,程序主要内容也是别人写的,我也不做过多说明,如有需求,大家可以自己分析理解一下,如不想了解,直接应用就行。

 

fast_fuse.sh是一个shell脚本,此脚本主要是用来:

第一步、fast_fuse.sh脚本使用方法对不对,提示如何使用fast_fuse.sh。且检验参数2提供的SD卡是否存在,以及其大小是否超过32G等。

第一步调用mkbl2来将我们裸机程序增加较验和尾部,生成BL2.bin文件,由下面内容实现:

 

E4412_UBOOT=../u-boot.bin

MKBL2=./mkbl2                

#<make bl2>

${MKBL2} ${E4412_UBOOT} bl2.bin 14336

 

接着将E4412_N.bl1.bin写到SD卡的seek=1的位置处,将bl2.bin文件烧写到seek=17处。代码如下,of=链接地址$1中$1是提供的SD卡。

signed_bl1_position=1

bl2_position=17

uboot_position=49

tzsw_position=705

#<BL1 fusing>

echo "---------------------------------------"

echo "BL1 fusing"

dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1seek=$signed_bl1_position

 

#<BL2 fusing>

echo "---------------------------------------"

echo "BL2 fusing"

dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position

dd是一个读写命令,if是输入,of是输出,seek=n表示从扇区n处开始读写。

三、完整的烧写过程

首先请保证你的SD卡通过使用FriendlyARM提供的SD-Flasher.exe制作好了SD卡,建议你重新制作一次,因为我在调试过程中发现,SD卡在烧录过多次其他u-boot程序后,再来烧写这些裸机程序,我发现裸机程序,工作会存在异常,所以建议你重新制作一次SD卡。避免实验不成功。

现在假设你已将SD卡插入,linux识别了SD卡,其识别号为sdb。执行下面命令:

# chmod 777 –R 1_leds_s  //还没有进入1_leds_s文件夹执行

# cd 1_leds_s

# make

# cd sd_fuse

# make

# ./ fast_fuse /dev/sdb

执行完成,如下图2-2所示即可认为成功

 

图2-2、程序编译执行流程示意图

四、上电实验

将SD卡插入到Tiny4412板上子,将启动开关设置拔到SD卡启动端,上电,开机,可以看到4个LED灯在闪烁,说明程序运行成功。

 

程序不知道如何上传附件,稍后会想法上传

 

第二篇

目前面对高性能产品的嵌入式开发中,用SD卡来代替以往的JLINK显得备受大家喜欢,而且MCU厂家也对以SD卡启动的支持度越来越大,反而对JLINK不在那么重视(不过依旧保留着)。一些以开发开发板的公司在提供他们自身的bootloader(只是其中一部分是他们自身的代码而已,下面我会讲到这一点)时其原码并不对外公开,不过大家喜欢的u-boot的原码是开源的,可是像友善之臂他们的那样,还得通过他们的superboot来把u-boot二进制代码载入到LAND FLASH,EMMC等这类外部rom设备中,这也意味着我们还得借助superboot来完成我们u-boot的烧写,虽然这样做不是不行,他们不开源源码但是有二进制可执行文件给咱们用,可对于习惯于开源的人来说,无疑总感觉不爽,因此下面就来介绍如何脱离superboot来完成我们的开发。

  跟踪三星厂商提供的他们修改过的uboot代码,在主目录中我们可以看到一个名叫sd—fuse的子目录,这个子目录下有一个makefile,查看makefile我们可以知道它的作用是为了编译产生一个工具mkbl2,这是这个makefile的一部分内容(通过这可以知道是为了生成工具mkbl2):

 25 SOURCES = $(OBJECTS:.o=.c)
 26 
 27 all:
 28     $(CC) $(CFLAGS) mkbl2 V310-EVT1-mkbl2.c 
 29     $(CC) $(CFLAGS) sd_fdisk sd_fdisk.c
那么这个mkbl2工具是起什么作用的呢,或者说它能干嘛,通过上面可看到它的信赖源文件V310—EVT1-mkbl2.c,那下面我们当然是来看这个源码文件喽:

 66     for(i = 0;i < (14 * 1024) - 4;i++)
 67     {
 68         checksum += (unsigned char)(Buf[i]);
 69     }
 70     *(unsigned int*)(Buf+i) = checksum;
 71 
 72     fp = fopen(argv[2], "wb");
 73     if (fp == NULL)
 74     {
 75         printf("destination file open error\n");
 76         free(Buf);
 77         return -1;
 78     }
 79 
 80     a   = Buf;
 81     nbytes  = fwrite( a, 1, BufLen, fp);
 82 
 83     if ( nbytes != BufLen )
 84     {
 85         printf("destination file write error\n");
 86         free(Buf);
 87         fclose(fp);
 88         return -1;
 89     }
 90 
 91     free(Buf);
 92     fclose(fp);
 93 
 94     return 0;
 95 }
上面是其中的部分代码,可以看到它是从一个指定文件(这个指定文件下面会说到,其实就是个二进制文件)中复制出前14K内容,把前(14*1024-4)=14332字节做个和校验(checksum)得到一个4字节的校验码,再把它放到14332字节之后,输出一个新的14K的二进制文件。知道了它的作用之后我们继续跟踪下去,在sd-fuse目录下有一个tiny4412的二级子目录,下面可以看到这些文件:E4412_N.bl1.bin  E4412_tzsw.bin  fast_fuse.sh  sd_fusing.sh,这里有两个脚本文件:fast_fuse.sh  sd_fusing.sh,还两个由三星提供的二进制文件:E4412_N.bl1.bin  E4412_tzsw.bin,sd—fusing.sh是对SD卡的,那下面来看看这个脚本是用来干嘛的:

 44 E4412_UBOOT=../../u-boot.bin
 45 MKBL2=../mkbl2
 46 
 47 if [ ! -f ${E4412_UBOOT} ]; then
 48     echo "Error: u-boot.bin NOT found, please build it & try again."
 49     exit -1
 50 fi
 51 
 52 if [ ! -f ${MKBL2} ]; then
 53     echo "Error: can not find host tool - mkbl2, stop."
 54     exit -1
 55 fi
 56 
 57 #<make bl2>
 58 ${MKBL2} ${E4412_UBOOT} bl2.bin 14336
 59 
 60 ####################################
 61 # fusing images
 62 
 63 signed_bl1_position=1
 64 bl2_position=17
 65 uboot_position=49
 66 tzsw_position=705
 67 
 68 #<BL1 fusing>
 69 echo "---------------------------------------"
 70 echo "BL1 fusing"
 71 dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
 72 
 73 #<BL2 fusing>
 74 echo "---------------------------------------"
 75 echo "BL2 fusing"
 76 dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
 77 
 78 #<u-boot fusing>
 79 echo "---------------------------------------"
 80 echo "u-boot fusing"
 81 dd iflag=dsync oflag=dsync if=${E4412_UBOOT} of=$1 seek=$uboot_position
 82 
 83 #<TrustZone S/W fusing>
 84 echo "---------------------------------------"
 85 echo "TrustZone S/W fusing"
 86 dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=$1 seek=$tzsw_position
 87 
 88 #<flush to disk>
 89 sync
 90 
 91 ####################################
 92 #<Message Display>
 93 echo "---------------------------------------"
 94 echo "U-boot image is fused successfully."
 95 echo "Eject SD card and insert it again."
分析: 44 E4412_UBOOT=../../u-boot.bin
 45 MKBL2=../mkbl2
 58 ${MKBL2} ${E4412_UBOOT} bl2.bin 14336
原来之前说到的mkbl2作用是把u-boot.bin来产生一个和校验,生成文件bl2.bin,下面接着看:
 63 signed_bl1_position=1
 64 bl2_position=17
 65 uboot_position=49
 66 tzsw_position=705
 71 dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
 76 dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
 81 dd iflag=dsync oflag=dsync if=${E4412_UBOOT} of=$1 seek=$uboot_position
 86 dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=$1 seek=$tzsw_position
 89 sync
可以看到我们通过dd命令(其用法大家可以man一下)把E4412_N.bl1.bin放在SD卡的第1block开始到第17block总共16个block,共8K,(-rw-r--r-- 1 chenpan chenpan  8192 Mar 22  2013 E4412_N.bl1.bin
-rw-r--r-- 1 chenpan chenpan 94208 Mar 22  2013 E4412_tzsw.bin从这也看到了E4412—N.bl1.bin文件大小为8192字节,正好8K),这里会有人问为何不从SD卡的第0block开始,SD卡的前512字节被填充为0,网上说这里原本用来放一些分区信息的。另外的.bin文件也类似的写进SD卡的指定块(17-49,49-705,705-),sync是自动填充NUL(0)。
所以我们的SD卡存储结构就在上面了。大家也可以动手画出来加深映像。

下面该看看superboot.bin了,我们把它的前560字节打出来:

$hexdump -n 560 Superboot4412.bin 
0000000 7bb1 0ac1 3351 33ec 3e84 3b80 2c81 2cf3
0000010 0007 ea00 fffe eaff fffe eaff fffe eaff
0000020 fffe eaff fffe eaff fffe eaff fffe eaff
0000030 fffe eaff 00e8 e59f 0000 e590 1102 e3a0
0000040 0001 e110 0024 0a00 00d8 e59f 0000 e590
0000050 0001 e310 0020 0a00 00cc e59f 0000 e590
0000060 0003 e200 0003 e330 0004 0a00 00bc e59f
0000070 0000 e590 0001 e310 0000 0a00 0016 ea00
0000080 00ac e59f 0000 e590 0003 e200 0003 e330
0000090 0004 0a00 009c e59f 0000 e590 0001 e310
00000a0 0000 0a00 000c ea00 208c e59f 4000 e592
00000b0 2088 e59f 5000 e592 6084 e59f 0006 e154
00000c0 f005 01a0 007c e59f 0000 e590 0007 e200
00000d0 0007 e330 0000 1a00 0010 ea00 0068 e59f
00000e0 1068 e59f 3068 e59f 0001 e150 0003 0a00
00000f0 0003 e151 2004 3490 2004 3481 fffb 3aff
0000100 1050 e59f 2000 e3a0 0001 e153 2004 3483
0000110 fffc 3aff 0010 ea00 fffe eaff 0eb7 ea00
0000120 07b6 ea00 0600 1002 12c0 1002 1188 1002
0000130 1184 1002 1198 1002 1194 1002 0020 0202
0000140 0024 0202 0d10 fcba 1398 1002 2a44 0202
0000150 2a44 0202 2a44 0202 2a44 0202 4070 e92d
0000160 0031 eb00 4070 e6ff 0034 eb00 50ff e200
0000170 01a2 eb00 6000 e1a0 0004 e1a0 00df eb00
0000180 0000 e355 000c 1a00 0036 eb00 0000 e350
0000190 0004 1a00 0078 e59f 1078 e59f 0980 e581
00001a0 f000 e320 fffe eaff 006c e59f 1064 e59f
00001b0 0984 e581 ffd9 ebff 0013 ea00 0000 e356
00001c0 0004 0a00 0054 e59f 1048 e59f 0984 e581
00001d0 ffd2 ebff 000c ea00 015f eb00 0001 e350
00001e0 0004 1a00 0038 e59f 1028 e59f 0984 e581
00001f0 ffca ebff 0004 ea00 0028 e59f 1014 e59f
0000200 0980 e581 f000 e320 fffe eaff 0000 e3a0
0000210 8070 e8bd 0060 dead 0000 1002 50b1 50b1
0000220 50b2 50b1 50b3 50b1 0061 dead 00a8 e59f
0000230
再把E4412_N.bl1.bin的前560字节给打出来:

$hexdump -n 560 E4412_N.bl1.bin 
0000000 69a3 18d3 7de9 66b9 6bd1 6ed5 79d4 79a6
0000010 0007 ea00 fffe eaff fffe eaff fffe eaff
0000020 fffe eaff fffe eaff fffe eaff fffe eaff
0000030 fffe eaff 00dc e59f 0000 e590 1102 e3a0
0000040 0001 e110 0024 0a00 00cc e59f 0000 e590
0000050 0001 e310 0020 0a00 00c0 e59f 0000 e590
0000060 0003 e200 0003 e330 0004 0a00 00b0 e59f
0000070 0000 e590 0001 e310 0000 0a00 0016 ea00
0000080 00a0 e59f 0000 e590 0003 e200 0003 e330
0000090 0004 0a00 0090 e59f 0000 e590 0001 e310
00000a0 0000 0a00 000c ea00 2080 e59f 4000 e592
00000b0 207c e59f 5000 e592 6078 e59f 0006 e154
00000c0 f005 01a0 0070 e59f 0000 e590 0007 e200
00000d0 0007 e330 0000 1a00 07c8 ea00 005c e59f
00000e0 105c e59f 305c e59f 0001 e150 0003 0a00
00000f0 0003 e151 2004 3490 2004 3481 fffb 3aff
0000100 1044 e59f 2000 e3a0 0001 e153 2004 3483
0000110 fffc 3aff 002b ea00 0600 1002 12c0 1002
0000120 1188 1002 1184 1002 1198 1002 1194 1002
0000130 0020 0202 0024 0202 0d10 fcba 1398 1002
0000140 2aa4 0202 2aa4 0202 2aa4 0202 2aa4 0202
0000150 1201 e3a0 000c e591 0000 e350 0002 1a00
0000160 1000 e3a0 2104 e59f 1008 e582 ff1e e12f
0000170 00fc e59f 0700 e590 0702 e380 0b02 e380
0000180 10ec e59f 0700 e581 0001 e1a0 0704 e590
0000190 0402 e380 0040 e380 0704 e581 0001 e1a0
00001a0 0900 e590 0402 e380 0080 e380 0900 e581
00001b0 0907 e301 1719 e281 0008 e581 1842 e281
00001c0 0008 e581 ff1e e12f 4070 e92d ffdf ebff
00001d0 ffe6 ebff 002b eb00 4070 e6ff 002e eb00
00001e0 50ff e200 019d eb00 6000 e1a0 0004 e1a0
00001f0 00da eb00 0000 e355 000a 1a00 0030 eb00
0000200 0000 e350 0004 1a00 0068 e59f 1068 e59f
0000210 0980 e581 f000 e320 fffe eaff 005c e59f
0000220 ff30 e12f 000f ea00 0000 e356 0002 0a00
0000230
大家是不是发现了什么了?对,从第16字节开始一直到512字节这些指令操作码是一样的,也就是说superboot的起始位置也是用了三星给的启动代码,superboot是把BL1及superboot结合在一起了,如果有哪位arm-gnu汇编大神非常想知道superboot的具体工作,可以去反汇编(arm-linux-objdump -D -b binary -m arm Superboot4412.bin > superboot.asm &&vim superboot.asm ),或者通过网络入侵友善之臂的网站去找(纯属开个玩笑而已,这可是犯法的事咱不干)。

好了,今天是1/10这到这里吧!欢迎各路大神来指点错误,谢谢大家!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值