L1D1:嵌入式Linux C语言开发工具及基础命令

嵌入式Linux C语言开发工具及基础命令

一、ubuntu环境搭建

请自行准备VMware workstation15安装包 及 ubuntu18.04.iso镜像文件。可参考链接:VMware Workstation15 安装配置ubuntu-18.04.4
:1、可以在配置语言时将选项选为中文,后续方便开发。2、可在主机上分区出一块200G的空间作为ubuntu专用,可新建一个盘符避免混淆。3、请记得安装VMware tool工具哦 4、请配置网络,确保虚拟机网络和主机在一个网段。

二、linux下文件和目录相关命令

2.1熟悉Linux的文件系统结构

首先我们要明白,linux下一切皆文件,所以我们的linux系统称为文件系统,后续涉及到驱动的操作,实际上都是对设备文件的操作。linux文件系统就是一个树形的分层组织结构,如下图所示(由于Linux是开源的软件,各Linux发行机构都可以按照自己的需求对文件系统进行裁剪,所以众多的Linux发行版本的目录结构也不尽相同):
linux基本文件系统结构图
/bin 存储一些二进制可执行命令文件, ,/usr/bin也存放了一些基于用户的命令文件。
/sbin 存储了很多系统命令, ,/usr/sbin也存储了许多系统命令。
/root 超级用户 root的根目录文件。
/home 普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/boot 存放 Ubuntu系统内核和系统启动文件。
/mnt 通常包括系统引导后被挂载的文件系统的挂载点。
/dev 存放设备文件,我们后面学习 Linux驱动主要是跟这个文件夹打交道的。
/etc 保存系统管理所需的配置文件和目录。
/lib 保存系统程序运行所需的库文件, ,/usr/lib下存放了一些用于普通用户的库文件。
/lost+found 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var 存储一些不断变化的文件,比如日志文件
/usr 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/media 存放 Ubuntu系统自动挂载的设备文件。
/proc 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/tmp 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/opt 可选文件和程序的存放目录。
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核 数据信息。
… …

现在不用死记硬背,后续用的多了,大家自然知道每个目录下放的是什么东西。

2.2文件和目录相关命令

2.2.1 显示当前路径 pwd

右键打开终端,输入pwd,无需加参数,效果如图所示:
在这里插入图片描述

2.2.2 目录信息查看命令 ls

文件浏览是最基本的操作了, 终端下文件浏览命令为 ls,命令格式如下:

ls [选项 ] [路径]

选项出可填写如下内容,代表不同作用:
-a 显示所有的文件以及子目录,包括以“ “.”开头的隐藏文件。
-l 显示文件的详细信息,比如文件的形态、权限、所有者、大小等信息。
-t 将文件按照创建时间排序列出。
-A 和 -a一样,但是不列出“ “.””(当前目录 )和“ “…””(父目录 )。
-R 递归列出所有文件,包括子目录中的文件。
Shell命令里面的参数是可以组合在一起用的,比如组合“ “-al”就是显示所有文件的详细信
息,包括以“ “.”开头的隐藏文件 ls命令使用如下图所示:
在这里插入图片描述

2.2.3 文件权限修改命令 chmod

如上图所示,ls -l出来的内容是详细信息,最前面一串字符代表文件类型+文件权限,drwxrwxr-x代表文件类型为文件夹,创建者权限为可读可写可执行,同组用户权限为可读可写可执行,其他用户权限为可读不可写可执行。具体刨析如图所示:
在这里插入图片描述
如图所示,文件类型为文件夹,创建者可读可写可执行,对应111,八进制中对应7。同组用户可执行,对应001,八进制为1.其他用户可读可写,对应110,八进制对应6。我们可以通过实例演示一下,右键打开终端,创建文件夹,命令如下所示:

mkdir linux_study
cd linux_study
mkdir level1_linuxC_basic
cd level1_linuxC_basic
mkdir day1
cd day1
mkdir testchmod

可通过chmod将创建的文件夹权限修改为716,如下图操作所示,测试结果如图:
在这里插入图片描述

2.2.4 目录切换命令 cd

要想在 Shell中切换到其它的目录,使用的命令是 cd,命令格式如下:

cd   [某一路径]
cd / //进入到根目录“ “/”下 Linux系统的根目录为“ “/””, cd /usr //进入到目录“ “/usr”里面
cd .. //进入到上一级目录。
cd ~ //切换到当前用户主目录

在这里插入图片描述

2.2.5 系统信息查看命令 uname

在很多时候我们需要确认我们使用的系统版本信息,使用uname可列出。

uname -r  //列出系统内核版本号
uname -s  //列出系统内核名称
uname -o  //列出系统信息
uname -a  //列出所有信息

演示如下图:
在这里插入图片描述

2.2.6 文件内容查看命令 cat nl

有时候我们需要在终端下直接查看文件内容,而非使用编辑器打开查看。首先在主机下随便编辑一个txt文档拖到ubuntu下,可使用如下命令及对应组合进行文件内容查看:

cat    //查看文件内容
cat -b //带行号查看文件内容
nl    //带行号查看文件内容

在这里插入图片描述

