瀏覽模式: 普通 | 列表
08
22

JFFS2 file system-老而彌堅的檔案系統

會想寫這個東西的介紹是因為之前在酷學園看到有人提到如何在embedded system上做firmware upgrade, firmware upgrade每家公司的做法都不一樣,但目標都差不多,不外乎bootloader , linux kernel , file system upgrade,有強一點的公司還有做upgrade failure save的功能,而我這邊舉一個很簡單的例子,示範如何在embedded device上做linux kernel的upgrade,並且用jffs2 file system當我們的根檔案系統

JFFS2自2.6開始支援NAND Flash, NAND Flash與NOR Flash的設計理念差很多,為了cost down, NAND flash減少了在NOR Flash上不必要的位址線,改為page read/write方式存取,以QT2410的NAND Flash為例,一次的讀/寫,都是以512 byte為單位,所以Linux為了NAND Flash新增了NFTL(NAND Flash Transition Layer),NFTL最主要的目的,是讓EXT2,EXT3...等不是FLASH專屬的file system讀寫nand flash,而JFFS2或YAFFS都可以不透過NFTL進行FLASH read/write(2009.1.19修改),而細節部份小弟不多說了,google一找都一堆資料

[閱讀全文]

標籤: embedded
08
19

ipkg-輕量級套件管理系統

ipkg是在嵌入式裝置上最常見到的套件管理系統,如iPAQ,或Linksys的WRT54G都可以看到它的身影,其實這幾年來,隨筆者玩的板子越來越多,也發現很多家公司連實驗板都使用ipkg套件管理系統,這樣的目的其一是為了簡化安裝軟體的手序,其二是為了讓實驗板安裝不同的ipk而達到不同的功能,如果一塊板子裝完server.ipk,它就搖身一變為擁有各種不同網路伺服器功能的裝置,如果改裝phone.ipk,它可能又被用來當作電話交換機使用

[閱讀全文]

標籤: embedded
07
02

Linux porting on different platform HowTo(完)

底下是操作的流程與貼圖,請先下載qt2410 noMMU image pack

(1)燒錄u-boot.bin(made by armzone
(2)開啟本機端的tftp server,並把image都擺在tftp的家目錄

(3)u-boot開機完後請在命列輸入run wkf(write kernel to nand flash and load file system)

[閱讀全文]

標籤: embedded
07
02

Linux porting on different platform HowTo(5)

如果要讓kernel自解壓縮時把訊息印在console,那只要寫下列函式即可
(1)console initial函式
(2)putc函式
這兩個函式是獨立於driver之外的特殊函式,在編譯kernel時,當編譯到misc.c,會把以下這幾個函式編進去

[閱讀全文]

標籤: embedded
07
01

Linux porting on different platform HowTo(4)

修改完我之前講過的irq,timer後,渡過了一段console沒有字的debug時間,從頭到尾都用ICE去trace是很悶的,現下我把console的程式碼加上,讓console跑點字出來吧

Kernel所有的訊息都是印在console上的,所以在kernel用printk其實等於直接把buffer content倒在console

但user space的application可不是這樣,當printf印訊息時,其實是透過tty driver呼叫我們的serial driver然後請serial driver幫忙印字

藉由上面的介紹,大概瞭解console driver會用到serial driver的write函式,而serial driver也必需跟tty driver註冊自己

[閱讀全文]

標籤: embedded
07
01

Linux porting on different platform HowTo(3)

QT2410的timer一共四組,我這邊先略過timer詳細的操作步驟,相關資料在網路上都可以找得到,而timer範例程式碼可參考我之前寫的qt2410 bootloader

打開arch/arm/mach-qt2410/time2410.c,可看到如下程式碼
  1. struct sys_timer qt2410_timer = {
  2.         .init           = qt2410_time_init,
  3.         .offset         = qt2410_gettimeoffset,
  4. };

[閱讀全文]

標籤: embedded
07
01

Linux porting on different platform HowTo(2)

承之前的文章, Linux porting的步驟如下所示
1.根據你的平台和相關硬體,找出一個跟此結構最相似的architecture
2.拷貝這個結構的硬體範本到新結構的目錄下.通常只需拷貝以下幾個資料夾
  <1>arch/xxx/mach-xxx
  <2>include/arch/xxx/mach-xxx
3.試著編譯新架構並修改相關的define和Kconfig檔案
上面的步驟完成後,你已經有一個新架構的殼在那裡了

[閱讀全文]

標籤: embedded
06
20

Linux porting on different platform HowTo(1)

這篇主要是介紹如何porting Linux到不同platform的步驟,並且把該修改的檔案和kernel該選的選項稍微介紹一下,會順代提一下debug的方式

因為小弟最近在忙其它的專案,所以這篇HowTo我把它分成幾個部份分開發表,而我打算以NoMMU的QT2410 Linux做為此次移植的目標.

[閱讀全文]

標籤: embedded