嵌入式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发行版本的目录结构也不尽相同):

/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的保存和退出命令

除此之外,还有更多命令行命令,比如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:希望和大家共同进步,有问题可以留言,共同探讨,共同学习。

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

  1. 嵌入式linux实验一vim的使用,嵌入式Linux C语言开发工具—vi/vim实训操作

    Linux上最常用的文本编辑器vi(或vim).文本编辑器是所有电脑系统中最常使用的一种工具.用户在使用电脑的时候,往往需要创建自己的文件,无论是一般的文字文件.资料文件,还是编写源程序,这些工作都离 ...

  2. 嵌入式Linux学习笔记(0)基础命令。——Arvin

    学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹 ...

  3. 嵌入式Linux_C语言开发工具

    C语言开发工具 开发工具和操作系统之间是相互促进的.相互发展的,操作系统离不开软件开发的支持,软件开发工具也离不开操作系统这个平台.Linux操作系统下Linux开发工具的开源方式,可以让大家拥有更多 ...

  4. ARM嵌入式的定义和开发工具介绍

    综述:[e800专稿] ARM嵌入式简介 ARM(Advanced RISC Machines),既可认为是一个公司的名字,也可认为是对一类微处理器的统称. ARM是微处理器行业的一家知名企业,设计了 ...

  5. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  6. Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  7. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  8. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...

    本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  9. 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础

    本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. 机器学习模拟1亿原子:中美团队获2020「超算诺贝尔奖」戈登贝尔奖
  2. 《告别失控:软件开发团队管理必读》一一1.2 成功的程序设计经理为什么难当...
  3. PEOPEO中国区总经理于景:当我谈交互设计时我谈些什么
  4. POI导出人事报表:代码实现
  5. 参会指南 | 首届音视频线上峰会倒计时1天!
  6. ABP入门系列(2)——领域层创建实体
  7. javascript模块_JavaScript中的模块
  8. winform文件迁移工具
  9. zabbix 监控项自动发现过滤_Zabbix使用javascript+jsonpath预处理动态生成监控项
  10. mysql 查看当前使用的配置文件my.cnf的方法
  11. http 301、304状态码
  12. 百度文库付费文档完整查看_无需付费直接下载百度文库!
  13. ssm项目从零到精通的超全解析(含项目源码)
  14. 从已知身份证号码中提取生日和性别
  15. 如何使用Vegas进行调音?
  16. React+Dva使用d3绘图
  17. gd32f103 调试 ad7606
  18. 微信小程序上传图片、长按删除及预览图片
  19. 物联网:断点续传策略及流程图
  20. 2017ACM-ICPC北京区域现场赛 G题 hihocoder1633

热门文章

  1. 短视频推荐算法过程分享,论如何针对推荐算法来优化短视频内容
  2. 微信小程序中使用Base64编码解码
  3. 【Vscode】tab键失效的解决方案
  4. 访问学者如何申请美国J1签证?
  5. scipy中的imread,imresize怎么用
  6. redis rua解决库存问题_Redis事务
  7. 如何为自己的 CSDN博客设置自定义域名?
  8. 谈谈反爬虫“政策与对策”
  9. Android 安卓动画 属性动画 - 缩放动画
  10. matlab函数之reshape()