2013年9月5日 星期四

CScope 和在Linux用Seral port 連網樂通

要解決網樂通紅外線遙控器在網樂通改機俱樂部Chia-Cheng Huang (suzuke)釋出的 kernel 2.6.32版無法喚醒的問題,
得要從改Kernel的程式碼下手,
看到可以用CScope來追程式碼。

下面是用來產生CScope要用的檔案清單 cscope.files 及生出三個索引檔。

LNX=/kernel/source/file/directory
DB=/cscope.files/and/index/file/directory
    cd /    
    find  $LNX                                                                \
    -path "$LNX/arch/*" ! -path "$LNX/arch/sh*" -prune -o               \
    -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-sh*" -prune -o \
    -path "$LNX/drivers*" ! -path "$LNX/drivers/stm*"  -prune -o        \
    -path "$LNX/crypto*" -prune -o     \
    -path "$LNX/Documentation*" -prune -o     \
    -path "$LNX/scripts*" -prune -o    \
    -path "$LNX/net*" -prune -o      \
    -path "$LNX/samples*" -prune -o     \
    -path "$LNX/security*" -prune -o   \
    -path "$LNX/sound*" -prune -o    \
    -path "$LNX/tools*" -prune -o    \
    -path "$LNX/virt*" -prune -o    \
    -path "$LNX/fs*" -prune -o    \
        -name "*.[chxsS]" -print > $DB/cscope.files
    find $LNX/drivers -name lirc* >> $DB/cscope.files
cd $DB
time cscope -b -q -k


參考資料:
1.再探 網樂通 uboot code (TWPDA UBOOT)
2.Using Cscope on large projects (example: the Linux kernel)

可是一直以來都是用 Windows xp上的 超級終端機連上網樂通的TTL console,
得要搞定在Linux上使用Serial port連線才好做事。
找到了 Minicom
一開始預設連接的裝置不是一般PC上的 Com 1,
要先到設定畫面改些設定。

# minicom -s
選擇Serial prot設定
Serial port setup

把裝置改為要用的 Serial port ,
可以在 dmesg 中找看看有什麼 ttyS 的可以用。
Com 1通常是 /dev/ttyS0
A -    Serial Device      : /dev/ttyS0
弄到這裡想到是不是網樂通上的TTL port也可以當作控制端,
這樣就可以省掉買USB轉RS232了。

但是設定後有接收到資料,
卻無法輸入,
還要再取消硬體流量控制。
F - Hardware Flow Control : No

整個Serial port setup 內容:
A -    Serial Device      : /dev/ttyS0
B - Lockfile Location     : /var/run
C -   Callin Program      :
D -  Callout Program      :
E -    Bps/Par/Bits       : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No

上面的設定環境是在快滿10歲的ASUS P4P800 主機板上。
最後到主選單把設定存成預設,
之後應該就可以直接執行 minicom 直接使用。

Save setup as dfl

選擇 Exit 可以直接到終端機控制畫面。


目前爬kernel程式碼的收穫:
在kernel 2.6.23版上
setup-stx7105.c
/* LiRC resources ---------------------------------------------------------- */
static struct lirc_pio lirc_pios[]
紀錄了兩個輸入和輸出的腳位,
猜有用到的應該是 .bank = 3, .pin = 0,

另外有紀錄裝置設定資料:
static struct plat_lirc_data lirc_private_info

有關suspend的可能是這段:

drivers/char/lirc/lirc_stm.c
static int lirc_stm_suspend
在 kernel 2.6.32版上
紅外線遙控器的設定資料在
platform.h
/*** LiRC platform data ***/
struct stm_plat_lirc_data

可能有關suspend的同樣在
drivers/char/lirc/lirc_stm.c
static int lirc_stm_suspend
發現2.6.32版多了判斷 device_may_wakeup,
試著取消這個判斷,
也就是強制裝置在可以喚醒的狀態,
還是無法喚醒,
看來問題沒有這個單純啊。

另外額外發現一點,
網樂通改機俱樂部Chia-Cheng Huang (suzuke)釋出的0822版 stmfb雖然可以正常啟用,
可是會阻止系統進入standby和suspend,
不過目前影響不大,
或許只要在進入省電之前rmmod和喚醒時重新insmod就可以暫時解決。



沒有留言:

張貼留言