作者cole945 (躂躂..)
看板LinuxProgram
標題Re: [問題] 核心程式碼
時間Tue Oct 31 18:30:00 2006
我是苦命專題生 .__./
因為做專題的關係開始接觸 Linux Kernel, 對這部份略有心得可以稍作分享~
先說我做的部份是偏無線網路,大略內容是把虛擬化無線網路卡,
讓一張無線網路卡可以同時連上多個AP,這東西之前微軟研究院有在XP上實作過,
叫MultiNet/VirtualWifi,而我是在 Linux 上實作~
在背景知識部份,如果要看懂Kernel,C語言基礎當然一定要有,
但對那部份實作的背景知識其實更重要。
大方向當然是作業系統本身的概念要熟,
比較須要熟的部份像是process、interrupt、synchronization,
因為這幾部份幾乎不管動哪一塊都會用到。
細節的部份,像我做的部份是 IEEE 802.11 的網路,
所以 802.11 的spec要熟,不然會每一行都看得懂,
但全部合起來就不知道為什麼要這樣實作。
如果你對開機流程有興趣,那就要額外去survey開機流程有關的文件。
文件的部份,
推 O'Reilly 的 Understaning the Linux Kernel
目前出了三版,分別對映到kernel 2.2、2.4、2.6,
(自己玩的話,我會推玩新版本的,
一些有的沒的helper(像linked-list操作)比較多,寫出來比較輕鬆方便,
而且這些helper放得進kernel,應該不會有什麼嚴重的bug。)
這本主要是講大方向。
細節的部份,是推看 O'Reilly 的 Linux Device Drivers,
像是會提到怎麼理處 PCI device、USB device、network device等等。
如果是研究網網部份,還有另外兩本
Prentice Hall 的 The Linux Networking Architecture
O'Reilly 的 Understanding Linux Network Internals
主要是講 L2 ~ L3(和L4的TCP) 的部份。
除了看書外,就是找出對應的原始碼來看,
原因有二,第一,有些原始碼註解比程式還長(爆)
新的東西不會出現在書上,但原碼裡倒是寫的很清楚。
第二,有些東西用文字講太繞舌,直看code反覺簡單明瞭扼要清楚。
看原碼當然不建議記筆本打開一行行看,要配一些工具,像cscope、ctags。
而我是用一套叫 kscope 的工具來讀程式
http://kscope.sourceforge.net/sshots.shtml
利用cscope、ctags可以把整個原始碼建立索引資料,
所以可以快速查尋某個function(或變數)在哪裡被宣告、定義、或是被參照,
透過這些工具可以加快trace程式流程速度..
如果硬碟不夠大(kernel解開好像3,4百吧..忘了..再配上建檔的資料應該更大??)
可以用 Cross-Referencing Linux 這個站
http://lxr.linux.no/
點上面的 Browse the Code ,就可以線上搜查kernel原始碼。
以上是小小心得 .___./
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.138.218.34
※ 編輯: cole945 來自: 220.138.218.34 (10/31 18:36)
推 Coyote:你做的東西相當有趣 有prototype可以分享嘛 10/31 19:27
推 WalkingIce:好酷 :D 10/31 19:54
→ qrtt1:等他結束了專題再要吧 orz 10/31 19:56
推 RouterHsieh:好文,板主m一下吧XD 10/31 20:37
推 noonOut:我有借到那本書...看來還是偷懶不得@@ 10/31 22:16
→ noonOut:那我要去閉關研讀了XD 謝謝^^ 有心得再上來分享 10/31 22:19
推 cole945:東西一定會公開囉 :p 目前只在zd1211的網上實作.. 11/01 01:49
→ cole945:東西已經差不多了..正在做最後的整理~~ 11/01 01:50