在uClinux下使用Flash

2021-06-15 20:03:37 字數 4948 閱讀 2769

flash memory

有兩種:

nor、

nand。讀

nor flash

就像讀sram

一樣,可以從任一位址讀取,可以直接從

nor flash

中執行**,因此在小型系統中,選擇

nor flash

是一種好的選擇。

nor flash

大小主要從幾百kb到

64mb

。nand flash

一般一次讀乙個

block

,就象乙個硬碟一樣。

nand flash

不能直接執行**。

nand flash

比nor flash

便宜,同時容量也更大,一般是

8mb以上,甚至到gb。

寫flash

需要固定的步驟,不象寫

ram。寫之前一般都要先擦除。

所有的flash

都有分段(

segment

)或是分塊(

block

)的概念,乙個段或是塊是擦除的最小單元。不能擦除乙個或是幾個位元組。段(塊)的大小與具體的產品相關,一般是

8kb~

128kb

。接下我們重點關注

nor flash

,因為在大部分的

uclinux

系統中,使用的都是

nor flash

。顯而易見,

flash memory

是儲存系統**與資料的裝置,最簡單的方案就是把

uclinux

的核心放在處理器的啟動位址,並把

flash

作為乙個大的儲存器。

但通常的用法都是將

flash

進行分割槽,乙個典型的分割槽方案:

這是乙個很簡單的分割槽方案,你也可以設計都很複雜。只要注意分割槽是段(塊)的整數倍,因為擦除的最小單位是乙個段(塊)。

這個方案中是把

kernel

、root filesystem

放在不同的分割槽中,而不象桌面系統或是伺服器,通常它們是把

kernel

放在root

檔案系統中的。只所以不放在一起,是因為放在一起的話,需要乙個智慧型的

bootloader

(比如lilo

、grub

),能夠知道那些塊是

kernel

而載入到

ram。

有幾種方案來放置核心與根檔案系統:

a、核心――固定位置,根檔案系統――固定位置

b、核心,根檔案系統緊隨核心

c、壓縮核心與根檔案系統方案a

:方便bootloader

查詢核心、根檔案系統,並方便公升級。缺點是要浪費一部分空間方案b

:節約空間,通常是把核心和根檔案系統組織成乙個檔案,這樣公升級時要把核心和檔案系統一起更新方案c

:最節約空間,但需要

bootloader

解壓縮當前

uclinux

有三種塊裝置可以包含根檔案系統:

blkmem

裝置mtd

裝置ram disk

裝置blkmem

驅動是最老的驅動,配置複雜;

mtd驅動是

linux

下標準的

flash

驅動很明顯,

mtd驅動是最強大的

flash

的驅動,其允許在

flash

上建立read/write

的檔案系統,比如說

jffs

、jffs2

。而blkmem

驅動不行。 在

uclinux

下有數種根檔案系統可供選擇。

romfs

:cramfs

:mtd

之上的read/write

檔案系統,如

jffs

、jffs2

當使用mtd驅動時,有如下工具可供使用:

flatfsd

對於嵌入式系統儲存使用者配置是乙個理想的解決方案。

flatfsd

在後台執行,當接收到

sigusr1

訊號時,

flatfsd

將會把/etc/config

的內容寫入

/dev/flash/config

。下面是配置

flatfsd

的步驟

/bin/expand /etc/ramfs.img /dev/ram1

mount -t ext2 /dev/ram1 /etc/config

將ram1

載入到/etc/config

目錄,這樣就可以對

/etc/config

進行讀寫,這個目錄將被應用程式用來儲存配置。

flatfsd

可以與三種裝置進行互動:

mtd device

block mem device

disklike device

flatfsd

預設情況下將

/etc/config

的內容寫入裝置

/dev/flash/config

,因此必須將

/dev/flash/config

與相應的裝置關聯起來。

如何關聯

/dev/flash/config

?兩種方法:(通過主

makefile

或是手工操作都行)

例如我們使用

mtd裝置(

mtd裝置的主裝置號為

90,次裝置號為偶數的為可寫的裝置)

方法一:在主

makefile

中(vendors/***/

目錄下)

flash_devices = /

image,c,90,0 /

config,c,90,2 /

loader,c,90,4

romfs:

[ -d $(romfsdir)/$$i ] || mkdir -p $(romfsdir)

for i in $(romfs_dirs); do /

[ -d $(romfsdir)/$$i ] || mkdir -p $(romfsdir)/$$i; /

done

for i in $(devices); do /

touch $(romfsdir)/dev/@$$i; /

done

for i in $(flash_devices); do /

touch $(romfsdir)/dev/flash/@$$i; /

done

方法二:在主

makefile

中(vendors/***/

目錄下)

flash_devices = /

image,c,90,0 /

config,c,90,2 /

loader,c,90,4

romfs:

[ -d $(romfsdir)/$$i ] || mkdir -p $(romfsdir)

for i in $(romfs_dirs); do /

[ -d $(romfsdir)/$$i ] || mkdir -p $(romfsdir)/$$i; /

done

for i in $(devices); do /

touch $(romfsdir)/dev/@$$i; /

done

$(romfsinst) -s /var/tmp /tmp

$(romfsinst) -s /bin /sbin

$(romfsinst) -s /var/etc/hosts /etc/hosts

$(romfsinst) -s /var/etc/resolv.conf /etc/resolv.conf

$(romfsinst) -s /var/etc/inetd.conf /etc/inetd.conf

$(romfsinst) -s /var/etc/passwd /etc/passwd

$(romfsinst) /etc/ssl_cert.pem

$(romfsinst) /etc/ssl_key.pem

$(romfsinst) /etc/rc

$(romfsinst) /etc/ramfs8192.img

$(romfsinst) /etc/inittab

$(romfsinst) /etc/services

$(romfsinst) /etc/motd

$(romfsinst) -s /dev/mtd2 /dev/flash/config

很顯然,系統啟動的時候需要將

flash

裡面的配置讀入到

/etc/config

目錄。通過執行

flatfsd –r

可以實行這一點。一般將這個命令放入啟動腳步

/etc/rc

中,以便在系統啟動的時候自動執行。

flatfsd

也應當自動在後台執行,可以通過

/etc/inittab

中新增語句:

flt:unknown:/bin/flatfsd

來啟動

flatfsd

,也可以在

/etc/rc

中新增指令碼:

/bin/flatfsd &

來啟動。

如何保證

flash

的檔案沒被破壞?

flatfsd

會在寫flash

的時候寫入

checksum

,當執行

flatfsd –r

的時候,如果

checksum

不對,放在

/etc/default

裡面的預設配置將會生效。

uClinux在skyeye下測試hello

有待修改 cd testsuit cd uclinux cd at91 cd uclinux cs8900a skyeye e linux c skyeye.conf 執行,一直報錯 1.2.8版本的skyeye有很多問題,重新裝乙個1.2.6 sudo apt get build essentia...

在Debian下安裝使用Windows下的字型

debian下的字型不太好看,沒有windows下的好看,於是就想著將windows下的字型拷貝到debian下進行使用 去拷貝,我選擇了後者,當然如果你的硬碟裡有windows系統的話是最好的了你可以掛載它.沒有也沒關係,要不你 的位置是 system windows fonts 目錄下 syst...

在Windows下使用GCC

如何安裝 mingw gcc 編譯器套件 1 使用圖形化的自動安裝程式 2 使用命令列工具 mingw get 3 手動安裝 binutils mingw runtime dev and dll w32api mpc dev and dll mpfr dev and dll gmp dev and ...