終於可以輸入中文了
剛剛又看了一下,情況和前一篇回的不太一樣。
接下來,說明一下他是如何生出這些檔案的,我猜情況可能是這樣的:
這位 Antonino Daplas 在要 make kernel 之前,發覺到 modules (也就是drivers) 裏頭的一些程式碼需要做點更改才可以讓心愛的hsfmodem能正常運作,於是他經過左看右看,花了些心思研究程式碼後,對一些程式檔作了一些更改,然後才再 make kernel ,而且也的確可以用了。於是這位老兄想把改過的程式碼分享給大家,要怎麼分享呢?總不能把改過的那幾個程式檔就這樣 post 在討論區吧,這樣的話,那篇 post 會太冗長了。於是他退而求其次的想:如果可以只秀出那些被改過了的程式的話,因為改過的程式不多,就可以貼到討論區了吧。
於是他使用了一個叫 diff 的程式,這支程式吃兩個文字檔,然後告訴你這兩個文字檔的「差別「在哪。
於是 Antonino Daplas 老兄把改過的與原來相對應的程式檔餵給 diff 去分析,然後 diff 就把兩個檔的「差別」告訴他,也就是被Antonino Daplas 老兄改過的程式碼的部分。
網頁上後頭的附加內容就是這樣來的。
首先,那個網頁上的patch總計是對 5 個程式碼作 patch,每個 diff 後的檔名就是了。依序是:
modules/osspec/include/irq_vectors.h
modules/osspec/include/oscompat.h
modules/osspec/linuxres.c
modules/osspec/ostime.c
modules/serial_hsf.c
接下來的每一行中 - 代表被Antonino Daplas所去除掉的程式片段, + 代表Antonino Daplas加上的片段,而 = 後頭的資訊可以不用理它。拿 oscompat.h 來說:
- 代碼: 選擇全部
#include <linux/version.h>
#include <linux/config.h>
#include <linux/sched.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,40)
#include <linux/tqueue.h>
+#else
+#include <linux/workqueue.h>
+#endif
+
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/wait.h>
代表在原來的 oscompat.h 中,在他的 #include <linux/config.h> 和 #include <linux/sched.h> 後,這位老兄新增了兩行程式碼,分別是(去掉前頭的+號)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,40)
之後跳過 #include <linux/tqueue.h> ,在後頭再加上
#else
#include <linux/workqueue.h>
#endif
所以呢,你可以手動將你 kernel-source 中所對應的那五個檔的內容依他網站上的diff的結果更改一下,然後再 make 就行了。不然,也可以研究一下,要如何使用一隻叫 patch 的程式來幫你完成這些動作。