程序编译过程和使用vi在两个文件中复制以及linux中的工具小记

在这里插入图片描述
一、编译过程
1、预编译:展开头文件和宏定义等。pre-compile;
2、编译:***.c–>***.s,将c文件编译成汇编文件;compile;
3、汇编:***.s–>***.o,将***.s文件转成***.o文件;Assembly;***.o文件可以在linux中通过arm-linux-size 命令来查看.text、.data、.bss各段的大小。
bss段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域。
4、链接:***.o+…+***.o–>***,即将多个.o文件链接成一个elf文件。将.text 和.text段链接在一起,.data和.data段链接在一起,.bss和.bss段链接在一起,连接过程通过链接脚本***.lds文件实现。
lds文件实现如下:
在这里插入图片描述
链接过程如下:
在这里插入图片描述
其中,arm-linux-ld 是链接指令,-T表示链接lds文件,-o myboot表示输出文件,最后两个.o文件是输入文件。
此文件可以在linux系统运行,但是无法在裸板上运行。link;executable link file。
5、转成二进制文件:***–>***.bin,将elf文件中的调试信息等剥离后生成二进制文件。

多看几遍下面的视频,P14节
https://www.bilibili.com/video/BV1s4411t7eT?p=14&spm_id_from=pageDriver

二、使用vi在两个文件中复制(从a.txt复制1-4行内容到b.txt
1、使用vi打开a.txt,然后将光标移至第一行处;
2、直接输入 “a3yy 回车即可,出现 3 lines yanked 提示复制成功;
3、使用vi打开b.txt,将光标放在要粘贴的位置,直接输入 ”a3p 回车即可,出现 3 more lines 提示粘贴成功。

三、使用arm-linux-objdump 工具,可以查看**.o文件的机器指令**,以及反汇编代码
objdump -S obj :表示C语言与汇编语言同时显示
在这里插入图片描述
1:指令地址;
2:机器代码;
3和4:反汇编指令。

四、arm-linux-objcopy命令将链接后的文件转成bin文件。
arm-linux-objcopy用于复制一个目标文件的内容到另一个文件中,可以使用不同于原目标文件的格式来输出目的文件,即其可以进行格式转换。
在开发中,一般会用其来将ELF格式的可执行文件转换为二进制格式的文件,arm-linux-objcopy的使用格式如下:
arm-linux-objcopy [-F bfdname | –target=bfdname ]
-O bfdname 或–output-target=bfdname
使用指定格式来输出文件,bfdname是BFD库中描述的标准格式名。

arm-linux-objcopy -O binary myboot myboot.bin

表示将myboot文件按照binary格式转换成myboot.bin文件。

五、hexdump -C myboot.bin
表示将myboot.bin文件同时用二进制格式和ASCII码同时打印出来。

六、armv1,armv2,armv3…armv7表示的arm指令集的版本;
arm7和arm9表示的是arm核硬件的版本号。

七、Makefile编写
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值