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月30日星期五
2009年10月6日星期二
Meld : Diff and merge tool
比較和合併code的工具,在windows上有[Araxis Merge],但它並非open source software,因此有[WinMerge]可以替代,而在linux上比較常見的是[KDiff3]和[Meld]。
而我最常用的是Meld,它的操作很容易就可上手。
而我最常用的是Meld,它的操作很容易就可上手。
2009年10月2日星期五
Coding tips, Vim顯示當前行
輸入":set cursorline".
或輸入":set cul".
取消當前行:
輸入":set no cursorline".
或輸入":set no cul"
或輸入":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...
把它去掉之後,就能編過了...
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就很快了....
產生網頁的方法:
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]也有修改後的模擬器,都可以實際跑起來。
有興趣的朋友,可以玩玩看,我覺得還滿有趣的。
[OPENCSL]這個網站相當不錯,初學者可以很快做出一個"ARM Integrator"(ARMB26EJ-S的架構)的模擬器。另外是OpenMoko[Neo1973],目前已有修改過後的qemu,跑出來就跟真的環境一樣。然後[Linux on Palm 5]也有修改後的模擬器,都可以實際跑起來。
有興趣的朋友,可以玩玩看,我覺得還滿有趣的。
2008年2月22日星期五
訂閱:
文章 (Atom)



