《Linux內核剖析》
《Linux內核剖析》 |
版本 |
作者 |
參與者 |
完成日期 |
備註 |
YanlzLinux_Kernel0.12_V01_1.0 |
嚴立鑽 |
|
2020.02.06 |
|
|
|
|
|
|
##《Linux內核剖析》發佈說明:
++++“Linux內核剖析”:是對“Linux系統編程”的綜合探索;開發Linux環境下的應用程序時,需要使用大量的Linux函數;這些函數有的屬於Linux操作系統的API;底層的驅動內核工程師是嵌入式領域的重要崗位,也是一個公司的技術核心,根據芯片具體情況把操作系統(如Linux)移植到上面;同時編寫必要的驅動程序,改寫相應的內核代碼;
++++“Linux內核剖析”:定位在一個科普類知識,瞭解Linux環境下的應用程序開發;從基礎Linux、C語言、數據結構開始,到ARM、彙編、Linux內核、驅動等!
@@提示:有些博客可能只是開了頭,如果感興趣的同學,可以“點贊”或“評論區留言”,只要關注的同學多了,那就會繼續完善喲!(“++==”,表示沒有寫完的,如果關注度不高就不完善了;“++ok++”,表示此篇博客已經完成,是階段性完整的!)
$$$$博客溯源:
++++【Linux系統編程】分類:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【Linux C函數與算法】:https://blog.csdn.net/VRunSoftYanlz/article/details/104076473
++++【Linux系統編程】:https://blog.csdn.net/VRunSoftYanlz/article/details/104151861
++++【Linux從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【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/
++++VR雲遊戲= Unity +SteamVR+ 雲技術 + 5G +AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
##《Linux內核API》目錄
#第一篇:Linux從入門到放棄篇
#第二篇:Linux C篇
#第三篇:Linux系統編程篇
#第四篇:Linux內核API篇
#第五篇:Linux內核剖析篇
#第六篇:Linux驅動開篇
#第七篇:立鑽哥哥帶您Linux內核驅動開發
#第一篇:Linux從入門到放棄篇
#第一篇:Linux從入門到放棄篇 |
#第一篇:Linux從入門到放棄篇
++++立鑽哥哥:開發Linux環境下的應用程序時,需要使用大量的Linux函數;這些函數有的屬於Linux操作系統的API;底層的驅動內核工程師是嵌入式領域的重要崗位,也是一個公司的技術核心,根據芯片具體情況把操作系統(如Linux)移植到上面;同時編寫必要的驅動程序,改寫相應的內核代碼;
++++【Linux從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
#第二篇:Linux C篇
#第二篇:Linux C篇 |
#第二篇:Linux C篇
++++立鑽哥哥:開發Linux環境下的應用程序時,需要使用大量的Linux函數;這些函數有的屬於Linux操作系統的API,有的屬於C語言的標準庫函數;
++++【Linux C函數】:https://blog.csdn.net/VRunSoftYanlz/article/details/104076473
#第三篇:Linux系統編程篇
#第三篇:Linux系統編程篇 |
#第三篇:Linux系統編程篇
++++立鑽哥哥:開發Linux環境下的應用程序時,需要使用大量的Linux函數;這些函數有的屬於Linux操作系統的API,有的屬於C語言的標準庫函數;
++++【Linux系統編程】:https://blog.csdn.net/VRunSoftYanlz/article/details/104151861
#第四篇:Linux內核API篇
#第四篇:Linux內核API篇 |
#第四篇:Linux內核API篇
++++立鑽哥哥:Linux編程主要是以用戶層面上的編程爲主,一般涉及用戶API;相對於特定的硬件平臺,只對所用到的特定的內核API做簡要說明;對於使用Linux內核進行編程開發,需要全面瞭解內核API;
++D1、Linux內核API概述
++D1、Linux內核API概述 |
++D1、Linux內核API概述
++++立鑽哥哥:內核API與用戶API是具有本質區別的,因爲它們所運行的系統模式是不同的;若要進行Linux內核源代碼分析與內核API驗證,需要具備一定的基礎知識,掌握了這些基礎知識後,才能在Linux內核源代碼分析與內核API驗證實力的理解中做到遊刃有餘;
++++Linux可以運行在兩種模式下:用戶模式(user mode)和內核模式(kernel mode);
++Linux內核編程注意事項
++++立鑽哥哥:當編寫一個普通程序時,有時會包含stdlib.h文件,也就是說我們使用了C標準庫,這是典型的用戶模式編程,在這種情況下,用戶模式的應用程序要鏈接標準C庫;
++++[不能使用浮點運算]:因爲Linux內核在切換模式時不保存處理器的浮點狀態;
++++[不要讓內核程序進行長時間等待]:Linux操作系統本身是搶佔式的,但是內核是非搶佔內核,就是說用戶空間的程序可以搶佔運行,但是內核空間程序不可以;
++++[儘可能保持代碼的整潔性]:內核調試不像調試應用程序那樣方便,因此,在前期代碼編寫的過程中保持代碼的整潔易懂,將大大方便後期的調試;
++++[Linux內核API有很多配對使用]:例如,文件引用計數有加操作,也會有相應的減操作;如果在實驗中進行了“引用計數”加操作,函數執行後未進行減操作還原,那麼可能會出現系統崩潰;
++++在內核模式下編程,系統內的所有資源都是由內核來統一調配的,並且數量有限,因此申請資源用完後一定要進行釋放,避免出現死鎖情況;
++Linux內核2.6內核模塊的Makefile模板
++++立鑽哥哥:在Linux2.6內核中,模塊的編譯需要配置過的內核源代碼;編譯過程首先會到內核源碼目錄下讀取頂層的Makefile文件,然後再返回模塊源碼所在目錄;經過編譯、鏈接後生成的內核模塊文件的後綴爲.ko;
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內核API】:https://blog.csdn.net/VRunSoftYanlz/article/details/104189074
#第五篇:Linux內核剖析篇
#第五篇:Linux內核剖析篇 |
#第五篇:Linux內核剖析篇
++++立鑽哥哥:全面而深刻的理解Linux工作機理,爲進一步學習和研究Linux打下堅實的基礎;
++++D1、Linux基礎
++++D2、微型計算機組成結構
++++D3、內核編程語言和環境
++++D4、80x86保護模式極其編程
++++D5、Linux內核體系結構
++++D6、引導啓動程序
++++D7、初始化程序(main.c)
++++D8、內核代碼(asm.s)
++++D9、塊設備驅動程序(blk.h)
++++D10、字符設備驅動程序(keyboard.s)
++++D11、數學協處理器(math_emulate.c)
++++D12、文件系統(buffer.c)
++++D13、內核管理(memory.c)
++++D14、頭文件(include/)
++++D15、庫文件(_exit.c)
++++D16、建造工具(build.c)
++++D17、實驗環境設置與使用方法(Bochs)
++++D18、立鑽哥哥帶您Linux內核驅動編程
++D1、Linux基礎
++D1、Linux基礎 |
++D1、Linux基礎
++++立鑽哥哥:Linux操作系統的誕生、發展和成長過程依賴於:UNIX操作系統、MINIX操作系統、GNU計劃、POSIX標準、Internt;
++Linux基礎篇
++++立鑽哥哥:Linux相關的基礎可以查閱“Linux系統編程”分類,其中包括“Linux從入門到放棄”、“Linux C函數”、“Linux系統編程”、“Linux內核API”、“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、微型計算機組成結構
++D2、微型計算機組成結構 |
++D2、微型計算機組成結構
++++立鑽哥哥:計算機系統可分爲硬件部分和軟件部分,但兩者相互依存;硬件部分是計算機系統的可見部分,是軟件運行和存儲的平臺;軟件時一種控制硬件操作和動作的指令流;猶如存儲於人類大腦中的信息和思維控制着人體的思想和動作一樣,軟件可以看做是計算機“大腦”中的信息和思維;
++微型計算機組成原理
++++立鑽哥哥:CPU通過地址線、數據線和控制信號線組成的本地總線(或稱爲內部總線)與系統其他部分進行數據通信;地址線用於提供內存或I/O設備的地址,即指明需要讀/寫數據的具體位置;數據線用於在CPU和內存或I/O設備之間提供數據傳輸的通道,而控制線則負責指揮執行的具體讀/寫操作;
++計算機組成原理
++++立鑽哥哥:計算機相關的認識有一個“計算機組成原理”分類,大家感興趣可以在這個分類下查看相關文章;
++++【計算機組成原理】分類:https://blog.csdn.net/vrunsoftyanlz/category_8060814.html
++D3、內核編程語言和環境
++D3、內核編程語言和環境 |
++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彙編語法
++++立鑽哥哥:爲了維持與gcc輸出彙編程序的兼容性,as彙編器使用AT&T系統的V的彙編語法(AT&T語法);這種語法與Intel彙編程序使用的語法(Intel語法)很不一樣;
++++[彙編程序預處理]: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 |
++指令語句、操作數和尋址
++++立鑽哥哥:指令(Instructions)是CPU執行的操作,通常也稱做操作碼(Opcode);操作數(Operand)是指令操作的對象;而地址(Address)是指定數據在內存中的位置;
++++[指令操作碼的命名]: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),也稱爲段、節或部分,用於表示一個地址範圍,操作系統將會以相同的方式對待和處理在該地址範圍中的數據信息;
++符號(Symbol)
++++立鑽哥哥:在程序編譯和鏈接過程中,符號(Symbol)是一個比較重要的概念;程序員使用符號來命名對象,鏈接器使用符號進行鏈接操作,而調試器利用符號進行調試;標號(Label)是後面緊隨一個冒號的符號;符號名以一個字母或“.”、“_”字符之一開始;
++++[特殊點(.)符號]:特殊符號“.”表示as彙編的當前地址;
++++[符號屬性]:除了名字以外,每個符號都有“值”和“類型”屬性;
++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相同;
++AS彙編器命令行選項
-a |
開啓程序列表; |
-f |
快速操作; |
-o |
指定輸出的目標文件名; |
-R |
組合數據區和代碼區; |
-W |
取消警告信息; |
++C程序編譯和鏈接
++++立鑽哥哥:使用gcc彙編器編譯C語言程序時通常會經過4個處理階段,即預處理階段、編譯階段、彙編階段和鏈接階段;
++++[預處理階段]: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、80x86保護模式及其編程 |
++D4、80x86保護模式及其編程
++++立鑽哥哥:閱讀基於80x86CPU的Linux內核源代碼之前需要了解基礎知識,比如80x86基礎知識;保護模式內存管理;各種保護措施;中斷和異常處理;任務管理;保護模式編程的初始化等;
++++D4.1、80x86系統寄存器和系統指令
++++D4.2、保護模式內存管理
++++D4.3、分段機制
++++D4.4、分頁機制
++++D4.5、保護
++++D4.6、中斷和異常處理
++++D4.7、任務管理
++++D4.8、保護模式編程初始化
++++D4.9、立鑽哥哥帶您多任務內核實戰
++D4.1、80x86系統寄存器和系統指令
++D4.1、80x86系統寄存器和系統指令 |
++++VR雲遊戲=Unity+SteamVR+雲技術+5G+AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
++++【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
++++【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):
立鑽哥哥推薦的拓展學習鏈接(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
++++插件<Obi Rope>:https://blog.csdn.net/VRunSoftYanlz/article/details/83963905
++++計算機組成原理(教材篇):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--_--