2012年9月27日 星期四

查詢 Linux Distribution 及版本

我也不知道為什麼到今天我才知道這個指令。

以前只會用 uname -a ,然後根據 kernel version 去猜是哪個 distribution 和 version。 原來有個更好用的指令。直接打 lsb_release -a 就可以看到的。

以下是實驗室某 Original Server。

[root@localhost ~]# lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.7 (Final)
Release: 5.7
Codename: Final

如果只要看是用哪個 Distribution,可以用 lsb_release -i

[root@localhost ~]# lsb_release -i
Distributor ID: CentOS

如果只要看版本號碼,可以用 lsb_release -r
[root@localhost ~]# lsb_release -r
Release: 5.7

如果要看 Description 那個欄位,包含是哪個 Distribution 及版號,可以用 lsb_release -d
[root@localhost ~]# lsb_release -d
Description: CentOS release 5.7 (Final)

2011年7月14日 星期四

Android Emulator 問題

今天打開已經長了厚厚一層灰塵的 Elicpse,發現需要更新;全部更新完後,很自然地按下 Run,然後出現…

[2011-07-14 20:34:28 - Emulator] invalid command-line parameter: Files\Android\android-sdk-windows\tools/emulator-arm.exe.
[2011-07-14 20:34:28 - Emulator] Hint: use '@foo' to launch a virtual device named 'foo'.
[2011-07-14 20:34:28 - Emulator] please use -help for more information

奇怪,之前一模一樣的步驟都可以執行的。

原本還懷疑是不是更新不完全,有股衝動想要把整個SDK重新安裝;後來在這個網頁看到了原因

https://code.google.com/p/android/issues/detail?id=18317

原來是SDK安裝在”Program Files”目錄底下,Program跟Files中間的空格在搞鬼。

解決方法:按下Eclipse的Windows→Preferences,在跳出來的視窗選擇Android,然後在SDK Location把目錄位址改成C:\Progra~1\Android\android-sdk-windows,一切就正常了。

2011年1月4日 星期二

使用ffmpeg判斷壓縮的CODEC

要判斷一個影片檔使用的Video CODEC和Audio CODEC,可以藉ffmpeg實現。

程式碼如下:

 

#include <libavformat/avformat.h>

int main(int argc, char *argv[]) {

    AVFormatContext *avformat;

    av_register_all();
    av_open_input_file(&avformat,argv[1],NULL,0,NULL);
    av_find_stream_info(avformat);
    dump_format(avformat, 0, argv[1], 0);

    return 0;
}

 

記得要先安裝ffmpeg library,並且在compile上面的程式時,要link libavformat library, 即 gcc xxx.c -lavformat。

用法很簡單,就執行檔後面跟著要判斷的影片檔即可。輸出範例如下:

> ./a.out ~/iPod_video/dance.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/khchung/iPod_video/dance.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf52.47.0
  Duration: 00:06:17.42, start: 0.000000, bitrate: 1262 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 480x320 [PAR 1:1 DAR 3:2], 1132 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 126 kb/s

可以看出,Video 部份是做用H.264壓縮,audio 則是用 AAC 壓縮。

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兩個檔。

以上,報告完畢。

2010年6月23日 星期三

CentOS + Linux kernel 2.6.3x

如果直接抓Linux Kernel (2.6.31以上) 回來,使用make oldconfig的方式做出來的image,開不了機的話,可以試著修改兩個地方。

  1. 打開.config,找到CONFIG_SYSFS_DEPRECATED_V2的字串,改成=y
  2. 將initrd解開,打開init這個張,會看到dm_region_hash被insmod了兩次,把後面那次拿掉

重新開機,可以動的話,恭喜恭喜。

2010年5月10日 星期一

5/8, Sat, 富貴角半日遊

每次到墾丁,都會造訪台灣極南點,第一次到極南點,是剛與女友在一起沒多久,兩個人坐統聯到高雄 (因為票價最便宜 XD),然後再租車開到墾丁;當初剛拿到駕照不過半年,實際上路經驗只有爸爸陪在旁邊開過幾次。

後來有問女友,你知道我剛考到駕照半年沒幾次上路經驗,就讓我載這麼遠一段路,不會怕嗎?女友很篤定地回答不會。

