發表文章

目前顯示的是 十一月, 2011的文章

Vim視窗常用指令

這篇會紀錄我常用的Vim指令所以沒有什麼好講的。

1. 同時打開多個檔案,並且垂直顯示多個檔案

$> vim -O2 file1.txt file2.txt

-O 垂直顯示
-o  水平顯示

p.s. 如果要重新打開不同的檔案就用下面的指令
[ESC] 
:e [file name]

ctrl+w s : 改變顯示方式為水平顯示
ctrl+w v  :  改變顯示方式為垂直顯示
ctrl+w q  :  關閉目前的視窗

ctrl+w -> : 跳到右邊的視窗
ctrl+w <- : 跳到左邊的視窗
p.s.
-> :右方向鍵
<-   : 左方向鍵 

ctrl+w >: 重新調整目前視窗大小,如果是水平的話向右邊擴大
ctrl+w <  :  重新調整目前視窗大小,如果是水平的話向右邊縮小

2. 使用vim來編輯binary檔

只要下:%! xxd就會用16進位來編輯拉
如果要存檔要用:%! xxd -r


3. 搜尋特定文字並且刪除

reference : http://vim.wikia.com/wiki/Search_and_replace

如果你的文字檔的內容長的像以下的樣子:

001:,2,3,4,5
002:,2,3,4,5
003:,2,3,4,5
004:,2,3,4,5
005:,2,3,4,5
more......

當你想將":"這個符號給刪掉的話,可以用以下的方法快速刪除. 不懂意思的話可以看一下參考網站。

[ESC]
:1,$s/://g

4. 將每一行的結尾加上特定文字

如果你的文字檔長的像:


001:,2,3,4,5
002:,2,3,4,5
003:,2,3,4,5
004:,2,3,4,5
005:,2,3,4,5

你想在每行的最後面加上" ,",像:


001:,2,3,4,5,
002:,2,3,4,5,
003:,2,3,4,5,
004:,2,3,4,5,
005:,2,3,4,5,


[ESC]
:1,$s/$/,/g


5.  取消上一次搜尋的highlight

[ESC]
:noh

6.  Comment out multiple lines

You can alternatively select your lines with VISUAL LINE (SHIFT-V), then type : s/^/#
This tells the sele…

Linux Kernel Module Parameters

Reference :
1.  http://tldp.org/LDP/lkmpg/2.6/html/x323.html
2.  http://makelinux.com/ldd3/chp-2-sect-8

前言:
        這個文章是我最近在寫Linux Kernel Device Driver遇到的問題,所以想說寫下來才不會忘記,也順便分享出來讓有需要的人更快可以上手,如果對於我寫的文章有問題或是有更好的想法,也請大家一起交流。

相關參數介紹:

        在寫Linux Kernel Module的時候,我們用insmod或modprobe安裝的時候,可以對module填入我們想要的參數,例如:

            $> sudo  insmod mymod.ko number=10


這樣的好處讓你的Kernel modules在設計的時候會比較有彈性,然後這些參數在Kernel module是經過module_param這個Macro來處理。以下是對module_param的介紹:


module_param( param name, data type, permissions bits);


 1. param name : 參數名稱
 2. data type       : 資料型態



boolinvboolA boolean (true or false) value (the associated variable should be of type int). The invbool type inverts the value, so that true values become false and vice versa. charpA char pointer value. Memory is allocated for user-provided strings, and the pointer is set accordingly. intlongshortuintulongushort3. permissions bits : The final module_param field is a permission value; you should use the definitions found in . This value …

C Language : 指標加offset的問題

最近寫C Code遇到了指標加offset的問題,當我如果直接將pointer加數值的話
會因為資料型態的關係來影響最後計算出來的位置。例如:int 在我的電腦大小為
4bytes(這個數值不一定,看機器而定),當我定義int i = 1的時候再跟pointer相加最
後的結果是位置加4而不是加1。所以再做pointer加數值的時候應該先將pointer轉成
跟數值一樣的資料型態然後再做相加,最後再轉成pointer,這樣位置才是自己想要
的。(原因我自己還沒搞懂之後找到資料再貼上來)


============以下是程式碼===============
#include <stdio.h>

int main(int argc, char **argv)
{
unsigned int *po = (unsigned int *)malloc(sizeof(unsigned int));
int i=0;

for(i=0;i<5;i++)
{
printf("1. address = %x\n",po+i);
printf("2. address = %x\n",(unsigned int *)((unsigned int)po+i));
}
return 0;
}


=================結果=================
i=0

1. address = c08010
2. address = c08010
i=1
1. address = c08014
2. address = c08011
i=2
1. address = c08018
2. address = c08012
i=3
1. address = c0801c
2. address = c08013
i=4
1. address = c08020
2. address = c08014