嵌入式系列文章之第一章 C语言の第一节 必备Linux命令和C语言基础

嵌入式(Linux)系列文章目录

第一章 C语言の第一节 必备Linux命令和C语言基础


文章目录


前言

本文章采用VMware Workstation Pro进行嵌入式(Linux)系列学习

从零开始,重新学习(嵌入式相关内容)并记录知识点(涉及基础c语言(数据结构)、linux编程、shell脚本、文件io、网络编程)等),同时也是为了方便自身回顾,如有不对的地方请大佬多多指教,谢谢!->欢迎评论区留言


第一章 C语言

第一节 必备Linux命令和C语言基础

1.环境安装(Linux开发环境搭建)

  • 保留原有Windows软件的基础上,通过远程连接软件(例如SSH),可远程操作公司服务器,进行Linux开发
1.1 虚拟机安装
  • VMware-workstation 10(软件本身.exe,其他虚拟机:virtualbox、VMware-player)
  • VMware-workstation软件界面
    VMware-workstation软件界面
  • 创建新的虚拟机
    • 第一步 双击“创建新的虚拟机”->创建典型(推荐)(T)类型的配置
      创建新的虚拟机 典型(推荐)(T)
    • 第二步 安装客户机操作系统
      创建新的虚拟机 稍后安装操作系统
    • 第三步 选择客户机操作系统
      创建新的虚拟机 选择客户机操作系统
    • 第四步 命名虚拟机及选择虚拟机存放位置(注意:磁盘至少有10G空间且最好是新建的文件夹)
      创建新的虚拟机 命名虚拟机及及选择虚拟机存放位置
    • 第五步 指定磁盘容量
      创建新的虚拟机 指定磁盘容量
    • 第六步 自定义硬件(内存不能超过实际内存大小)
      创建新的虚拟机 自定义硬件
    • 第七步 虚拟机创建完成度50%
      创建新的虚拟机 完成度50%
  • ubuntu-14.04.5-desktop-i386.iso(系统安装光盘)
    创建新的虚拟机 系统安装光盘
1.2 linux系统安装
  • 提示(问题)-解决办法:直接确定或关闭
    创建新的虚拟机 问题一
    创建新的虚拟机 问题二
  • 开始安装linux系统
    • 第一步 双击“Install Ubuntu”
      安装linux系统 双击“Install Ubuntu”
    • 第二步 点击“Continue”
      安装linux系统 双击“Continue”
    • 第三步 自行分区:先点击“Something else”再点击“Continue”(可以不做该步骤,主要是为了方便后续理解linux的文件结构)
      安装linux系统 自行分区
    • 第四步 分区过程
      ① 新建分区表:点击“New Partition Table…”->点击“Continue”
      分区过程 新建分区表
      ② 新建“/”根分区:5G、格式化成Ext4格式(优势:日志系统、磁盘易恢复)

注:
linux中的目录结构(文件夹)对应实际的物理分区
后续所有的分区操作:需要先点击“free space”再点击左下角“+”才能开始分区

分区过程 新建“/”根分区
③ 新建“boot”分区:存放系统启动过程中的重要文件
分区过程 新建“boot”分区
④ 新建“swap area”交换分区(虚拟内存):一般为物理内存的1~2倍(实际为1G,故这里设置为2000M)
分区过程 新建“swap area”交换分区
⑤ 新建“home”分区:默认为剩下(目前未分配)的所有空间
分区过程 新建“home”分区
⑥ 分区结果(完成):点击“Install Now”,如果还有其他界面直接“Continue”即可
分区过程 分区结果(完成)

1.3 常规配置:自行设置->点击“Continue”
  • 设置用户名和密码(以后要用,别忘了!!!):删除Your computer’s name中的“-virtual-machine”,即
    linux环境配置 设置用户名和密码
  • 等待安装完成:根据配置而定(3min~40min)
    linux环境配置 安装
1.4 安装完成、其他配置及打开命令终端(工作界面)

