嵌入式Linux开发工具

Posted 碳水生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式Linux开发工具相关的知识,希望对你有一定的参考价值。

1、文本编辑器    vi vim gedit gvim vim 可高度自定义,适合单个软件开发

2、编译器           gcc

3、库

4、调试器           gdb   资源占有少,免费开源,缺少图像显示,适合小程序开发

5、工程管理器    make(批量处理)自动化编译,提高开发效率
 

为什么使用要学Linux工具,它的优势和作用?

1、可定制  2、开源  3、便携  4、体积小  5、提高开发效率

其他开发环境和IDE

 vs code           相对其他IDE(集成开发环境)小,便捷,功能没有VS 2019 Qt强大

vs  2019           功能强大,体积大,响应慢

Qt

1、文本编译器 vim(单体文件编辑,可高度定制)

 三种模式 

命令行模式   esc

插入模式       a或I

底行模式       命令行模式下 ”:“ wq 保存退出     q!不保存退出

2、编译器 gcc

编译过程:1、预处理  头文件展开,宏定义替换,条件编译 编译选项  -E

                2、编译     检查错误,生成汇编文件后缀名.s      编译选项  -s

                3.汇编       编译成二进制 后缀名.o                       编译选项   -c

                4、链接    编译成了执行文件 后缀名.elf  

                    

.elf特点:

ELF:可执行连接文件格式。

ELF文件优点:

1. 支持不同平台上的交叉编译和交叉链接,可移植性性强

2. 在执行时支持动态链接共享库

特点:

1、包含多平台相关信息,信息编译时由编译器决定

2、生成一种与位置无关的代码——地址无关码,这种代码可在任意位置正确运行,不受绝对地址影响

3、有GNU协议下的大量工具支持

三级优化

               O0不优化

               O1 优化代码

               O2 优化算法

               O3 抽象成数学模型和假象机器模型(支持函数集成化)  

交叉编译器 : 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码 ,本地编译产生的文件 ,不同内核环境无法执行,所以需要经过叫交叉编译器编译在其他平台执行的文件,提高可移植性。

根据链接编译生成可执行文件的链接方式分为静态库和动态库

静态库执行时体积大,运行效率高,,因为编译时会整合到目标程序中,所以不方便修改,需要改整个可执行文件都需要重新编译,后缀.a;

文件后缀.a;动态库体积小,运行效率慢,但方便修改,动态库是将符号链接写入目标文件,在程序中是一个指向符号,,产品更新时只需替换对应函数库,不要重新编译整个可执行文件,后缀.so

库的存放位置:

lib          存放系统程序运行所需库文件

user /lib或user/local/lib     存放用户程序的和第三方程序运行的库

静态库制作

 

 ar 压缩命令

-r 将文件插入备份文件

c  建立库文件

s  创建目标文件索引,这在创建较大的库时能加快时间

-shared  编译生成动态库

-fPIC 生成地址无关码

例:

1、gcc  -c add.c (执行到汇编生成.o文件,add是一个.c文件名)

2、ar  -rcs libadd.a add.o 

3、链接编译

gcc main.c -o mian -ladd -L/user (main是需要编译的函数)

-l 是用来链接编译时所编译程序所以用的库,相当于#include<stdio.h>

-L 链接这个库所在的路径

动态库和静态库的的引用一样,两个库同时存在优先链接动态库

gdb

 

 

make作用

三要素

目标

依赖

命令                 

关系:根据依赖文件,执行命令生成目标文件

用法

多目录makefile用法

          

以上是关于嵌入式Linux开发工具的主要内容,如果未能解决你的问题,请参考以下文章

linux嵌入式驱动开发,makefile到问题

嵌入式Linux开发板

嵌入式里做linux内核开发有没有前途

嵌入式Linux第二部分 - 裸机开发/系统移植/驱动开发/内核开发

嵌入式Linux第二部分 - 裸机开发/系统移植/驱动开发/内核开发

求嵌入式linux开发详细流程(步骤)?