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

SQLite-麻雀雖小五臟俱全

前一陣子寫裝置管理軟體時,曾經有考慮過使用SQLite這個database,因為它的優點是簡單易用,體積小(56k),記憶體使用量少(100多k),所以我曾經寫一堆wrapper API,把它封裝成方便工程師呼叫的函式,不過後來因為效能和系統整合的考量,又寫了另外一套管理的軟體取代掉先前寫的東西,其實自從離開學校開始工作後,幾乎一個程式都會寫好幾個版本互相比較效能,看看有沒有一個time complexity 和space complexity的平衡點,所以我覺的在學校演算法的基礎要打好一點,ACM多玩一點,對自己幫助很多,不過最好的是能碰到功力高強的同學一起切磋,進步幅度會很快

[閱讀全文]

標籤: embedded
09
04

Expat+SCEW-操弄XML的瑞士刀

之前處理XML文件時,就是用這套工具橫行江湖,Expat提供細緻的函式讀寫xml文件,SCEW則是把Expat函式包裝成亮麗的界面供使用者更方便的存取xml,個人覺的,這兩套函式庫實在不輸給.net System.xml下的API

首先下載expat libraryscew library,這兩套軟體的使用方式很簡單,執行configure,make,make install後,就可以使用它們的library,而我這邊的範例編譯時用static link,所以我都直接連接它們的.a函式庫檔

Makefile的範例如下

  1. ALL : example 
  2.  
  3. example : example.c 
  4. $(CC) -I./scew-0.4.0/scew/ -o example example.c libscew.a libexpat.a 
  5. clean :
  6. rm example

[閱讀全文]

標籤: linux
09
03

lighttpd+CGI+ipkg-遠端韌體更新的好幫手

寫這篇文章時,我突然想到周星馳演的一部電影,”國產007”,裡面有位”國家級研究人員”,研發了一種集10種不同殺人武器的兇器,好像叫”要你命3000”,結果這人間兇器一拿出來,居然是把什麼菜刀,電鋸,王水…等,通通用繩子綁在一起,哇靠,看到這樣的”武器”真想馬上飆髒話,不過這樣的武器倒也蠻搞笑的,能不能拿的動還是問題

話題回到這篇文章的主題”遠端韌體更新”,以後簡稱為”UI upgrade”,在一般網路裝置上,最常看到的,就是提供網頁的介面讓使用者更新網路裝置的韌體,而這樣的功能在實作上需要準備
(1)Web server:lighttpd or goahead web server(goahead已經不更新它的web server)
(2)可更新目標板軟體的工具:ipkg or busybox dpkg
(3) html和cgi:自己寫
實做時我選擇lighttpd+ipkg,而網頁的部份採用html+cgi,以下會分為三段介紹這三個實作

[閱讀全文]

標籤: embedded
09
02

Shared library on embedded platform-以ARM9和uClibc為例

在講解UI upgrade之前,先談談Linux的shared library,因為這對往後要交叉編譯的應用軟體是蠻重要的事情,在四,五年前,ARM一直都以NO MMU姿態出現在各個不同的嵌入式平台,所以當時所有的可執行檔都編成static binary外加去頭(用objcopy把elf頭檔幹掉),這樣做是因為NO MMU的LINUX不能吃ELF格式的可執行檔,而近幾年ARM with MMU支援的平台越來越多,所以很多人把應用軟體諸如busybox, lighttpd…等都編譯成shared binary elf格式的可執行檔

[閱讀全文]

標籤: embedded
08
29

用pure C寫CGI的輔助工具-CGIC library

如何善用現有的library增快自己開發程式速度是現代工程師的課題,其實從我開始寫程式以來,大部份的動作,都是剪剪貼貼,看到不錯的演算法,就剪貼,看到能解決我問題的方案,也剪貼,我覺得只要能看得懂程式,就不算太嚴重的抄襲,甚至我可以補足這個程式某些沒有的功能,或加強程式的演算法,這些都能提昇我個人程設能力的credit

好了,廢話說太多了,這篇文章主要是介紹如何用c語言快速的寫出CGI程式,而我用的library就是大名鼎鼎的CGIC,這個library簡化了form與cgi溝通時所需要撰寫的複雜程序,工程師只要專注在不同type物件的name及value欄位即可

[閱讀全文]

標籤: linux