2010年12月28日 星期二

在Linux下計算程式行數

find . \( -name *.cpp -or -name *.h -or -name *.c \) -type f -exec cat {} \; | wc –l

看起來有點長。

簡單地說,就是使用find, 利用name找出所有cpp、h、c副檔名的檔案,cat出來,然後轉給wc去計算行數。

find很好用,但是容易讓不熟悉的人退卻;有機會再來寫一篇簡介find的基礎用法。

2010年12月15日 星期三

簡述 Linux Kernel source 管理

安裝

首先,要先有一份kernel source,到 http://www.kernel.org/pub/linux/kernel/v2.6/ 目錄下抓你要的版本。例如,你想要抓 2.6.34 的 kernel source,就打

> wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.tar.bz2

注意,在這個目錄下,有兩種檔案;linux開頭的是完整的source,patch開頭的,就只是patch,之後要做升級動作時用得到patch檔。

這個地方由於我們是要抓source,所以選擇linux-2.6.34.tar.bz2,而不是patch-2.6.34.tar.bz2。

抓下來後,先到 /usr/src/kernels 目錄下。

> cd /usr/src/kernels

接著,將剛剛抓下來的 kernel source 解開。

> bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf -

然後,就可以看到螢幕狂跑;解完後,打個 ls ,就可以看到 linux-2.6.34 的目錄,cd 進去,再 ls ,就可以看到完整的 kernel source 乖乖躺在你的硬碟裡了。

patch

patch有兩種,一種是2.6.x的patch,一種是2.6.x.y的patch。

2.6.x的patch,例如,想從2.6.34 patch至2.6.35,到http://www.kernel.org/pub/linux/kernel/v2.6/ 目錄下抓 patch-2.6.35.tar.bz2

> wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.35.tar.bz2

假設放在 /usr/src/kernels 目錄下;接著,進行 patch 動作

> bzip2 -dc ../patch-2.6.35.bz2 | patch –p1

然後就可以看到又是一堆訊息跑出來,告訴你更新了哪些檔,跑完後,你的 kernel source 就變成 2.6.35 了,所以,最好改一下目錄名。

> cd ../; mv linux-2.6.34 linux-2.6.35

若要從2.6.34升到2.6.36,也必須乖乖地先patch至2.6.35,再patch至2.6.36。

至於2.6.x.y的patch,方法跟2.6.x的一樣,不同的是,不需要一步一步漸增式的慢慢patch上去,而是一次到位即可。

例如,想從2.6.34 patch至2.6.34.5,只要直接抓2.6.34.5的patch,做一次即可,不用再做2.6.34.1、2.6.34.2、2.6.34.3、2.6.34.4、2.6.34.5這麼多次。

但是,若是要從2.6.34.2 patch成2.6.34.5,則必須先reverse至2.6.34,再patch至2.6.34.5。如下:

> patch –p1 –R < ../patch-2.6.34.2

> patch –p1 < ../patch-2.6.34.5

上面的 –R ,就是指 reverse。

 

文件可參考kernel source內的README及Documentation/applying-patches.txt兩個檔。

以上,報告完畢。