一、Linux介绍及环境配置
Linux介绍及环境配置
一、UNIX、LINUX和GNU简介
1、UNIX简介

2、Linux

1)操作系统内核+软件=操作系统
2)操作系统内核-能统一的管理硬件了
3)基于UNIX,UNIX不开源,对硬件要求专一,因此出现了Linux
3、GNU

Linux=linux内核+软件
二、环境介绍

三、解压文件

四、网络配置

1、桥接模式-和开发板通信首选,可以访问外网

局域网内可以、校园网或公司内网不可以
2、nat模式-访问外网首选,不能访问局域,不能和板子通信
主机虚拟出来的虚拟机
可以访问外网,但不能通过外网访问虚拟机

如果是校园网下载软件可以选择nat模式
3、仅主机模式-不能访问外网,也不能访问局域网
了解即可
4、网络配置
编辑-虚拟网络编辑器-还原默认设置(每次配置前还原)
1)先在虚拟网路编辑器设置


2)在网络适配器使用

重新配置





5、在浏览器中可以打开

如果打不开:设置DNS


默认网关一般是ip最后变成.1
二、软件包管理
一、软件包管理
(一)流行的软件包管理机制

1、APT软件包优点
1)检查和修复软件包依赖关系
2)在线获取软件包
(二)软件包的类型
1、二进制(deb)和源码包(deb-src)

2、file 文件包名-查看软件包类型

file命令-查看

3、软件包的命名

4、软件包的命名


二、在线软件包管理
(一)APT的工作原理

(二)更新软件源

1、vi 软件包:直接更改
2、图形界面更换软件源



3、更新完软件包之后要用sudo apt-get update更新(要保证网络通畅)

(三)APT相关命令

三、离线软件包管理
在安装和删除时需要sudo超级用户权限
dpkg命令

![]()
注意删除的时候跟的是软件名不是软件包名
三、linux shell命令(文件搜索、文件处理、压缩解压)
一、查看文件相关命令
(一)查看命令
1、cat命令:从前往后读
cat+文件:显示代码
cat/cat -:输入什么输出什么
2、tac命令:从后往前读
3、more命令:显示打印了多少(只能向前,不能向后)



4、less +文件
上下键控制 q退出

5、head+文件名:默认显示前10行
(二)硬链接和软链接

1、创建链接的方式
硬链接 :ln 文件名 硬链接名
通过硬链接可以修改文件的内容

软连接: ln -s 文件名 软连接名

inode号

2、将原来的文件移动(硬链接的优点)




3、从新移动回原文件

4、如果删除原文件,创建同名文件(软链接的优点)

二、文件搜索相关命令
(一)查找文件

1、按名查找


忽略大小写

2、按类型查找

3、符合条件




(二)查找文件内容




(三)其他相关命令


三、文件处理相关命令
1、cut命令


2、sed命令 修改


1、打印指定行 -n

2、删除指定行(不加-i,只在预览中可以看,加了-i,实际的文件会修改)
1)预览删除
![]()
2)实际删除
![]()
3、追加 a
1)在第一行追加hi
![]()
![]()
4、在当前行进行插入 i
![]()

5、替换 s(g表示的是全篇)

3、awk命令(按列操作)(默认以空格为分割)

1)打印行号个第一个字段

2)打印列数和第三个字段

3)打印最后一列

4)指定分隔符‘:’
![]()
5)第一行是linux的都打印出来


四、解压缩相关命令
(一)解压缩文件的意义


(二)解压缩相关的命令

1、移植性好,但不能归档只能压缩单个文件,不能压缩目录


分别压缩和解压,不会归档


2、



*解压全部bz2适配的压缩包

3、可以压缩目录,保留源文件;方便在Linux和windows间交换文件



4、zip保留源文件

5、tar:合并归档+压缩


![]()

四、linux shell命令(进程管理、用户管理)
一、进程管理相关命令
(一)进程的概念
1、进程的概念

程序没有生命,进程有生命
(二)查看进程的命令
1、查看进程的命令-ps

PID是进程的唯一标识

PPID展示的是进程的父进程


2、top 实时查看进程 q退出

3、pstree-进程的子父信息以树状图的形式展开

