首页 > 编程语言 >Uboot编译步骤和分析汇编代码

Uboot编译步骤和分析汇编代码

时间:2023-02-10 11:46:53浏览次数:43  
标签:汇编 Uboot name text 编译 marks nodes type id

编译uboot

  •   生成一系列的配置文件:make s5p_goni_config

  •   执行make

  centos下要安装依赖的文件包:yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake

 

生成过程

  start.s ---->start.o

  board.c ---->board.o

  ......c ---->xxxx.o

    

  连接器拼接

    ---->uboot(包含原始代码,调试信息,地址信息等等)

    ---->分析

    ---->arm-linux-objdump -S uboot | less

        -S 显示源代码和反汇编代码

        重定向到less查看器

 

  uboot 剥离调试信息等

    ---->uboot.bin

    ---->运行

 

编译器:把c语言代码编译成汇编语言

汇编器:把汇编语言编译成二进制文件,机器代码

 

分析uboot(objdump 之后)

_start: b reset

34800000: ea000014 b 34800058 <reset>

  1、汇编代码

  2、代码所在内存地址 机器指令 机器指令对应的汇编指令

 

ldr pc, _undefined_instruction

34800004: e59ff014 ldr pc, [pc, #20] ;

34800020 <_undefined_instruction>

  1、汇编代码 伪指令

  机器代码四个字节

    地址也四个字节 放不下指令ldr,pc这些内容

  2、汇编器做了一个处理

  利用pc指针,+20

    与其保存四字节的内容,不如利用pc,保存立即数20就可以了

  流水线(三级) 程序指令运行

  取指         ---->译码           ---->运行

  代码内存到CPU     翻译成机器能识别的二进制   运行

 

  pc指令并不是指向当前运行的这条命令 而是指向当前这条命令+8(取值,译码一共8字节)

  pc,#20 = 0x04+8 = 0x0c

       + 0x14(20) == 34800020

  [pc,#20] = 34800200 异常处理函数开始处代码

  34800020 <_undefined_instruction>:

  34800020: 34800200 .word 0x34800200

 

 

 

标签:汇编,Uboot,name,text,编译,marks,nodes,type,id
From: https://www.cnblogs.com/slowby/p/17108327.html

相关文章