注:有一个弹窗,但我忘了我点的什么然后鼠标键盘就失灵了(具体问题直接百度),CTRL+ALT+F1然后回车…过了一会就弹出了登录界面

  • 用户登录界面:输入密码
    linux安装完成 用户登录界面
  • 其他配置项(根据需求选择,我拒绝了)
    linux安装完成 新版发布升级询问
  • 确认拒绝升级及后续升级方法
    linux安装完成 再次确认升级及后续升级方法
  • 安装完成界面(进度100%)
    linux安装完成 安装完成界面(进度100%)
  • 打开命令终端:双击左上角->搜索“Terminal”->双击
    linux安装完成 打开命令终端
  • 命令终端界面(工作界面)展示
    linux安装完成 命令终端界面

2.文件和目录相关命令

2.1 Linux的文件系统(树形的分层组织结构)
/          // 根目录
|—— / bin  // 二进制(binary)文件
|—— / boot // 启动文件:存放的都是系统启动时要用到的程序
|—— / dev  // 包含了所有的Linux系统中使用的外部设备
|—— / etc  // 存放了系统管理时要用到的各种配置文件和子目录
|—— / home // 家目录:普通用户的主目录
|—— / lib  // 存放系统动态连接共享库
|—— / mnt
|—— / opt
|—— / proc
|—— / toor
|—— / sbin
|—— / srv
|—— / sys
|—— / tmp
|—— / usr
|—— / var
|—— / root // 根用户(超级用户)的主目录
2.2 文件系统层次结构标准FHS
2.2.1 介绍
  • Filesystem Hierarchy Standard(文件系统层次结构标准)
  • Linux是开源的软件,各Linux发行机构都可以按照自己的需求对文件系统进行裁剪,所以众多的Linux发行版本的目录结构也不尽相同
  • 为了规范文件目录命名和存放标准,Linux基金会颁发了FHS(Filesystem Hierarchy Standard:文件系统目录标准)
2.2.2 目录
  • / bin:bin是二进制(binary)英文的缩写
  • / boot:存放的都是系统启动时要用到的程序
  • / dev:包含了所有的Linux系统中使用的外部设备
  • / etc:存放了系统管理时要用到的各种配置文件和子目录
  • / lib:存放系统动态连接共享库
  • / home:普通用户的主目录
  • / root:根用户(超级用户)的主目录
2.3 浏览目录
  • 当打开命令终端窗口,用户就处在自己的用户主目录的位置(学习文件系统命令,就从自我定位开始)
2.4 文件命令(CTRL+SHIFT+N:切换一个窗口,CTRL+SHIFT+T:切换一个标签)
2.4.0 其他命令操作

注:在linux系统中的退出U盘操作:exit退出命令终端->左边栏找到U盘->右键->点击“Eject”

  • 清屏
enshang@enshang:~$ clear
  • 显示文件系统的信息
enshang@enshang:~$ df -T
  • 查看预处理文件
enshang@enshang:~$ gcc -E enshang.c -o enshang.i
enshang@enshang:~$ vi enshang.i
  • 命令行格式下自动调格式
gg=G
  • vsp 可在底行模式下编辑另外一个文件(vsp+文件名)
2.4.1 查询命令使用(man+要查询的命令)
enshang@enshang:~$ man pwd

man查询命令结果

2.4.2 pwd命令(显示用户在文件系统中的当前位置)
  • 该命令没有任何选项和参数,命令执行结果显示为绝对路径名
enshang@enshang:~$ pwd
/home/enshang
2.4.3 ls命令(列目录内容)
  • 格式
ls [options] [files_or_dirs]
  • 示例
  • ls -a:不忽略以“.”开头的文件(隐含文件)
    ls -a:不忽略以“.”开头的文件(隐含文件)
  • ls -l (可加文件名):使用长格式方式显示
    ls -l:使用长格式方式显示
  • ls -R (可加文件名):递归显示目录中的目录(文件)
2.4.4 cd命令(改变目录)
  • 绝对路径或相对路径
enshang@enshang:~$ cd /home/enshang // 绝对路径
enshang@enshang:~$ cd ../           // 相对路径
  • 回到家目录
enshang@enshang:~$ cd
  • 回到上一级目录
enshang@enshang:~$ cd ..
  • 回到上一次的工作目录
enshang@enshang:~$ cd -
2.4.5 查看文件内容的命令
  • Cat:文本/代码段 显示
