瀏覽模式: 普通 | 列表
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
10
01

在嵌入式系統切換file system-以squashfs和jffs2為例

因為有網友問到這個問題,所以我把它拿出來討論,熟讀LDD3(Linux Device Driver3)的朋友應該都知道Linux檔案系統和block driver之間的關係,在Linux kernel stack中,block driver負責驅動裝置上的硬體,而file system就是對block drvier下讀取和寫入的指令,所以只要能正確驅動平台上儲存裝置的block drvier,那你可以在此block driver上操作任何一種file system

[閱讀全文]

標籤: embedded
09
22

C與C++ List library的比較-武林高手,各有千秋

實在不曉得為什麼下這樣的標題,可能最近武俠小說看太多了,不過在講這個主題前,請大家一定要支持”海角七號”這部電影,真得很好看,令人好笑又感動,我打算有機會再安排個墾丁之旅,好好把當時的電影場景再逛一遍

回歸正題,LIST這個資料結構不難懂,只要把買電影票要排隊的那套邏輯拿來好好想一想,就知道LIST是做什麼用的,LIST可以說是QUEUE和STACK的原型,雖然只支援sequential access,但如果善用排序和搜尋,它存取資料的速度其實非常快,之前寫LIST的資料結構,都是用C++的STL,後來最近發現一個純C寫的Library “simclist”,它這支library使用上也蠻簡單的,支援類iterator的方式存取list,所以我把C++ STL和simclist拿出來比較看看,從記憶體,效能,和排序時間看看它們的優點 

[閱讀全文]

標籤: linux
09
12

Linux kernel module-進入系統核心的鑰匙

記得第一年工作時,leader丟給我的第一項工作就是撰寫新的路由protocol,這個protocol有點像ADHOC的DSR(dynamic source routing),會在封包頭加上路由的資訊,藉由這樣的資訊,讓封包到達目的地,但問題是,我根本連Linux是什麼東東都不太清楚,大學+研所6年讀下來,都活在微軟的世界,碰過的OS只有Windows,所以上班的第一年幾乎每天都在讀Linux的技術文件,和kernel coding的資料,當然,也享受了整整半年多開機當機的慘況,因為kernel module寫的不好,OS就當給你看,經歷過這些雜碎的失敗後,當我寫的module正常的運行在實驗平台時,那種興奮是後來的成功無法取代的

我覺的開始寫複雜的kernel code前,先把演算法相關的程式在user space測試過,再搬到kernel code裡面,在kernel code只要專注kernel API即可(光搞這個就可以耗很多天了),不過我之前碰過一位R公司的RD,他很驕傲的跟我說,他們寫kernel code都不需像我這樣在user space先測,都直接kernel debug,我真的很佩服他們,台灣雖小,神人很多

[閱讀全文]

標籤: embedded