2011年2月16日 星期三

[轉]核心原始碼下的次目錄

在核心目錄下,基本上有底下這些東西:

arch :與硬體平台有關的項目,大部分指的是 CPU 的類別,例如 x86, x86_64, Xen 虛擬支援等;
block :與區塊裝置較相關的設定資料,區塊資料通常指的是大量儲存媒體!還包括類似 ext3 等檔案系統的支援是否允許等。
crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等;
Documentation :與核心有關的一堆說明文件,若對核心有極大的興趣,要瞧瞧這裡!
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等;
firmware :一些舊式硬體的微指令碼 (韌體) 資料;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
include :一些可讓其他程序呼叫的標頭 (header) 定義資料;
init :一些核心初始化的定義功能,包括掛載與 init 程式的呼叫等;
ipc :定義 Linux 作業系統內各程序的溝通;
kernel :定義核心的程序、核心狀態、執行緒、程序的排程 (schedule)、程序的訊號 (signle) 等
lib :一些函式庫;
mm :與記憶體單元有關的各項資料,包括 swap 與虛擬記憶體等;
net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等;
security :包括 selinux 等在內的安全性設定;
sound :與音效有關的各項模組;
virt :與虛擬化機器有關的資訊,目前核心支援的是 KVM (Kernel base Virtual Machine)

2010年9月10日 星期五

What is be32_to_cpu/cpu_to_be32(),cpu_to_le16(),cpu_to_le32(),

be32_to_cpu/cpu_to_be32(),cpu_to_le16(),cpu_to_le32(),

le 叫做Little Endian,be 叫做Big Endian,這是兩種字節序.
le 就表示地址地位存儲值的低位,地址高位存儲值的高位.
be 就表示地址低位存儲值的高位,地址高位存儲值的低位.
我們就以這裡這個臨時變量c 為例.假設c 是這樣被存儲在內存地址0x0000 開始的地方:

0x0000 0x12
0x0001 0x34
0x0002 0xab
0x0003 0xcd

如果你是採用le 的字節序,那麼讀出來的值就是0xcdab3412,
反之,如果你採用的是be 的字節序,那麼讀出來的值就是0x1234abcd.
同樣的,如果你把0x1234abcd 寫入0x0000 開始的內存中,那麼結果就是:

big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12

為什麼這幾個函數名字裡面都一個”cpu”?
談到字節序不談cpu 那就好比神采飛揚的談起超級女聲卻對張靚穎是何許人也茫然不知.
不同的cpu 採用不同的字節序.看生產商自己喜歡了.
其中,big endian 以Motolora 的PowerPC 系列cpu 為代表,
而little endian 則以我家Intel 的x86 系列cpu 為代表.
所以這幾個函數名字裡邊都會有cpu 的字樣,
那麼毫無疑問對於不同的cpu,這幾個函數執行的代碼是不一樣的.
但是,凡是xx_to_cpu 就說明函數的結果是給cpu 使用的,
反之如果是cpu_to_xx 就說明是從cpu 的字節序轉換成目標字節序.

2010年8月11日 星期三

PCM/ADPCM 聲波檔案之間差異的說明

PCM 和 ADPCM 是類比音訊資料儲存為數位格式 Microsoft.WAV 檔的技巧。

其他儲存體的方法 (比方說 mu-法律、 A-法律轉換編碼 CELP,等等),不受 Windows 音效系統 1.0。