接著再問,那妳知道我那時候其實邊開邊抖的要死嗎?女友回答:那就會怕了。

 

不過今天重點,不在極南點,也不在回憶過去。雖然千里迢迢地跑到極南點好幾次,近在咫尺的台灣最北點竟然還沒去過。於是,今天成行了。

台灣的極北點在富貴角,最明顯的地標,就是富貴角燈塔。

據北海岸及觀音山國家風景的網頁簡介,清乾隆27年(西元1762年),荷蘭人法倫泰在《新舊印度誌》中,將富貴角記為「hoek」,意為海岬,後人採其譯音稱「富基角」,日治時期則更名為「富貴角」。

首先,為什麼台北會出現在新舊印度誌中,不知道;再來,hoek 怎麼會發音成富基,不知道。

同樣地,今天不是來上語言課,也不是來上歷史課,以上問題不討論。

富貴角其實不難找。一路開到淡水,沿著台二線一直走,經過三芝,過了白沙灣後,沒多久會看到左手邊有往富基漁港的叉路,彎進去,過楓林大橋,右手邊有叉路,轉過去就可以看到停車場了。

車子停好後,路邊一個大牌子,寫著「台灣最北端。富貴角燈塔」,一看就知道該往哪兒走。

富貴角路標

沿著步道走進去,沒多遠就看到海邊,底下就是著名的石槽景觀。沙灘上有一排排的竹子,似乎是攔砂籬。做什麼用?攔砂用的…

攔砂籬

原來這個地方是個非常著名的攝影景點,老梅石槽。不過是來拍海邊綠色的石槽,不是拍攔砂籬。這次只在步道上走走,沒到沙灘上,下次有機會再來拍。

據解說牌上面的說明,那個是綠色礁岩海岸,成因是藻類附著在火山岩上,死去後殘骸會硬化成一層薄薄的石灰質,新的藻類趴上去繼續長,這樣一層一層長上去,就堆疊成我們現在看到的藻礁了。

石槽 步道上看石槽

 

石槽解說牌 解說牌,可以清楚看到石槽長啥樣

 

再往前走一小段,馬上就可以看到海邊出現很多顆有稜有角的石頭,解說牌再次出現。這些石頭稱為風稜石,是從大屯山噴發下來的安山岩塊,經由東北季風長期挾帶細沙吹襲,造成平坦的蝕面,風向改變,就會形成尖銳的稜角。真像是大自然的切割工,不過別人切的是鑽石,東北季風切的是安山岩。

其實這一整路,滿滿的都是風稜石,要視而不見還挺難的。

風稜石 風稜石

 

另外,步道兩旁還有許多植物,不過大部份都叫不出名字。

不知道植物_01 不知名小花

 

不知道植物_02

不知名葉子

 

不知道植物_03

不知名… 花椰菜?!

 

再往前走一段路,終於看到富貴角燈塔冒出頭來了。興奮地往前跑去,在燈塔旁開開心心地照相,終於,台灣最南點和最北點我們都去過了。

最北點 攝於燈塔旁,最北點

 

富貴角燈塔

富貴角燈塔,禁止進入

 

富貴角燈塔門牌 全台最北門牌,富貴角燈塔的門牌號碼

 

在富貴角燈塔照完相後,眼前有兩條叉路,一條左邊的柏油路,不知道到哪,右邊的繼續靠海邊走,看來像是步道的延伸,選擇繼續往右邊的路走。

右邊的路,海邊仍然滿滿的都是風稜石,往前一小段,可以遠遠地看到白沙灣。走了一段路以後,從步道的另一頭出來,接到富基漁港。

從步道另一頭出來後,似乎是個停車場,還在開玩笑說應該要停這裡比較近,馬上就看到了標示,一個人坐在旁邊,原來是要收費的。

富基漁港漁船 富基漁港漁船

 

由於富基漁港的黑名如雷貫耳,完全不考慮在這裡吃東西;往前直走,在遇到左上右下的叉路時,走左邊的單行道,逆向也沒關係,因為是走路的。

往前再走一段路,可以看到楓林大橋,往左邊叉路轉上去就回到停車的地方了。

很輕鬆的步道,慢慢走的話,全程走完大概一小時可以搞定,地形起伏也不大;以後有空可能還會再來走走吧。

富貴角空照圖

富貴角周邊空照圖