2009年10月30日星期五

GNU C Expand

1. __attribute__ ((variable attributes))

variable attributes:

• aligned
• deprecated
• mode
• nocommon
• packed
• section
• transparent_union
• unused
• vector_size
• weak

section ("section-name")'

extern void foobar (void) __attribute__ ((section ("bar")));
puts the function 『foobar' in the 『bar' section.

example:

#define subsys_initcall(fn) __define_initcall("4",fn,4)

//用來將指定的函數pointer fn放到initcall.init section
//是把fn放到.initcall.init的section.initcall4.init

initcall4.init defined in arch/i386/kernel/vmlinux.lds.S

.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET)
{
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
}


2. likely and unlikely

in include/linux/compiler.h

#define __builtin_expect(x, expected_value) (x)

#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)


example:

if(likely(value))
{
}
else
{
}

//看起來likely和unlikely是一樣的, 但事實上是有差異的
//likely表示value的值為true的可能性更大一些,那麼執行if的機會大;
//unlikely表示value的值為false的可能性大一些,執行else機會大一些。
//有了這種修飾,gcc編成組語後,
//會將likely使得if後面的執行語句緊跟著前面的;
//unlikely使得else後面的語句緊跟著前面的程序
//這樣就會可以讓cache預先讀取,
//目的是增加程序的執行速度

2009年10月6日星期二

Meld : Diff and merge tool

比較和合併code的工具,在windows上有[Araxis Merge],但它並非open source software,因此有[WinMerge]可以替代,而在linux上比較常見的是[KDiff3]和[Meld]。

而我最常用的是Meld,它的操作很容易就可上手。

2009年10月2日星期五

Coding tips, Vim顯示當前行

輸入":set cursorline".
或輸入":set cul".

取消當前行:
輸入":set no cursorline".
或輸入":set no cul"

2009年9月28日星期一

gcc: warnings being treated as errors

在Ubuntu 9.04,編譯linux kernel for mips時出現了這個問題

gcc: warnings being treated as errors
scripts/kconfig/conf.c:104: error: ignoring return value of 'fgets', declared with attribute warn_unused_result
...

原來是在./src/Makefile的HOSTCFLAGS variables加了-Werror...
把它去掉之後,就能編過了...

2008年11月7日星期五

Trace code tool

以前在Trace OpenSouce code時,常直接用文字編輯器,感覺很不方便,還要自己找檔案。最近發現一套很好用trace code的工具[GNU Global],它能很神奇的將程式碼變成網頁,而且產生方式超簡單的。

產生網頁的方法:

1. 進入原始碼的目錄下

$ cd ~/speech

2. 執行htags

$ htags -g -F
-g 先執行 gtags
-F 代表要將網頁切成多個Frame

3. 原始碼目錄下就會產生一個叫HTML的目錄

就可以直接用Browser開啟index.html,如下圖所示。



接下來看code就很快了....

2008年8月27日星期三

Qemu for ARM System emulator

[Qemu]是個相當不錯的模擬器,它不只可以模擬x86,還可模擬arm。最近找了很多相關的資料,發現目前已經有很多人寫了不錯的教學,而且qemu支援的arm平台[ARM System emulator]也相當多。但重點是qemu並非所有arm的平台都支援,所以或許可以找找patch或自己試著修改看看,才能符合自己的平台。

[OPENCSL]這個網站相當不錯,初學者可以很快做出一個"ARM Integrator"(ARMB26EJ-S的架構)的模擬器。另外是OpenMoko[Neo1973],目前已有修改過後的qemu,跑出來就跟真的環境一樣。然後[Linux on Palm 5]也有修改後的模擬器,都可以實際跑起來。

有興趣的朋友,可以玩玩看,我覺得還滿有趣的。

2008年2月22日星期五

OSDC.TW 2008

一年一度的OSDC.TW又要來了。

去年OSDC.TW 2007我有去參加,覺得主辦人[hcchien]相當用心,而且可以看到很多很厲害的OpenSource高手的"真面目",而且可以見識到現在很多新技術和想法,個人覺得OSDC.TW真的是不錯的Conference...

今年的[議程],也很令人期待,想報名的人請到[報名],要快哦!!不然很快就滿了><"

Reference: [OSDC.TW]