PCM 的運作方式 PCM 的運作是藉由採取不連續的範例,依平均間隔 (稱為取樣率)。常見的時間間隔是 11 kHz]、 [22 kHz] 和 [44 kHz。越高取樣比率原始的類比音效和愈好聲音的品質愈好的表示。每個範例是值的具有無限解析從 +1.0 全面以完整的比例數值-1.0 實數數字。因為這些必須儲存為有限精確度數位數字,資料會被截斷成 16 位元 PCM 或 8 位元 PCM 通常稱為 8 位元和 16 位元範例。16 位元資料有更多的解析度,所以數位的一種聲音聽起來更好。8 位元 PCM 具有較少解析度按鍵動作發聲 hiss 導致該一種聲音。它也需要較少的磁碟空間。

ADPCM 的運作方式 通常稱為 「 為壓縮,表單的 ADPCM 是更有效率的方法儲存 16 位元或 8 位元 PCM 比波形。它只會使用每個佔用的磁碟空間的 16 位元 PCM 四分之一的範例 4 位元。但是,聲音品質是差。因為 Windows 音效系統硬體只能夠了解 8/16 位元 PCM,電腦必須壓縮和解壓縮至/從需要 CPU 時間的 PCM ADPCM。可以在 22 kHz 單聲道 ADPCM 背景解壓縮即時 (也就是雖然播放) 上 386SX/16 百萬赫茲 CPU。較高的取樣率 (44 kHz) 或立體聲檔案將會花太長的時間為一個 386SX/16 解壓縮,這會造成略過] 中音訊]。11 kHz 單聲道 ADPCM 可以壓縮即時 386SX/16 電腦上。若要如何 ADPCM 電腦必須有 [音訊壓縮管理員 (ACM) 安裝。

ADPCM 儲存兩個相鄰的 PCM 樣本中值的差異,並使允許資料減少一些假設。因為這些假設適當地重現低頻率,但是任何高頻率傾向於取得失真。扭曲是 11 kHz ADPCM 輕易按鍵動作發聲檔案,但會變成更難以分辨較高的取樣速率而是幾乎無法辨識與 44 kHz ADPCM 檔案。

2010年5月12日 星期三

[轉] Ubuntu 安裝Vim Plugin ctags及taglist

http://stenlyho.blogspot.com/2008/11/ubuntuvim-plugin-ctagstaglist.html
Ubuntu 安裝Vim Plugin ctags及taglist
安裝ctags及taglist

1. 首先先安裝ctags

apt-get install exuberant-ctags

2. 然後到Taglist網站去下載zip檔http://vim-taglist.sourceforge.net/

(1) 下載後解壓縮該檔案
# unzip taglist_45.zip
Archive: taglist_45.zip
inflating: plugin/taglist.vim
inflating: doc/taglist.txt
(2)將plugin及doc複製到家目錄的".vim"這個目錄裏,如果不存在就建一個新的".vim"

在vim裏設定功能鍵F9 - 用它來開啟/關閉taglist功能
在/etc/vim /vimrc裏加入下面1行

map :Tlist

最後一個步驟,到你的原始程式目錄裏輸入

ctags -R *.c *.h

開啟vim xxx.c按F9
你就會看見如下圖的結果

畫面分成左右兩邊,切換方式用Ctrl-W-W

左邊畫面TagList只要按Enter就會自動跳到相對應的函式或定義

右邊的畫面:
Ctrl+] : 跳到游標所指function的implement 位置 ,注意游標要在function的第一個字。
Ctrl+t : 返回到剛剛的位置。

2010年5月11日 星期二

[轉]TDD(Time Division Duplex) noise.分時多工雜訊

使用GSM手機的時候,一般人一定常聽過其嗶嗶嗶的聲音,有時候是自己的手機聽筒傳出,對方聽不到;有時候是對方聽到,但自己聽不到這個噪音;還有就是在 手機快響起的時候,電腦的喇叭or汽車的喇叭or教室的擴音器也會出現嗶嗶的聲音。
還是不知道我在說什麼聲音嗎?可以到這裡來聽聽:
(2009.07.05 更新,原來在youtube找的影片不見了,我自己錄了一段影片,
一個是我不小心買到的便宜爛喇叭,一個是比較好的喇叭,可 以很明顯的比較得出來TDD noise)


為什麼會有這個聲音呢?下面用簡單易懂,不講太多艱深的方式來陳述。
先從GSM手機的原理來說起。
GSM是使用TDMA分時多工的技術, 利用不同的時間點傳送不同的使用者的語音通話等資料。
以簡單的假設來解釋,同時有八個人在一間房間裡跟錄音機講話,為了要錄下所有人的聲音來溝 通,使用第一秒第一個人講話,第二秒第二個人講話,第三秒第三個人講話…到了第九秒又回到第一個人講話,如此就是分時多工。
而因為分時多工的關 係,手機會開關power(功率),即一下講話一下不講話的意思,而且是週期性的出現,這個週期時間是4.615ms(10^(-3) 秒),換算成頻率是1/4.615ms=217Hz(赫茲)。
一般聽力健全的人可聽見的聲音,其頻率約在20~20,000Hz之間,所以這個聲音是人耳聽得到 的,嗶嗶聲就是因此而來。

