嵌入式Linux开发工具

一、文本编辑器-vim + vscode(使用并配置vim、安装以及使用插件+远程连接vscode)

1、vi/vim/gvim:文本编辑器  gedit emac(脱离鼠标)

1.适用场景:单文件编辑;vim+插件(高度定制) > IDE

2.vim模式:命令行(初次进入,按‘a’,‘i’进入插入模式)、底行模式(在命令行输入':'进入底行模式,‘wq’保存退出)、插入模式(摁‘esc’切换为命令行模式)

3.vim配置(vimrc):

修改 /etc/vim/vimrc文件(行号、缩进风格、鼠标支持)

安装插件 

4.vim使用

①命令行下:

yy + p - 复制后粘贴

dd - 删除

u - 恢复上一步

②底行模式下:

查找 -  /*** 或者 ?***

替换 - s/a/b (用b替换a)  只替换第一次出现的a,后面加个/g则替换整行;前面加 i,j 代表替换范围在i到j之间 ;用 %s/a/b/g 表示全文替换;s/a/b/gc 挨个询问是否需要替换

编辑多个文件:vim 文件1 文件2 文件3  跳转:n文件名

文件保存 - w r

多文件编写 - sp+文件名

2、优秀第三方编辑器

sublime、notepad++、vscode

3、IDE

QtCreator、vs2019

二、编译器-gcc(常用编译选项,静态库和动态库的制作与使用)

1.gcc概述:GNU计划提供的编译器(Linux cc编译器)(编译工具链--交叉编译工具链)

2.什么是交叉编译?.c --> .s -->.o  --> elf

a.源文件到可执行文件经历哪几个步骤?(预处理、编译、汇编、链接)

b.预处理的任务:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef)(#开头的代码)

c.编译的任务:检查语法,转成汇编,生成汇编文件(.s/S)

d.汇编的任务:编译汇编文件,生成目标文件(.o)

e.链接的任务:链接所有目标文件,生成符号表,生成可执行文件

交叉编译:在宿主机下编译出在目标机下运行的代码的过程(在当前CPU平台下编译出在其他CPU平台运行的代码的过程)

3.编译选项:

-o (可执行重命名:elf格式)

-E (编译器只进行预处理)

-I (大写i)(指定头文件的第三方搜索路径)

-S (进行编译阶段)

-c  (进行汇编阶段)

-O1 -O2 -O3 (编译优化)

-w -Wall(开关警告信息)

4.静态库和动态库的制作与使用

①库函数(保存在库文件):printf、scanf、strcpy、strcat

②库文件:保存函数和变量,里面的函数和变量只能使用,但是看不到其实现

        库文件的分类:

                静态库.a:保存的函数和变量,在编译阶段加载到可执行文件中

                动态库.so:保存的函数和变量,在执行阶段加载到可执行文件中

        使用静态库和动态库的区别(可执行文件的区别)

                a.使用静态库编译出来的可执行文件大小 > 使用动态库编译出来的可执行文件大小 -->         内存的开销

                b.使用静态库编译出来的可执行文件执行速度 > 使用动态库编译出来的可执行文件执          行速度

                c.使用静态库编译出来的执行文件升级 < 使用静态库编译出来的执行文件升级

                d.使用静态库编译出来的执行文件程序部署 > 使用静态库编译出来的执行文件程序部署

③库文件的存放路径(编译时,编译器会自动到这两个目录里找需要链接的库文件):

        系统运行所需要的库文件: /lib

        第三方软件和工具运行所需要的库: /usr/lib

④制作静态库

        a.将目标源文件编译成目标文件; gcc -c 目标源文件 

        b.使用ar工具生成制作静态库;     ar -rcs 所要生成的库文件名字 目标文件(lib+库名+后缀.a)(rcs:库不存在就创建,存在就更新)

        例如: ar -rcs libabb.a add.o

⑤使用静态库

        -l(小写L):指定加载哪个静态库   (-l库名)

        -L:指定加载的库文件的第三方搜索路径

        例如:gcc 源文件 -l库名 -L库存放的路径

⑥动态库的创建

        gcc -shared -fPIC -o 库名.so 源文件.c

⑦动态库的使用

        gcc 源文件.c ./库名.so -o 可执行文件

三、调试器-gdb(断点调试、查看内存、调试内存错误)

gdb是GNU发布的一款功能强大的程序调试工具

gdb主要完成下面三个方面的功能:

        1.启动被调试程序

        2.让被调试的程序在指定的位置停住

        3.当程序被停住时,可以检查程序状态-变量值

学会GDB的三步走:

1、学会使用GDB(基础命令)

        run :在调试器中运行程序

        list :查看程序源码

        break+行号 :设置断点

        break+行号+if条件 :设置断点

         break+函数名 :设置断点

        info break :查看断点信息

        delete+断电编号 :删除断点

        enable/disable :使能断点

        print+变量名 :查看变量值

        next :单步执行,不进入子函数

        step :单步执行,进入子函数 

        continue :继续执行,知道遇到下个断点

        finish :继续执行,在函数内部时,执行到函数结束

        call + 变量名 :调用函数

        print + 变量 = 值 :设置变量的值

        clear :清除所有断点

        ptype + 变量 :查看变量类型

        gdb + 可执行文件 + --tui :启动图形化调试串口

        layout asm :显示汇编

        layout src :显示源代码

        layout split :显示源代码+汇编程序

2、掌握GDB的场景的使用技巧(多任务、网络程序、内存管理、core、汇编程序)

3、实现GDB(实现一个调试器:应用程序)

四、工程管理器-make(编写makefile,多目录的makefile编写)

1、什么是工程?

        多个源文件+其他文件(图片+头文件+脚本文件)

2、工程管理器的作用?

        编译多个源文件?----- gcc+所有源文件 -o   —> 可执行文件  ----> 工程管理器的作用就是可以实现自动编译

3、make的依赖于makefile文件

4、makefile文件是一种脚本文件(批处理),存在相关语法

5、makefile语法:

        ①三要素:目标、依赖、命令

        ②格式:

        目标:依赖

        (tab)命令

        ps:目标:最终生成的文件;依赖:生成目标时所需要的文件;命令:生成目标时,需要执行的命令

6、make执行顺序;

        make:默认从第一个目标执行

        make+目标体:从对应的目标体执行

        如果目标体后面依赖的文件是一个目标的话,先执行对应的目标,再执行目标体的命令

$@表示目标文件的名称,包含扩展名
$^表示所有的依赖文件,以空格隔开,不重复
$<表示第一个依赖文件的名称
$+表示所有的依赖文件,空格隔开,可以重复
$*表示目标文件的名称,不包含扩展名
$?依赖项中,所有比目标文件新的依赖文件

7、多级目录下的makefile

        1.顶层makefile:总控makefile 

                进入各个功能子目录下执行make命令,将各个子目录下的.o文件链接成可执行文件

        2.子目录makefile:功能makefile

                将当前目录下的.c文件编译生成.o文件

        3.scripts目录下makefile:头文件makefile

                定义一些变量

 五、shell编程

1、shell编程的定义

        Shell是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

2、程序基础

        1.程序必须以下面的行开始(必须放在文件的第一行)

                #!/bin/sh :#!迎来告诉系统它后面的参数是用来执行该文件的程序

        2.要使脚本可执行:

                chmod + x 文件名 然后,可以通过输入:./文件名 来执行脚本

3、变量

        shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。

        赋值: 变量名=值 (=两边不能有空格)

        取出变量则在变量名前加一个美元符号($)

默认变量

$#传入脚本的命令行参数个数
$*所有命令行参数值,在各个参数值间留有空格
$0命令本身(shell文件名)
$1第一个命令行参数
$2第二个命令行参数

4、语句

if语句

If [expression]
	then
		#code block
	fi 
If [expression]
	then
		#code block
	else
		 #code block
	fi



If [expression]
	then
		#code block
	else if [expression]
		 then
		 	#code block
		  else
			#code block
		  fi
	fi

 for语句

	for var in [list]
	do
		#code block
	done

 其中var是循环控制变量, [list]var需要遍历的一个集合,do/done包含了循环体,相当于c语言中的大括号另外dofor被写在同一行,必须在do前面加上“;”如:for var in [list];do

while 语句

	while [condition]
	do
		#code block
	done

until 语句

	until [condition]
	do
		#code block
	done

whileuntil的区别在于while为真时执行,until为假时执行;

case语句

	case “$var” in
		contidion1)
			;;
		contidion1)
			;;
		*)
		default statements;;
	esac

六、git版本管理工具

七、Cmake

八、内存检测工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值