2010年12月31日 星期五

取消剛剛的patch動作

有時候...會發生patch錯diff檔的事 :p
patch的雙向動作:

[Do It] patch -p0 < xxx.diff
[Undo] patch -p0 -R < xxx.diff

2010年12月14日 星期二

How to link pre-built kernel module

有些情況下
你會希望額外寫的kernel module會用到另一個pre-built好的ko
可是在原先build procedure裡頭
linux並不知道你事先pre-built好的module symbol
因此它在link之前會發現symbol undefine
WARNING: "abc_xxx_yyy_set" [drivers/net/abc/xxx.ko] undefined!

比較簡單的解決方法如下:
在linux-2.6.x/scripts/Makefile.modpost裡頭
加上
KBUILD_MODPOST_WARN := 1

這樣還是會出現原先那些WARNING
因為在這次的build procedure它的確還是不知道這幾個symbol在哪
但是它可以讓你繼續編過

詳細的部分可以參考linux文件目錄下面的Document/kbuild/kbuild.txt

165 KBUILD_MODPOST_WARN
166 --------------------------------------------------
167 KBUILD_MODPOST_WARN can be set to avoid errors in case of undefined
168 symbols in the final module linking stage. It changes such errors
169 into warnings.
170
171 KBUILD_MODPOST_NOFINAL
172 --------------------------------------------------
173 KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
174 This is solely useful to speed up test compiles.
175
176 KBUILD_EXTRA_SYMBOLS
177 --------------------------------------------------
178 For modules that use symbols from other modules.
179 See more details in modules.txt.


2010年12月1日 星期三

header file開頭的#ifndef也要留意

當程式碼越來越多
常常在加加減減和copy and paste的過程中
容易造成新copy的header file開頭的#ifndef忘了跟著改

這個情況常讓工作者抓不著頭緒
在開發工具上看著只是一些簡單的定義明明都有宣告
在相對應的程式碼中也有正確include需要的header path
可是compiler一直抱怨
error: `XXXXX' undeclared (first use in this function)

這個時候應該可以先檢查看看
是不是自己顧著快速copy and paste code卻忘了修改一些定義
常見的就是copy a new header
然後卻忘了改開頭的
#ifndef __MY_HEADER_H__
#define __MY_HEADER_H__
........
#endif /* __MY_HEADER_H__ */