enshang@enshang:~$ Cat -s Enshang.c // 多个空行合并成一个空行显示
enshang@enshang:~$ Cat -b Enshang.c // 加行号显示
  • nl:加行号(类似Cat -b Enshang.c)
enshang@enshang:~$ nl Enshang.c 
  • head -n 文件名:显示(前n行,默认10)
enshang@enshang:~$ head -10 Enshang.c 
  • tail -n 文件名:显示(后n行,默认10)
enshang@enshang:~$ tail -10 Enshang.c 
2.4.6 文件复制(cp)命令
  • 格式
cp [options] file destination
  • 示例
  • i:覆盖时交互提示
enshang@enshang:~$ cp enshang.c ../ -i
cp:overwrite '../enshang.c'? y
  • r:对文件夹递归
enshang@enshang:~$ cp -r Enshang/ enshang
  • 复制多个文件到文件夹(cp [options] file1 file2 dest)
enshang@enshang:~$ cp enshang1.c enshang2.c ../
2.4.7 文件移动(mv)命令(可更改文件名)
  • 格式:mv [options] file destination
enshang@enshang:~$ mv enshang.c ../
enshang@enshang:~$ mv enshang.c ../Enshang.c // 移动且重命名
  • 移动多个文件:mv [options] file1 file2 destination
enshang@enshang:~$ mv enshang.c Enshang.c
2.4.8 创建(touch:创建或更新时间戳)和删除(rm)文件命令
  • 格式:rm [options] <文件名>…
  • 示例:
  • rm -i file:删普通文件
  • rm -r directory:删文件夹(无交互提示)
enshang@enshang:~$ rm Enshang
rm:cannot remove 'Enshang':Is a directory
enshang@enshang:~$ rm -r Enshang/
2.4.9 创建(mkdir: -p(级联创建))和删除(rm -r)目录
enshang@enshang:~$ mkdir Enshang
enshang@enshang:~$ mkdir Enshang/enshang    // 在已创建的Enshang目录下新建enshang目录
enshang@enshang:~$ mkdir -p Enshang/enshang // 直接新建Enshang目录及其子目录enshang
2.5 文件的权限
  • 权限:用户(创建者 同组用户 其他用户 )
权限类型应用于目录应用于任何其他类型的文件
读(r)授予读取目录或子目录内容的权限授予查看文件的权限
写(w)授予创建、修改或删除文件或子目录的权限授予写入权限,允许修改文件
执行(x)授予进入目录的权限允许用户运行程序
无权限无权限

3.vi编辑器的使用

3.1 vi的三种模式和模式切换命令
3.1.1 vi编辑器
  • vi是Linux中最基本的编辑器。但vi编辑器在系统管理、服务器配置工作中永远是无可替代的。
