Linux中的协议:GPL,LGPL
一、GPL
1.定义
GPL,是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译。GNU通用公共许可证试图保证你共享和修改自由软件的自由。——保证自由软件对所有用户是自由的。
2.特点
(1)给软件以版权保护。
(2)给你提供许可证。它给你复制,发布和修改这些软件的法律许可。
二、LGPL
1.定义
LGPL是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,如果对GPL一点都不了解,有可能在使用自由软件时违反GPL的授权,恐怕会有被起诉的风险。所以任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。
2.特点
LGPL最初是Library GPL的缩写,后来改称作Lesser GPL,即为更宽松的GPL。当一个自由软件使用GPL声明时,该软件的使用者有权重新发布、修改该软件,并得到该软件的源代码;但只要使用者在其程序中使用了该自由软件,或者是使用修改后的软件,那么使用者的程序也必须公布其源代码,同时允许别人发布、修改。也就是说,使用GPL声明下的自由软件开发出来的新软件也一定是自由软件。
文件管理 NFS
一、定义
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
二、优点
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
交叉编译工具链
一、 gcc
1.定义
GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
2.遵循的部分约定规则
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件,是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
二、glibc
1.定义
libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。
glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc、klibc,以及Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。
系统结构
-
应用程序
在更新源中或可编译运行的用户程序 -
根文件系统
(1) 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
(2) 系统目录
/bin、/sbin、/dev、/etc、/lib、/home、/root、/usr、/var、/proc、/mnt、/tmp -
内核
(1) 定义:操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。
(2) 主要组成部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。 -
Boot loader
(1) 定义:Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。
(2) Boot loader作用原理
实时操作系统(RTOS)
- 定义
实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。 - 要求
(1)多任务
(2)处理能被区分优先次序的进程线
(3)一个中断水平的充份数量
主机/目标机 开发体系结构
- 连接式
- 可移动存储设备
- 独立开发系统
驱动开发
- 字符设备
字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等。请注意,以字符为单位并不一定意味着是以 字节为单位,因为有的编码规则规定,1个字符占16比特,合2个字节。
创建字符设备 - 块设备
块设备将信息存储在固定大小的块中,每个块都有自己的地址。 数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。磁盘是最常见的块设备。
在文件上创建块设备
shell编程
- if语句
用法1:
if 语句
then
命令1
else
命令2
fi
用法2:
if 条件1
then
命令1
else if 条件2
then
命令2
else
命令3
fi
- for语句
for i inseq 1000
; do
command
done - while语句
while commandA ; do
commands
done
网络程序设计
TCP
UDP
Socket
参考:https://www.cnblogs.com/wangcq/p/3520400.html
git工具基本命令
- git init:创建本地仓库
- git add filename:添加文件
- git commit -m “wrote a readme file”:提交文件,-m添加描述
- git branch:查看分支
- git branch :创建分支
- git checkout :切换分支
- git checkout -b :创建加切换分支
- git merge :合并分支到当前分支
- git branch -d :删除分支