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

SQUASHFS-Linux壓縮型檔案系統的王者

squashfs是眾多Live CD使用的檔案系統,Why?因為它那嚇死人的壓縮率,舉個例子,以筆者製做的root file system為例,壓縮過後的initial ram disk大小為1.3MB,但squashfs製做出來的file system image只有500多k,squashfs image居然只有compressed initial ram disk image一半的容量,這種節省儲存空間和記憶體空間的檔案系統,最適合在台灣用了,因為代工廠最需要的cost down,這種軟體技術做到了在小容量記憶體系統中放大檔案的可能性

[閱讀全文]

標籤: embedded
08
27

RAMFS檔案系統-Linux 2.6的新朋友

ramfs可能是我目前看過最容易上手的linux檔案系統,設定的方法非常簡單,進入kernel選單後,只要勾選[Initial RAM file system and RAM disk (initramfs/initrd) support]和設定Initialramfs source file,就可以在編譯kernel時把file system和kernel一起打包,設定的方法大致如下圖

[閱讀全文]

標籤: embedded
08
26

CS8900A Linux驅動程式介紹

記得之前在面試某家CHIP Vendor時,面試官對我之前寫過的(應該是抄過的)S3C4510b網路驅動程式很有興趣,他很詳細的問我每個流程,而且還不准我看資料必需馬上回答他,說老實話,S3C4510B的網卡驅動有點小複雜,再加上我已經有一段時間(2,3年)沒碰S3C4510B,整個驅動的細節幾乎都忘了,不過我還記得我開發S3C4510B driver的大概流程

首先針對開發板寫driver時,我都會用ADS搭ICE寫Boot code開始,然後再一步一步新增driver code測試,像4510b上面的UART, nor flash, network,都是慢慢堆積起來的,而這樣邊寫邊看datasheet會讓自己學到很多東西,我覺得一開始寫driver的環境最好不要搭OS,用最乾淨的環境測試,問題會少很多,只要專注在硬體控制就可以了,而且實驗板大部份都通過QC,需要請示波器出來的情況幾乎沒有

[閱讀全文]

標籤: embedded