3.1.2 vi编辑器的基本使用方法(Demo)
enshang@enshang:~$ vi enshang.c
3.1.3 vi的三种模式
模式功能
命令行模式用户在用vi编辑文件时,最初进入的模式(可以进行复制、粘贴等操作)
插入模式进行文件编辑,按ESC键可以回到命令行模式
底行模式光标位于屏幕的底行(只能在底行模式输入命令,可以进行文件的保存、查找、替换、列出行号等)
3.1.4 vi模式的切换命令
命令功能
a(Append)进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符
A光标直接移动到当前光标所在行的行尾位置开始插入键盘输入的字符
i(Insert)进入编辑状态,从当前光标的位置开始插入键盘输入的字符
I光标直接移动到当前光标所在行的行首位置开始插入键盘输入的字符
o(Open)进入编辑状态,并在当前光标所在行的下方插入一个新行,光标将移到该新行的行首,以后键盘输入的字符将插入到光标位置
O(Open)进入编辑状态,并在当前光标所在行的上方插入一个新行,光标将移到该新行的行首,以后键盘输入的字符将插入到光标位置
ESC进入命令状态
:! Command在vi中执行外部命令Command(例如:2.4.1中的内容、data),按回车键可以返回vi继续工作
3.2 vi的拷贝和粘贴命令(从当前光标位置(行)进行相关命令操作)
命令功能
[N]x(Expurgate)删除从光标位置开始的连续N个字符(并复制到编辑缓冲区)
[N]dd(Delete)删除从光标位置开始的连续N行(并复制到编辑缓冲区)
[N]yy(Yank)复制从光标位置开始的连续N行到编辑缓冲区
p(Put)从编辑缓冲区复制文本到当前光标位置的下一行(即粘贴)
P从编辑缓冲区复制文本到当前光标位置的上一行(即粘贴)
u(Undo)取消上一次操作(即恢复功能)
3.3 vi的保存和退出命令
命令功能
:q(Quit)退出没有修改的文件(若文件被修改了而没有保存,则此命令无效)
:q!强制退出,且不保存修改过的部分
:w(Write)保存文件,但不退出
:x(Exit)保存文件并退出(类似:wq)
:w File另存为File给出的文件名,不退出
:r File(Read)读入File指定的文件内容插入到光标位置
3.4 vi的光标命令
命令功能
h方向键,向左移动光标一个字符的位置,相当于键“←”
j方向键,向下移动光标一个字符的位置,相当于键“↓”
k方向键,向上移动光标一个字符的位置,相当于键“↑”
l方向键,向右移动光标一个字符的位置,相当于键“→”
:N移动光标到第N行(N待定)
1G移动光标到文件的第1行
G移动光标到文件的最后1行
:set number(nu)设置显示行号
:set nonumber(nonu)取消显示行号
3.5 vi的查找命令
  • /String 查找命令
  • n 继续查找
  • N 反向查找
  • 支持正则表达式比如:/^the(以他为开头的行 )、/end$(以他为结尾的行)
3.6 vi的替换命令
  • 利用:s命令可以实现字符串的替换(:(范围,若为空则默认当前行) s/Old/New)
:s/str1/str2      // 光标所在位置的一行中符合条件的第一个字符串str1替换为str2
:s/str1/str2/g    // g:表示符合条件的字符串str1全部替换为str2
:./$s/str1/str2/g // .:表示当前行,$:表示最后一行
:1,$s/str1/str2/g
:%s/str1/str2/g   // %:全文替换,类似1,$
3.7 vi的复制和剪切命令
y0:将光标至行首的字符拷入剪贴板
y$:将光标至行尾的字符拷入剪贴板
d0:将光标至行首的字符剪切入剪贴板
d$:将光标至行尾的字符剪切入剪贴板
range y:块复制
range d:块剪切

4.基础知识

4.1 计算机基本结构(冯诺依曼模型)
  • 计算机硬件构成(5部分)
    计算机硬件构成(5部分)
  • 存储程序的思想:系统的运行过程就是按照一定的顺序不断的执行存储器中的程序指令的过程
  • 存储器的分类
  • 主存储器即内存。程序中待处理的数据和处理的结果都存储在内存中
  • 外存储器是用来长期保存数据的大容量存储器
  • 寄存器是CPU内部的高速存储器,速度快,数目少
4.2 什么是程序(programe)
  • 广义上讲,程序是为了实现一个特定的目标而预先设计的一组可操作的工作步骤,是系统可以识别的一组有序的指令(二进制文件),存储在磁盘上,被加载到内存中执行
    计算机硬件层级关系(软件执行)
4.3 程序设计语言的发展
  • 机器语言
  • 直接使用机器指令(0/1序列)来设计程序,可以被计算机系统直接识别,和自然语言完全不同,难于记忆和理解,工作量大,效率低,无法移植
00011000
01011010
  • 汇编语言
  • 把机器指令符号化,即通过一组简单的符号来表示机器指令,更接近于自然语言,更容易理解和使用,和机器语言一样,开发工作量大,无法移植
