Uboot编译步骤和分析汇编代码
编译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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