2.2.7 文件复制命令 cp
cp  a/. b/ -r 将a目录下所有文件拷贝到b目录下(-r 代表对文件夹进行递归)
cp  a/. b/ -i(-i代表与用户的交互提示)

如下图演示中,先在a下创建了递归文件夹,然后cp生成b,使用tree命令查看b目录的树形结构,发现复制完成。tree 可使用 sudo apt-get install tree安装,前提是网络配置正常,如果无网络可在网上查找解决方法,也可私信我共同学习及解决。
在这里插入图片描述

2.2.8 文件创建指令 touch
touch a.c   //在当前目录下创建a.c文件
touch a/a1.c  //在目录a下创建a1.c文件

在这里插入图片描述

2.2.9 文件搬移命令 mv

用于移动文件,即剪切粘贴,有时也可用于重命名文件。

mv a.c b/   //将文件a.c搬移到b目录下
mv b/a.c b/b.c  //将文件a.c重命名为b.c

在这里插入图片描述

2.2.10 文件夹创建指令 mkdir
mkdir mydisk

在这里插入图片描述

2.2.10 文件及文件夹删除指令 rm
rm test.txt    //删除某一文件
rm a/ -rf      //删除某一文件夹

在这里插入图片描述

2.2.11 文件压缩和解压缩 tar
2.2.12 文件的查询和搜索 find grep

三、VI/VIM编辑器

Ubuntu自带了 VI编辑器,但是 VI编辑器对于习惯了 Windows下进行开发的人来说不方便,比如竟然不能使用键盘上的上下左右键调整光标位置。因此我推荐大家使用 VIM编辑器, VIM编辑器是 VI编辑器升级版本, VI/VIM编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作。因此我们确保在有网络的情况下,输入sudo apt-get install vim在线安装。

3.1 熟悉vi的三种模式及模式切换命令

vim 	a.c	//进入a.c

在这里插入图片描述

我们试着在图中输入数字,发现根本没法输入,这不是因为你的键盘坏了。因为 VIM默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:
在这里插入图片描述
在这里插入图片描述

3.2 熟练的使用vi的拷贝和粘贴、删除命令

在这里插入图片描述

3.3 熟练的使用vi的保存和退出命令

个人使用x进行保存并退出,代码量大的话切换到底行按w先进行保存

除此之外,还有更多命令行命令,比如set number设置显示行号set nonumber取消显示行号1G代表移动光标到第一行 G代表移动光标到最后一行/string 查找字符串 找到以后可以按n查找下一个 N查找上一个%s/str1/str2/g (:范围s/str1/str2g)把全文的str1替换为str2 加g代表全部替换,不加默认只换第一个range y 块复制 例::1,10 y 复制1到10行的内容

四、计算机基础知识

4.1 冯诺依曼模型

在这里插入图片描述

4.2 程序发展及程序设计步骤

程序发展:机器语言->汇编语言->高级语言
程序设计步骤:编辑(VI)->编译(gcc)、链接(ld)->执行、调试

五、数据的表示

5.1 数值数据表示

数据包括十进制、二进制、十六进制、八进制。

5.2 非数值数据表示

ASCII码可以将非数值数据转换为数值数据 ,在linux终端在这里插入图片描述
下可使用man ASCII,要学会使用man手册,后续开发常用。

六、程序的编译和调试

6.1 gcc编译器使用

先安装gcc编译器,在终端输入此命令:sudo apt-get install gcc,使用方法如下:

gcc [选项]  [文件名字]
选项可填如下内容:
-c 只编译不链接为可执行文件,编译器将输入的 .c文件编译为 .o的目标文件。
-o::<输出文件名 > 用来指定编译结束以后的输出文件名,如果 不 使用这个选项的话 GCC默认编译出来的可执行文件名字为 a.out。
-g 添加调试信息,如果要使用调试工具 (如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
-O 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
-O2 比 -O更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

gcc -o -Wall a.c a       //代表把a.c编译为a可执行程序,并且在编译过程中输入警告信息。

在这里插入图片描述
gcc编译的具体过程:预处理、编译、汇编、链接

(1)预处理: gcc -E a.c -o a.i		//生成预编译文件
(2)编译: gcc -S a.i -o a.s			//生成汇编代码
(3)汇编: gcc -c a.s -o a.o 			//生成目标文件
(4)链接: gcc -o a a.o				//链接,生成可执行文件

在这里插入图片描述

七、总结与思考

1、linux文件系统与windows文件系统有什么区别?
答:linux下一切皆文件,linux文件系统从“/”根目录开始,再分层,没有所谓的CD盘的区别,在linux系统U盘是自动挂载在根目录下的etc下一个子文件夹上。

2、gcc作为一个交叉编译器,如何生成ARM架构可以执行的程序?
答:换一个交叉编译器,将文件编译成ARM架构可执行的文件。如arm-linux-gnueabihf-gcc

3、在VI编辑器中如果我们想将一个文件中的第5到第30行中的字符“abc”替换成“ABC”我们使用什么命令?
答:5,30s/abc/ABC/g

4、在ASCII码表中字符‘3’对应的是数值?
答:0x33

ps:希望和大家共同进步,有问题可以留言,共同探讨,共同学习。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值