瀏覽模式: 普通 | 列表
01
14

寫程式,花10分鐘,證明自己的觀念是錯的,無價

[2009.11.2]嚴重錯誤,kernel會自動poll driver是否有data給使用者,所以poll_wait函式會一直被呼叫,所以char driver只需註冊poll,open,release即可達到user space select的所有功能

前幾天跟同事討論到RTCP的事情時,突然腦中閃過一個想法,記得4年前有寫過一個小程式,可以定時把kernel的statics丟到user space, user space的program只用了select和read函式把資料讀出來並顯示在UI上,那時我以為poll_wait函式可以hang住user space process讓user space的程式可以等待kernel有資料時再讀出來,不過今天寫了一小段code發現自己觀念是錯的

[閱讀全文]

標籤: linux
01
13

pidstat-全域型memory leak偵測工具

前一陣子在玩效能評析工具時很意外的發現了這個好東西,一般偵測memory leak的工具都以連結特定library並以其攔截malloc或free,找出memory leaking的bug,或者是像valgrind針對單一的process動態偵測memory leaking的point,但是,有沒有一個tool,可以偵測系統上所有process 的memory consumption,並即時回報?當你系統有上百隻別人寫的程式,要如何快速的找出那隻程式亂幹記憶體?很感謝pidstat,它幫我解決上面提到的疑惑

Pidstat可在這個網站下載,它是sysstat這組系統工具中的其中一隻,sysstat還包含sar,sardc...等其它好用的東東,不過我這邊只專門介紹pidstat的用法,pidstat可下的command如下

[閱讀全文]

標籤: linux
01
12

Framebuffer兩三事-Test On QT2410

Framebuffer是個很好玩的驅動程式,它 allocate一塊自己的kernel memory,並藉由user space file open/read/write方式,把圖形寫入已allocate的空間,而這個已被allocate的kernel memory會對映LCD的pixel,framebuffer依靠此對應把圖形打到LCD上(2009.1.16修正),通常屬於framebuffer的device都被命名為/dev/fbx(x=any number),你可以做個實驗,假設你螢幕的driver是framebuffer,而且它在/dev資料夾下是/dev/fb0,你可以用下面指令補捉螢幕畫面

dd if=/dev/fb0 of=fbdata bs=1024 count=768(假設解析度為1024*768)

也可以用下面指令把fbdata顯示在螢幕上
dd if=fbdata of=/dev/fb0 bs=1024 count=768
所以透過open,read,write /dev/fb0我們可以直接對video card memory讀寫

我先寫一個小的簡單的framebuffer driver範例,並試著解釋一些數據的原理,因為小弟並不是攻這方面的人,所以有錯誤或缺失的地方煩請先進指正

[閱讀全文]

標籤: embedded
12
15

UIO-Linux user space I/O driver

有一陣子沒寫部落格了,最近都在研究RTP的CODEC,真佩服那些電機電子的人,可以想到那麼多的好點子壓縮語音和資料,而且壓縮率還非常驚人,以G729A為例,160 byte的語音資料經過壓縮居然只剩10byte…天阿,寫程式也沒這麼精簡

回到主題,UIO這個東西是雖然是今年四月份的時候merge到kernel trunk,但其實在linux界很早就有相關的應用,因為它的技術很簡單,就是直接把kernel memory一對一映射到user space memory,藉由這樣mapping的方式,讓user program直接在user space存取hardware I/O

[閱讀全文]

標籤: embedded
11
17

nunnifsmgen-有限狀態機程式碼自動產生器

這個是從同事那邊知道的好東西, Nunni FSM Generator,它能自動根據你輸入的設定檔產生狀態機的程式碼,詳細的資料請查閱軟體的使用說明,但我要講的重點在於它”自動產生的程式碼部份”,因為自動產生的code封裝得十分漂亮,所以我想對code做點介紹

以前寫狀態機的東西,不脫離if,else,case,switch…等這幾種語法搭配,可是寫出來的code”不大容易讀懂”,比如說我今天有個狀態機如下圖,假設有一張桌子,上面只能擺一個瓶子,我如果拿走了這個瓶子,那我就不能從桌子上再拿走瓶子了,如果桌子上已經擺了一個瓶子,那桌子上就再也不能多加瓶子上去

[閱讀全文]

標籤: software
10
15

GDB-刺入bug心臟的寶劍

寫這篇文章時突然想起一位很久不見的朋友,他是我工作第一年的夥伴,這位好友令我印象最深刻的是他使用GDB的技巧,那時是我第一次看到process可以被attach,signal可以被攔截...等諸如此類的特技表演,我那位朋友對gdb的熟練度可能比吃飯還高,也多虧他的幫忙,讓我瞭解除了printf以外的其它debug好招

這篇文章主要是示範如何進行遠端除錯,所以請先下載最新版的GDB package version 6.8,我的實驗板是QT2410,toolchain為ELDK(ELDK有內建gdbtui),下載解壓縮完後,請執行下面的shell script,讓編出來的gdb可以support ARM架構,--enable-tui是讓GDB編出圖形化UI debug界面

  1. #! /bin/sh 
  2. ./configure --target=arm-linux \
  3. --prefix=/usr/local/eldk/armgdb \
  4. --exec-prefix=/usr/local/eldk/armgdb \
  5. --enable-tui

[閱讀全文]

標籤: embedded
10
13

PJSIP-SIP stack的明日之星

最近假日真多,連續破了好幾個遊戲,如”鬼屋魔影5”,”末日之戰-彈頭”…等,不過發現近視度數好像加深了,看東西都糊糊的,不過這樣也好,年紀大時老花眼不會這麼快來

話說這一陣子都在玩SIP的東東,也成功的把PJSIP porting在有DSP的板子上運作(板子上的DSP可以直接編解碼RTP,所以我修改PJSIP以便攔截RTP),而藉著PJSIP強大的函式庫,我的程式除了硬體控制的部份外,其它SIP控制的部份零零總總加起來可能連100行都不到,由此可見PJSIP封裝的能力,但難能可貴的是以下幾點
1.它實在很好移植-好像有網友已經把PJSIP擺在PSP上了
2.明確的程式架構-PJSIP的架構讓讀它的人很爽
3.詳細的說明文件-就是這點贏過oSIP,Sofia SIP…等

[閱讀全文]

標籤: linux
10
03

Telnet daemon-RS232以外的選擇

最近電腦常常會發生RS232轉USB的裝置被無故佔用的問題,所以都用telnet的方式debug我的embedded system,建立embedded telent daemon最常用的套件就是busybox的telnetd,原因很簡單,因為busybox的telnetd不需依靠inetd就可以運作了,而且busybox選單有詳細的說明使用步驟,所以我下面列那些東西都是從busybox內的說明照抄的

 

[閱讀全文]

標籤: embedded