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/ram1mount -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 ...