2013年5月14日 星期二

於u-boot內查看Linux kernl的printk buffer.

於Linux build directory內,打開System.map,搜尋__log_buf,

c035ff98 b __log_buf

->009e06b8即是printk buffer所在的kernel virtual address,可以使用下列方式取得實體位址
printk(KERN_ERR "__log_buf 0xc035ff98 ---> %p \n",__pa(0xc035ff98));

一般想偷懶的話可以直接將0xc0換成chipset 的DRAM memory base address,像AST2300是0x40000000

可以使用md 4035ff98讀出printk buffer的內容。

2013年4月2日 星期二

Pass the string array to some function.



傳遞字串陣列時,若已有事先指定每個字串的長度,則需於fun1 parameter中填入一樣的長度

否則會發生segment fault...

...

int fun1(char str[][5]){

        printf("str:%s.\n", str[0]);

        return 0;
}


int main(){
        char a[5][5];
        sprintf(a[0], "%xh", 32);
        fun1(a);
        return 0;
}

2012年12月28日 星期五

新版大象機

今日在開封街某藥局入手的電動吸鼻器 - 新版的大象機 
可以調整吸力...




2012年12月18日 星期二

i9103 刷機方式

1. 從聯強拿回維修後的手機,會是ICS 4.0.4,可以先用odin刷回原廠的2.3.6 (從I9103ZSKK5_I9103OZSKK5_BRI(2.3.6).zip解壓縮出.md5),然後再用odin刷進CWM,就可以使用CWM來更換kernel為ardatdat_9103_kernel_v1.8.3_1.32G(136-8-8).zip。

2. 如果之後想升級到ICS 4.0.4,可先使用odin刷回原廠的2.3.6,再使用kies作線上更新,但不知為什麼刷到ICS 4.0.4後,螢幕鎖定的功能是失效的。

3. 如果想刷第三方的ICS 4.0.4,可以使用CWM來安裝MaZel_II_ROM_0919.zip。

p.s.1 開機後按下home+音量下鍵即可進入odin (挖礦)模式,進入後,再插上USB cable與NB相連,即可在odin 1.8.5看到手機ID。

p.s.2 開機後按下home+音量上鍵即可進入CWM模式。


2012年12月3日 星期一

Override signal action/handler的使用方式 in Linux

Linux process支援signal的機制,可以使用Linux command - "kill"去對某個process發送signal,
你也可以去捕捉想捕捉的signal,然後去override default signal action/handler...

如果想捕捉下面兩個signals,可以override它們的signal action function
(SIGKILL與SIGSTOP不能如此捕捉)

SIGSEGV - Core Invalid memory reference
SIGTERM - Term Termination signal

取得目錄下的所有檔案 in LINUX (another approach)

#include <dirent.h>
    ...
    struct dirent **namelist;
    int filenumber;
    filenumber = scandir(".", &namelist, 0, alphasort);
    while(n--) {
            printf("%s\n", namelist[n]->d_name);
            free(namelist[n]);
        }
        free(namelist);
    }
...