(三)发送信号命令


二、用户管理相关命令
(一)用户管理相关文件介绍



(二)用户管理相关命令介绍
1、创建用户

在/etc/passwd中
![]()


2、修改用户密码

3、修改组名

4、修改家目录(修改路径)

既修改目录又修改用户名

-d:修改路径
-l:修改用户名
5、删除
![]()
五、linux shell脚本编程(概念、变量、语句)
一、shell脚本概述
(一)shell脚本概述

(二)shell脚本编写流程

1、先对命令进行测试
命令没有问题再写进集合中
本质上是shell命令的集合
2、第一个shell文件

3、shell脚本以.sh结尾
4、注释行#
一般shell脚本先要说明一下shell的版本

5、shell脚本是一个解释性的语言,不需要编译,边执行边检查错误
6、执行shell脚本:
1)bash+文件名

2)source+文件名

3)./shell.sh(前提是有执行权限)

二、shell脚本变量上
(一)变量的介绍

(二)变量的作用

环境变量、系统变量(bash)、自定义变量
(三)变量的命名要求

(四)变量的分类

1、定义变量的两种方式(在shell脚本下变量用大写)
注意在shell脚本下,等号的赋值前后是没有空格的

1)直接在终端定义

2)在代码中
![]()

2、删除变量unset(echo自带一个换行)

三、shell脚本变量下
(一)用户自定义变量

1、单引号和双引号


2、为变量赋另外一个变量的值的两种方式
1)反撇号(英文状态下)

![]()
2)双重$

3、数组


4、取消高亮
命令界面:noh
(二)只读变量(适用于变量或者文件名不能被修改)

1、只读变量可以被打印

2、只读变量不能被修改

3、只读变量不能被删除

4、只读变量只能强制关闭终端
(三)位置变量和预定义变量

1、$@:是依次显示每一个数据
$*:是作为一组输出

(四)环境变量


四、shell语句
(一)shell程序

(二)说明性语句-解释语句
1、

(三)功能性语句


以空格隔开



2、

``命令置换符
赋值符号=两边不加空格
加减号+/-两边要加空格
乘号比较特殊需要转译 \*

3、


1)测试字符串是否相等
相等为0

不相等为1

2)-z 测试字符串长度是否为0


3)-n 测试字符串长度是否不为0
4、整数测试


5、文件测试

(四)结构性语句

六、linux shell脚本编程(分支语句、循环语句)
一、shell分支语句
(一)分支语句(对标if)

1、echo $?
如果执行成功会返回0
如果执行失败会返回其他
2、分支语句if

1)test可以用[]代替(注意[]两端要用空格)


也可以打印多行
2)elfi

3)查找命令

查找用户是否存在

二、多路分支语句(对标switch case)
1、分号不能丢弃,最后是esac



三、shell循环语句
(一)for循环
1、


2、$@和$*的区别
1)$@和$*没有区别


2)”$*“将输入的作为一组,而“$@“和原来一样


3、for直接赋值

4、(())

(二)while循环



(三)循环控制语句(对标break和continue)


七、linux shell脚本编程(函数、练习)
一、函数的定义


二、函数的调用


2、传参


三、变量的作用域
1、全局

2、函数体内部

当是局部变量时

八、Linux TFFP服务搭建及使用
(一)TFTP服务器介绍
1、TFTP的介绍
1)什么是服务器
微信、qq、tb客户端
客户端-服务器转发
2)TFTP 简单传输文件 电脑-电脑 电脑-开发板 规定传输规则

端口号:每个进程和服务器都有唯一

2、TFTP文件传输的特点

3、TFTP服务器的实用场景

用命令可以直接下载所需的文件
(二)TFTP服务器搭建
1、配置介绍
1)网络通常
2)及时更新软件源
sudo apt-get update
3)安装服务器和客户端

tftpd:服务器
tftp:客户端
4)修改配置文件
创建tftpboot目录(作为服务器提供文件的目录)
![]()
将他的环境配置到服务器



-l:不依赖其他进程,直接启动

将来开发板下载的文件都在该目录下

5)修改服务器配置后更新

6)测试tftpboot如何使用

下载文件

上传文件

2、常见错误