而手機的嗶嗶聲來源,主要有三種:

1.通過手機電源
2.通過不同傳輸路徑的耦合
3. 天線幅射出的功率耦合

手機會被影響出現嗶嗶噪音的元件有Mic(麥克風,講話收音)、Receiver(聽筒,講手機時耳朵聽聲音的聽 筒)、Speaker(揚聲器,發出來電鈴聲or放音樂出來)
當Mic有雜訊時,是對方會聽到嗶嗶聲;當Receiver有雜訊時,是我方會聽到 嗶嗶聲;當Speaker有雜訊時,是來電鈴聲or播出來的音樂會有嗶嗶聲。

1.通過手機電源即是手機PA功率放大器週期性的抽取電源的 時候,因為電源的不穩定,上述的三種元件都有接電,所以都會有217Hz的噪音,這樣就需要用電容去穩定電源。
2.通過手機內部的不同傳輸路徑的 耦合,這時候在layout的時候就要小心,把重要的電路保護好,不要外露或跟其他的線耦合到。
3.天線幅射出去的功率耦合,就是造成電腦的喇叭 or汽車的喇叭or教室的擴音器也有嗶嗶聲的來源,這時候只能期待那些電腦喇叭、汽車音響等,有做好保護的設計,要不然是無可避免的。而手機裡的Mic、 Receiver、Speaker則也必定需要設計好保護的電容來過濾,做不好的話,一樣就是通話中會有噪音了。這部份是相當難設計的,所以手機音質的好 壞,在這裡就顯得相當的重要。

至於為什麼電腦喇叭、音響之類的東西,會在手機快響起的時候才有嗶嗶聲呢?因為手機一般的時候並不是一直跟 基地台交換資料的,只是一段時間收一下資訊,跟基地台保持連結。而在電話要撥出或是要響起的時候,是要跟基地台交換相對較多的資料,所以手機會先用最大的 功率打出,以確保基地台能收到。之後與通話後,與基地台溝通,再調整手機的功率,若與基地台近一點,可能手機經由天線發射出去的功率就會調小,那功率比較 小,外部的音響也比較不會受到影響了,但當手機很靠近電腦喇叭的話,還是會有嗶嗶聲,大家可以試試看。

手機是拿來講電話的,聲音就是要清 楚,TDD noise的消除問題是一支手機好壞的重要指標。


1.TDMA示意圖
來源(http://cce.ccmtc.edu.tw /peterweb/book/download/無線通訊/ch14.ppt)



2. 人類聽覺的範圍
(來源http://www.cyut.edu.tw/~hcwul/ErgoPrac/u8.pdf)

2010年5月9日 星期日

Samba config

若 Linux 使用者,要分享目錄給其他使用者,都要去研究 smb.conf 這東西,但是對於初學者來說是很麻煩的事情。

不過現在 Ubuntu 使用者,可以用幾個步驟就可以完成。

1.打開檔案管理員 (Nautilus) ,找到你要分享的目錄,點選右鍵,選擇分享目錄 (Share Floder)。
2.若電腦內沒有安裝 Samba,系統會幫你安裝 Samba 套件。
3.安裝順利,出現設定分享資料夾名稱,以及分享權限。
4.到這邊基本都設定完成,不過還有一個步驟要處理,增加 smb user 帳號密碼。
5.打開終端機,下達指令。

sudo smbpasswd -a user

這樣,完成分享資料夾功能。

而在 Windows 環境,用網路芳鄰方式讀取 Ubuntu 分享資料夾。

不過 Ubuntu 預設的 工作群組是 MSHOME 電腦名稱是 主機名稱,所以在瀏覽上會比較麻煩。可以指令方式瀏覽。

開始 -> 執行 -> \\電腦名稱\分享目錄名稱

當然也可以修改設定,一樣請在 Ubuntu 電腦上,打開終端機。

sudo gedit /etc/samba/smb.conf

在最前面會找到這行敘述

workgroup = MSHOME

改成

workgroup = 您指定的工作群組
netbiosname = 您指定的電腦名稱

存檔離開,最後要重新啟動 Samba

sudo /etc/init.d/samba restart

新的 Samba 設定已經完成。

就某方面來看,設定上已經很方便,至少不像以前要翻文字天書,怎麼設定都不起來。
以上說明是最簡易的設定,至於要詳細當然要回歸最基本的 smb.conf 。