《Linux内核剖析》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
YanlzLinux_Kernel0.12_V01_1.0 |
严立钻 |
|
2020.02.06 |
|
|
|
|
|
|
++++“Linux内核剖析”:是对“Linux系统编程”的综合探索;开发Linux环境下的应用程序时,需要使用大量的Linux函数;这些函数有的属于Linux操作系统的API;底层的驱动内核工程师是嵌入式领域的重要岗位,也是一个公司的技术核心,根据芯片具体情况把操作系统(如Linux)移植到上面;同时编写必要的驱动程序,改写相应的内核代码;
++++“Linux内核剖析”:定位在一个科普类知识,了解Linux环境下的应用程序开发;从基础Linux、C语言、数据结构开始,到ARM、汇编、Linux内核、驱动等!
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
#第一篇:Linux从入门到放弃篇 |
#第二篇:Linux C篇 |
#第三篇:Linux系统编程篇 |
#第四篇:Linux内核API篇 |
++D1、Linux内核API概述 |
++++[不能使用浮点运算]:因为Linux内核在切换模式时不保存处理器的浮点状态;
++++[不要让内核程序进行长时间等待]:Linux操作系统本身是抢占式的,但是内核是非抢占内核,就是说用户空间的程序可以抢占运行,但是内核空间程序不可以;
++++[尽可能保持代码的整洁性]:内核调试不像调试应用程序那样方便,因此,在前期代码编写的过程中保持代码的整洁易懂,将大大方便后期的调试;
++++[Linux内核API有很多配对使用]:例如,文件引用计数有加操作,也会有相应的减操作;如果在实验中进行了“引用计数”加操作,函数执行后未进行减操作还原,那么可能会出现系统崩溃;
++++在内核模式下编程,系统内的所有资源都是由内核来统一调配的,并且数量有限,因此申请资源用完后一定要进行释放,避免出现死锁情况;
ifneq($(KERNELRELEASE)) mymodule-objs:= mymodule1.0 mymodule2.0 #依赖关系 obj-m += mymodule.o #编译、链接后将生成mymodule.o模块
else PWD := $(shell pwd) KVER := $(shell uname -r) KDIR := /lib/modules/$(KVER)/build
all: $(MAKE) -C $(KDIR) M=$(PWD) #此处将再次调用make
clean: rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers *~ endif |
#第五篇:Linux内核剖析篇 |
++D1、Linux基础 |
++++【Linux系统编程】分类:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【Linux从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【Linux C函数与算法】:https://blog.csdn.net/VRunSoftYanlz/article/details/104076473
++++【Linux系统编程】:https://blog.csdn.net/VRunSoftYanlz/article/details/104151861
++++【Linux内核API】:https://blog.csdn.net/VRunSoftYanlz/article/details/104189074
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
++D2、微型计算机组成结构 |
++D3、内核编程语言和环境 |
++++在Linux0.1x系统中使用了两种汇编器(Assembler):一种是能产生16位代码的as86汇编器,使用配套的ld86链接器;另一种是GNU的汇编器gas(as),使用GNU ld链接器来链接产生的目标文件;
++++[as86汇编器]:as86和ld86是由MINIX-386的主要开发者之一Bruce Evans编写的Intel8086、80386汇编编译程序和链接程序;as86的语法是基于MINIX系统的汇编语言语法,而MINIX系统的汇编语法则是基于PC/IX系统的汇编器语法;汇编器专门用来把低级语言程序编译成含机器码的二进制程序或目标文件;汇编器会把输入的一个汇编语言程序(如srcfile)编译成目标文件(objfile);
as [选项] -o objfile srcfile |
++++[GNU as 汇编]:as86汇编器仅用于编译内核中的“boot/bootsect.S”引导扇区程序和实模式下的设置程序“boot/setup.s”;内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C语言程序编译产生的模块链接;在编译C语言程序时,GNU gcc编译器会首先输出一个作为中间结果的as汇编语言文件,然后gcc会调用as汇编器把这个临时汇编语言程序编译成目标文件;
++++[汇编程序预处理]:as汇编器具有对汇编语言程序内置的简单预处理功能;该与处理功能会调整并删除多余的空格字符和制表符;删除所有注释语句并且使用单个空格或一些换行符替换它们;把字符常数转换成对应的数值;
++++[符号、语句和常数]:符号(Symbol)是由字符组成的标识符,组成符号的有效字符取自大小写字符集、数字和3字符“-”、“.”、“$”;语句(Statement)以换行符或者行分割字符“;”作为结束;
AT&T语法与Intel语法中转换指令的对应关系 |
||
AT&T |
Intel |
说明 |
cbtw |
cbw |
把%al中的字节值符号扩展到%ax中; |
cwtl |
cwde |
把%ax符号扩展到%eax中 |
cwtd |
cwd |
把%ax符号扩展到%dx:%ax中; |
cltd |
cdq |
把%eax符号扩展到%edx:%eax中; |
mov %ax, %bxmov $1, %bx |
++++[指令操作码的命名]:AT&T语法中指令操作码名称(即指令助记符)最后一个字符用来指明操作数的宽度;字符b、w和l分别指定byte、word和long类型的操作数;如果指令名称没有带这样的字符后缀,并且指令语句中不含内存操作数,那么as就会根据目的寄存器操作数来尝试确定操作数宽度;
++++[指令操作码前缀]:操作码前缀用于修饰随后的操作码;它们用于重复字符串指令、提供区覆盖、执行总线锁定操作或指定操作数和地址宽度;通常操作码前缀可作为一条没有操作数的指令独占一行并且必须直接位于所影响指令之前,但是最好与它修饰的指令放在同一行上;
操作码前缀列表 |
|
操作码前缀 |
说明 |
cs,ds,ss,es,fs,gs |
区覆盖操作码前缀;通过指定使用“区:内存操作数”,内存引用形式会自动添加这种前缀; |
data16,addr16 |
操作数/地址宽度前缀;前两个前缀会把32位操作数/地址改变成16位的操作数/地址;但请注意:as并不支持16位寻址方式; |
lock |
总线锁存前缀;用于在指令执行期间禁止中断(仅对某些指令有效); |
wait |
协处理器指令前缀;等待协处理器完成当前指令的执行;对于80386/80387组合用不着这个前缀; |
rep,repe,repne |
串指令操作前缀,使串指令重复执行%ecx中指定的次数; |
repne scas %es:(%edi), %al |
++++[内存引用]:section为内存操作数指定可选的段寄存器,并且会覆盖操作数使用的当前默认段寄存器;
AT&T语法 |
section:disp(base, index, scale) |
Intel语法 |
section:[base + index*scale +disp] |
++++[跳转指令]:跳转指令用于把执行点转移到程序另一个位置处继续执行下去;这些跳转的目的位置通常使用一个标号来表示;在生成目标代码文件时,汇编器会确定所有带有标号的指令的地址,并且把跳转到指令的地址编码到跳转指令中;跳转指令可分为无条件跳转和条件跳转两大类;条件跳转指令将依赖于执行指令时标志寄存器中某个相关标志的状态来确定是否进行跳转,而无条件跳转则不依赖于这些标志;
jmp NewLoc |
#直接跳转;无条件直接跳转到标号NewLoc处继续执行; |
jmp *%eax |
#间接跳转;寄存器%eax的值是跳转的目标位置 |
jmp *(%eax) |
#间接跳转;从%eax指明的地址处读取跳转的目标位置 |
++++[区与重定位]:区(Section),也称为段、节或部分,用于表示一个地址范围,操作系统将会以相同的方式对待和处理在该地址范围中的数据信息;
++++[特殊点(.)符号]:特殊符号“.”表示as汇编的当前地址;
++++[符号属性]:除了名字以外,每个符号都有“值”和“类型”属性;
++++1、[.align abs-expr1, abs-expr2, abs-expr3]:.align是存储对其汇编指令,用于在当前子区中把位置计数器值设置(增加)到下一个指定存储边界处;
++++2、[.ascii “string”...]:从位置计数器所指当前位置为字符串分配空间并存储字符串,可使用逗号分开写出多个字符串;
++++3、[.asciz “string”...]:该汇编命令与“.ascii”类似,但是每个字符串后面会自动添加NULL字符;
++++4、[.byte expressions]:该汇编命令定义0个或多个用逗号分开的字节值;每个表达式的值是1字节;
++++5、[.comm symbol, length]:在bss区中声明一个命名的公共区域;在ld链接过程中,某个目标文件中的一个公共符号会与其他目标文件中同名的公共符号合并;如果ld没有找到一个符号的定义,而只是一个或多个公共符号,那么ld就会分配指定长度length字节的未初始化内存;length必须是一个绝对值表达式,如果ld找到多个长度不同但同名的公共符号,ld就会分配长度最大的空间;
++++6、[.data subsection]:该汇编命令通知as把随后的语句汇编到编号为subsection的data子区中;如果省略编号,则默认使用编号0;编号必须是绝对值表达式;
++++7、[.desc symbol, abs-expr]:用绝对表达式的值设置符号symbol的描述符字段n_desc的16位值;仅用于a.out格式的目标文件;
++++8、[.fill repeat, size, value]:该汇编命令会产生数个(repeat个)大小为size字节的重复拷贝;
++++9、[.global symbol]或者[.globl symbol]:该汇编命令会使得链接器ld能看见符号symbol;
++++10、[.int expressions]:该汇编命令在某个区中设置0个或多个整数值(80386系统为4B,同.long);
++++11、[.lcomm symbol, length]:为符号symbol指定的局部公共区域保留长度为length字节的空间;
++++12、[.long expressions]:含义与.int相同;
++++13、[.octa bignums]:这个汇编指令指定0个或多个逗号分开的16B大树(.byte,.word,.long,.quad,.octa分别对应1、2、4、8和16字节数);
++++14、[.org new_lc, fill]:这个汇编命令会把当前区的位置计数器设置为值new_lc;
++++15、[.quad bignums]:这个汇编命令指定0个或多个用逗号分开的8B大数bignum;
++++16、[.short expressions]同[.word expressions]:这个汇编命令指定某个区中0个或多个用逗号分开的2字节数;对于每个表达式,在运行时刻都会产生一个16位的值;
++++17、[.space size, fill]:该汇编命令产生size个字节,每个字节填值fill;
++++18、[.string “string”]:定义一个或多个用逗号分开的字符串;在字符串中可以使用转义字符;每个字符串都自动附加一个NULL字符结尾;
++++19、[.text subsection]:通知as把随后的语句汇编进编号为subsection的子区中;
++++20、[.word expressions]:对于32位机器,该汇编命令含义与.short相同;
-a |
开启程序列表; |
-f |
快速操作; |
-o |
指定输出的目标文件名; |
-R |
组合数据区和代码区; |
-W |
取消警告信息; |
++++[预处理阶段]:gcc会把C程序传递给C前处理器cpp,对C语言程序中指示符和宏进行替换处理,输出纯C语言代码;
++++[编译阶段]:gcc把C语言程序编译生成对应的与机器相关的as汇编语言代码;
++++[汇编阶段]:as汇编器会把汇编代码转换成机器指令,并以特定二进制格式输出保存在目标文件中;
++++[链接阶段]:GNU ld链接器把程序的相关目标文件组合链接在一起,生成程序的可执行映像文件;
#gcc [选项] [-o outfile] infile ...
|
#gcc -o myhello myhello.c #gcc -S -o myhello.s myhello.c #gcc -c -o myhello.o myhello.c |
++D4、80x86保护模式及其编程 |
++D4.1、80x86系统寄存器和系统指令 |
++++【Linux从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【Linux C函数与算法】:https://blog.csdn.net/VRunSoftYanlz/article/details/104076473
++++【Linux系统编程】:https://blog.csdn.net/VRunSoftYanlz/article/details/104151861
++++【Linux内核API】:https://blog.csdn.net/VRunSoftYanlz/article/details/104189074
++++【Linux内核剖析】:https://blog.csdn.net/VRunSoftYanlz/article/details/104200535
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
【XR游戏开发QQ群:784477094】
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++虚拟现实VR资讯: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系统:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0传送机制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR实战之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--