九、Linux NFS服务搭建及使用
(一)NFS服务器介绍
1、

文件系统放在网络中,可以控制不同电脑的文件系统

开发板的文件系统在网络中,可以在服务器修改



(二)NFS服务器搭建
1、配置介绍
1)安装软件

2)创建目录,新建文件测试nfs
![]()

3)配置nfs的路径

4)重启

5)挂载
本地挂载,挂载到/mnt
板子挂载到根目录/home/linux/nfs/rootfs

6)本地挂载和服务器可以互相共享


7)取消挂载

需要返回其他目录,关闭/mnt
使用sudo umount /mnt

2、常见错误


十、C结构体、结构体数组以及结构体指针
(一)结构体的意义
1、

2、结构体定义
注意分号

(二)结构体的概述

(三)结构体的定义和使用



(三)结构体数组

2、打印方式


(四)结构体指针

十一、结构体嵌套、大小及位域
一、结构体嵌套结构体


二、结构体的大小
(一)结构体的大小


(二)字节对齐


自动对齐,简化判断

(三)结构体大小的计算方法

自身对齐:数据类型
默认对齐:4
有效对齐:取自身和默认的最小值
地址除以有效必须是整除
最终地址,看最大有效

三、位域
(一)位域的定义


(二)位于变量的说明
(三)位域的使用
十二、内存管理
内存管理

“专人转事”
不同数据放在不同的分区


栈区和堆区是代码运行之后才可以,其他之前也可以


十三、动态分配内存
一、动态内存的使用


1、头文件
#include<stdlib.h>


2、申请的空间不能多次释放
3、申请空间成功返回首地址
二、

内存泄露:申请了空间但没有来得及释放
十四、GCC编译工具
一、GCC编译工具(一)
(一)GCC简介

(二)GCC编译过程


1、预处理阶段 .i - 将#的头文件展开
头文件和宏定义
gcc -E test.c -o test.i

2、编译阶段
gcc -S gcc.i -o gcc.s

修改后编译成功

生成汇编文件

3、处理生成目标文件
生成二进制文件

4、链接C库-生成可执行文件

5、简化



二、GCC编译工具(二)
(三)GCC常用选项


1、优化

2、指定头文件的位置


3、分文件

.h:宏定义、结构体共用体、声明函数
.c:函数原型
.c:主函数main

4、-L:指定链接库

三、条件编译
(一)条件编译的概念

1、分开编译

(二)在代码中条件编译

1、#ifdef


2、#ifdef
#else
#endif

3、#ifndef

4、#if 1


5、#define N 1

(三)GCC编译时条件编译

十五、Makefile用法及变量(自定义变量、自动变量、隐含变量)
一、Makefile的重要性
1、编译文件
2、正常编译,文件多的时候操作麻烦

3、决定能不能完成大型工程
二、Makefile的概述

1、自动化编译-makefile
编译效率:make编译过的文件不再编译
正在上传…重新上传取消
三、Makefile的基本语法
1、语法




2、使用
1)创建一个目录

![]()
2)和函数


3)和函数声明

4)减函数


5)减函数声明


6)主函数


7)普通编译


8)makefile编译




9)两步编译


此时编译,只会执行第一个目标sub.o


解决办法:将我们最后需要的test提到最前面,想要实现test需要执行下面的目标


10)修改test.c
此时只有两条命令会重新执行
生成test.o和生成test
由于sub.c和add.c没有发生变化
所以sub.o和add.o不需要重新编译生成


11)删除除了.c和可执行文件
常规:rm *.o
放到makefile中


也可以理解为:不加目标,只访问第二个目标,加了目标,会直接访问此目标




二、Makefile自定义变量
(一)Makefile创建变量的目的
1、


(二)自定义变量




(三)变量的赋值


1、=


2、?=

3、:=


4、+=追加赋值


三、Makefile自动变量

1、$+ $^ $<

2、@$ 不显示命令

3、打印



四、Makefile隐含变量


1、CC:编译器的名字

没有的编译器会报错

2、CFLAGS

3、头文件在不同目录
要指定头文件的路径 -I(绝对或相对)

4、$RM == rm -f

5、% % ==.o .c



