MOV A,1000
MOV 1010,A
  • 高级语言
  • 和特定的计算机系统无关,更接近于人类自然语言。一条语句对应多条机器指令,工作量小,开发效率高(BASIC,FORTRAN,PASCAL,C,C++,Java,C#等)
4.4 程序设计步骤

程序设计步骤

5.数据的表示

5.1 数值数据的表示(十进制、二进制、十六进制和八进制)
5.1.1 计算机数据表示
  • 送入计算机的数字,字母,符号等信息必须转换成0/1组合的数据形式才能被计算机识别。能够进行算术运算得到明确数值概念的信息称为计算机数值数据,其余的信息称为非数值数据
5.1.2 基数与各数位的权
  • 基数是指该进位制中允许选用的基本数码的个数
  • 位权的大小是以基数为底,数字所在位置的序号为指数的整数次幂
5.1.3 各进制
进制简介举例(0~7)
基数为2的进位制(进制只有0、1两种数码,计数逢2进位)000 001 010 … 110 111
基数为10的进位制0 1 2 … 5 6 7
基数为8的进位制000 001 002 … 005 006 007
十六基数为16的进位制(十六进制有0、1、2…9、a、b、c、d、e、f共16种数码,计数逢16进位)0x00 0x01 0x02 … 0x05 0x06 0x07
  • 二进制(原码、反码、补码)计算
  • 正数

原码 = 反码 = 补码

  • 负数(最高位(符号位):0-正,1-负)

反码 = 原码(1变0,0变1); 补码 = 反码 + 1

  • 十进制转换(计算) = (二/十六)进制数 * (二/十六)进制基数^(当前数位置-1)
5.2 非数值数据的表示
5.2.1 非数值数据表示
  • 非数值数据包括文字、符号、图像、语言和逻辑信息等,也都是以0/1形式存在
  • 字符数据在机器内也被变换成二进制编码的形式。国际上普遍采用的一种编码是美国国家信息交换标准代码,简称为ASCII码
非数值数据char/unsigned char
表示1个字节
二进制00000000~11111111
十进制0~255
5.2.2 ASCII(0~256个字符)
  • 第一部分由00H到1FH共32个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上
  • 第二部分是由20H到7FH共96个,这96个字符是用来 阿拉伯数字、英文字母大小写和底线、括号等符号,都可以显示在屏幕上
  • 第三部分由80H到0FFH共128个字符,一般称为[扩充字符],128个扩充字符是由IBM制定的,并非标准的ASCII码,这些字符是用来表示框线、音标和其他欧洲非英语系的字母
5.2.3 字符‘0’和整数0的区别
ASCII(整数)字符
0NULL(空)
480

6.程序的编译和调试

6.1 gcc编译器
  • gcc(GNU Compiler)是GNU推出的多平台编译器,可将C、C++源程序编译链接成可执行文件,支持以下后缀
文件后缀含义
.cc语言源代码
.h程序所包含的头文件
.i已经预处理过的C源代码文件
.s汇编语言代码文件
.o编译后的目标文件
gcc 执行文件名.c -o 执行文件名 -Wall

-o 输出可执行文件
-c 只要求编译器输出目标代码(.o文件),而不必输出可执行文件
-g 用于调试
./执行文件名 查看输出结果

注:-Wall作用:如果语法不规范,则显示语法警告;
    若为gcc 执行文件名.c -Wall,则输出的可执行文件为a.out,查看输出结果时应输入./a.out
6.2 程序调试
  • 利用__FILE__,LINE,__FUNCTION__实现代码跟踪调试(2个下划线)
#include <stdio.h>

int main(int argc, char **grgv)
{
	printf("%s, %s, %d\n",__FILE__, __FUNCTION__, __LINE__); // 文件名 函数名 行号
	return 0;
}
6.3 C语言基础
6.3.1 一个程序应当包含两部分内容
  • 对数据的描述:在程序中要指定数据的类型和数据的组织形式,即数据结构
  • 对操作的描述:即操作步骤,也就是算法
6.3.2 代码结构

代码结构

6.3.3 算法的基本概念
  • 做任何事都有一定的步骤。步骤要按照一定的顺序进行,缺一不可,次序也不能错,广义的说,为解决一个问题而采取的方法和步骤就称为算法
  • 简单算法举例
  • 计算 1x2x3x4x5…x10
#include <stdio.h>

int main(int argc, char **grgv)
{
	int i = 1, j = 2;
	while(i <= 10)
	{
		j = j * i;
		i++;
	}
	printf("1x2x3x4x5...x10 = %d\n", j);
	return 0;
}
  • gcc作为一个交叉编译器,如何生成ARM平台的执行程序?

答:采用ARM编译器重新编译即可

总结

本章为嵌入式学习系列文章 第一章:C语言の第一节 必备Linux命令和C语言基础

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值