欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
如何在44b0開(kāi)發(fā)板armsys上建立基于nandflash的jffs2文件系統--平淡中的激情


                                      

本文參考資料:
    有關(guān)MTD和JFFS2的基礎知識:http://www.linux-mtd.infradead.org/tech/nand.html
    uClinux下MTD和JFFS2在M5407C3開(kāi)發(fā)板上的移植:
     http://www.enseirb.fr/~kadionik/embedded/uclinux/mtd/howto_mtd.html

1.概述

1.1關(guān)于Nandflash

    以S3C44B0X為核心的ARMSYS開(kāi)發(fā)板采用的Nandflash是三星公司的K9F2808芯片。它的存儲空間以頁(yè)為單位。1頁(yè)是由512字節的數據和16字節的備用空間組成(備用空間可以用來(lái)存儲ECC(糾錯碼),壞塊信息和文件系統相關(guān)的數據)。這里我們僅考慮數據空間即可。因此可以認為K9F2808每頁(yè)大小為512字節。32頁(yè)組成一個(gè)塊,因此塊的大小為16K(0x4小空間為0x4000字節。
    對芯片的讀/寫(xiě)/擦除命令的寫(xiě)入都是通過(guò)置高CLE引腳同時(shí)向I/O0~I/O7寫(xiě)入命令代碼字節來(lái)完成。地址的寫(xiě)入則是通過(guò)置高ALE引腳同時(shí)寫(xiě)入地址字節來(lái)完成。對Nandflash的操作僅需要對幾條信號線(xiàn)進(jìn)行控制即可完成了。
     /RE和 /WE信號線(xiàn)則可以由相應的bank選擇線(xiàn)與CPU的/OE和/WE邏輯與來(lái)控制。在A(yíng)RMSYS上是采用bank1選擇線(xiàn),因此Nandflash在系統中的映射地址是0x200000。
I/O 0-7聯(lián)接到CPU的數據總線(xiàn)D0-D7(D15). /WP直接接VCC而/SE直接接地即可。
    R/B,/CE,CLE ,ALE和都應當聯(lián)接CPU的GPIO引腳。ARMSYS中采用了PC0~PC3。
以上都是對我們移植MTD有用的信息??梢酝ㄟ^(guò)查看K9F2808的Datasheet來(lái)了解關(guān)于該器件更詳細的信息。

1.2關(guān)于支持Nandflash的文件系統

    現在僅有少量的文件系統支持各種類(lèi)型的Nandflash設備:

  • JFFS2 和 YAFFS 支持 NAND Flash芯片和 SmartMediaCard(智能多媒體卡)
  • NTFL支持 DiskOnChip 設備  
  • 來(lái)自 M-Systems的TRUEFFS支持 DiskOnChip設備
  • 由SSFDC論壇定義的SmartMedia(智能多媒體卡)的 DOS-FAT 文件系統

    其中JFFS2 是一個(gè)開(kāi)源的文件系統。JFFS2支持原始的NAND芯片同時(shí)支持SmartMediaCard。關(guān)于JFFS2的詳細信息可以查看http://sources.redhat.com/jffs2/ 。JFFS2還提供文件的壓縮和解壓服務(wù),這對小型的flash很有用處。JFFS2中包括了對壞塊的管理,糾錯并提供在Nandflash上使用的可用于工業(yè)用途的可靠穩定的文件系統。

1.3軟件層次

JFFS2的建立包括4個(gè)層次:

a) JFFS2:文件系統驅動(dòng)
b) MTD:存儲技術(shù)設備驅動(dòng)Memory Technology Devices driver
c) NAND:通用Nand驅動(dòng)
d) 特定的硬件驅動(dòng)

其中MTD驅動(dòng)提供給JFFS2一個(gè)掛載點(diǎn)。通用NAND驅動(dòng)提供必要的識別、讀、寫(xiě)和擦除功能。與特定的硬件相關(guān)的功能函數則由底層的硬件驅動(dòng)提供。

2.準備工作

2.1解壓uClinux移植包

我們還是采用uClinux在A(yíng)RMSYS上的移植包:uClinux-ARMSYS-20040801.tar.gz來(lái)完成JFFS2的移植的工作。
uClinux-ARMSYS-20040801.tar.gz是移植自uClinux-dist-20040408.tar.gz,在很多方面比早先的20030522版本要完善很多,這也使我們的工作變得方便很多。這里我們使用的內核版本是Linux 2.4.24。
將uClinux-ARMSYS-20040801.tar.gz拷貝到/home/下,運行解壓:

tar xvzf uClinux-ARMSYS-20040801.tar.gz

解壓結束后會(huì )在/home/下生成uClinux-dist目錄。

2.2安裝編譯環(huán)境
將arm-elf-tools-20030314.sh拷貝到根目錄,運行安裝:

sh arm-elf-tools-20030314.sh

3.修改drivers/mtd/nand/下的幾個(gè)文件

3.1修改Config.in

    在文件Linux-2.4.x/drivers/mtd/nand/Config.in查找到CONFI_CPU_S3C44B0X,在其中加入一行(以下用粗體顯示)對于A(yíng)RMSYS開(kāi)發(fā)板的選項:

if [ "$CONFIG_CPU_S3C44B0X" = "y" ]; then
dep_tristate ‘ NAND Flash device on FS44B0-CORE V2.00 board‘ CONFIG_MTD_NAND_S3C44B0X $CONFIG_MTD_NAND
dep_tristate ‘ NAND Flash device on ARMSYS board‘ CONFIG_MTD_NAND_ARMSYS $CONFIG_MTD_NAND
fi
這樣在后面進(jìn)行配置(make menuconfig)時(shí)就可以看到關(guān)于A(yíng)RMSYS的選項了。

3.2修改Makefile

在文件Linux-2.4.x/drivers/mtd/nand/Makefile中,加入一行(以下用粗體顯示):

#
# linux/drivers/nand/Makefile
#
# $Id: Makefile,v 1.10 2002/12/01 13:23:05 gleixner Exp $

O_TARGET := nandlink.o

export-objs := nand.o nand_ecc.o nand_ids.o

obj-$(CONFIG_MTD_NAND) += nand.o nand_ecc.o
obj-$(CONFIG_MTD_NAND_SPIA) += spia.o
obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o
obj-$(CONFIG_MTD_NAND_EDB7312) += edb7312.o
obj-$(CONFIG_MTD_NAND_IDS) += nand_ids.o
obj-$(CONFIG_MTD_NAND_S3C44B0X) += s3c44b0x.o
obj-$(CONFIG_MTD_NAND_ARMSYS) += armsys_44b0x.o

include $(TOPDIR)/Rules.make

這樣在運行對內核的Make時(shí),就會(huì )編譯我們待會(huì )要加入的armsys_44b0x.c文件了。

3.3加入armsys_44b0x.c文件

    在Linux-2.4.x/drivers/mtd/nand/目錄下加入armsys_44b0x.c文件。該文件可以在這里下載。armsys_44b0x.c文件是基于同一目錄中的其它文件修改的。例如spia.c文件。armsys_44b0x.c只需要根據ARMSYS的硬件電路(參考第1.1節)在上面做一些修改就可以了。
主要做了修改的幾處如下:

第一處,
#define ARMSYS_IO_BASE 0x01d20000 /*GPIO相關(guān)寄存器的起始地址*/
#define ARMSYS_FIO_BASE 0x2000000 /*Nandflash映射的起始地址*/
#define ARMSYS_PEDR 0x0014
/* 控制CLE,ALE和NCE腳的port C的數據寄存器相對于GPIO寄存器起始地址的偏移量*/
#define ARMSYS_PEDDR 0x0010
/*控制CLE,ALE和NCE腳的port C的控制寄存器相對于GPIO寄存器起始地址的偏移量*/

第二處,
#ifdef CONFIG_MTD_PARTITIONS
/*
* 定義flash設備的分區
*/
const static struct mtd_partition partition_info[] = {
{ name: "ARMSYS flash partition 1",
offset: 2*1024*1024,
size: 6*1024*1024 },
{ name: "ARMSYS flash partition 2",
offset: 8*1024*1024,
size: 6*1024*1024 }

};
#define NUM_PARTITIONS 2
#endif

第三處,
/*
* 特定硬件的控制線(xiàn)操作
*/
void armsys_hwcontrol(int cmd){

switch(cmd){

case NAND_CTL_SETCLE: (*(volatile unsigned *) (armsys_io_base + armsys_pedr)) |= 0x04; break;
case NAND_CTL_CLRCLE: (*(volatile unsigned *) (armsys_io_base + armsys_pedr)) &= ~0x04; break;

case NAND_CTL_SETALE: (*(volatile unsigned *) (armsys_io_base + armsys_pedr)) |= 0x08; break;
case NAND_CTL_CLRALE: (*(volatile unsigned *) (armsys_io_base + armsys_pedr)) &= ~0x08; break;

case NAND_CTL_SETNCE: (*(volatile unsigned *)(armsys_io_base + armsys_pedr)) &= ~0x02; break;
case NAND_CTL_CLRNCE: (*(volatile unsigned *) (armsys_io_base + armsys_pedr)) |= 0x02; break;
     }
}

第四處,
/*設置GPIO Port C 的控制寄存器從而使得Nandflash對應的控制引腳的輸入/輸出配置正確 */
(*(volatile unsigned *) (armsys_io_base + armsys_peddr)) = 0x0f00ff54;

4.添加mtdX和mtdblockX設備
修改/vendors/Samsung/44B0/Makefile文件。
在DEVICES = \
………
的最后加上:
(Tab)\
(Tab)mtd0,c,90,0(Tab)mtd1,c,90,2
(Tab)\
(Tab)mtdblock0,b,30,0(Tab)mtdblock1,b,30,1

這里(Tab)表示輸入Tab鍵

5.配置內核
下面就可以開(kāi)始配置內核和用戶(hù)選項了。
打開(kāi)終端。
# cd /home/uClinux-dist
# make menuconfig

進(jìn)入uClinux配置(uClinux v3.1.0 Configuration),選中“Kernel/Library/Defaults Selectionà”敲空格進(jìn)入。選中內核設置項和用戶(hù)選項:
[*] Customize Kernel Settings
[*] Customize Vendor/User Settings

建議通過(guò)直接載入我們提供的內核配置文件Config_Kernel(點(diǎn)擊這里下載)和用戶(hù)配置文件Config_User(點(diǎn)擊這里下載)來(lái)完成配置。將Config_Kernel拷貝到uClinux-dist/Linux-2.4.x目錄下,將Config_User拷貝到uClinux-dist/Config目錄下。

回到終端,按下ESC鍵兩次,敲回車(chē)退出。進(jìn)入內核配置(Linux Kernel v2.4.24-uc0 Configuration),選中“Load an Alternate Configuration File”,敲空格鍵進(jìn)入,輸入Config_Kernel文件名,按回車(chē)退出。內核選項就被設置好了。

按下ESC鍵,敲回車(chē)保存設置。自動(dòng)切換到用戶(hù)選項配置。同樣選中“Load an Alternate Configuration File”,敲空格鍵進(jìn)入,輸入Config_User文件名,按回車(chē)退出。用戶(hù)選項就被設置好了。

也可以手動(dòng)修改。手動(dòng)修改的步驟如下:
進(jìn)入內核配置(Linux Kernel v2.4.24-uc0 Configuration)。

5.1選擇支持可載入的模塊
選中“Loadable mudule supportà”,敲空格進(jìn)入。選中第1項:
[*] Enable loadable module support
按ESC退出。

5.2對MTD進(jìn)行配置
選中“Memory Technology Device (MTD)-->”,敲空格進(jìn)入。需要選中的項目如下:

<*> Memory Technology Device (MTD) support
[*] Debugging
(0) Debugging verbosity (0= quiet, 3=noisy)
<*> MTD partitioning support
………
--- User Modules And Translation Layers
<*> Direct char device access to MTD devices
<*> Caching block device access to MTD devices

選中“NAND Flash Device Drivers -à”,敲空格進(jìn)入。需要選中的項目如下:

<*> NAND Device Support
………
<*> NAND Flash device on ARMSYS board
這一條就是我們修改前面的Config.in文件的結果。
敲兩次ESC退出MTD配置。

5.3對文件系統進(jìn)行配置
選中“File system -->”,敲空格進(jìn)入。需要選中的項目如下:
<*> Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy )
敲兩次ESC,敲回車(chē),退出內核配置。

6.配置用戶(hù)選項

進(jìn)入用戶(hù)選項配置。

6.1對MTD工具進(jìn)行配置

選中“Flash Tools-->”,敲空格鍵進(jìn)入。需要選中的項目如下:
[*] mtd-utils
[*] erase
[*] eraseall
………
[*] mkfs.jffs2
敲ESC鍵退出。

6.2對BusyBox進(jìn)行配置

選中“BusyBox-->”,敲空格鍵進(jìn)入。需要選中的項目如下:
………
[*] mount
………
[*] umount
………
[*] vi
敲2次ESC鍵,并回車(chē)保存。
到此為之,所需的配置選項就全部設好了。下面就開(kāi)始編譯了。

7.編譯uClinux

按下面的步驟進(jìn)行編譯:

# make dep
# make lib_only
# make user_only
# make romfs
# make image
# make

編譯成功后,在uClinux-dist/目錄下產(chǎn)生images目錄,其中的3個(gè)文件:image.ram, image.rom和romfs.img就是我們可以使用的二進(jìn)制文件。

8.下載與啟動(dòng)

8.1下載

利用ARMSYS提供的Bootloader通過(guò)USB接口下載2個(gè)二進(jìn)制文件:

l image.ram(文件改名為imageram.bin)下載到地址0x0c008000;
l romfs.img(文件改名為romfs.img)下載到地址0x0c600000;

8.2啟動(dòng)

從0xc008000地址處開(kāi)始運行,可以從超級終端上觀(guān)察到如下所示的輸出信息:

Linux version 2.4.24-uc0 (root@localhost) (gcc version 2.95.3 20010315 (release)
(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)) #108 六 9月 25 20:11:04 CST 2004
Processor: Samsung S3C44B0X revision 0
Architecture: S3C44B0X
On node 0 totalpages: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0 init=/linuxrc
Calibrating delay loop... 31.84 BogoMIPS
Memory: 8MB = 8MB total
Memory: 6900KB available (970K code, 152K data, 36K init)
Dentry cache hash table entries: 1024 (order: 1, 8192 bytes)
Inode cache hash table entries: 512 (order: 0, 4096 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 2048 (order: 1, 8192 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Starting kswapd
JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB.
ttyS0 at I/O 0x1d00000 (irq = 3) is a S3C44B0
ttyS1 at I/O 0x1d04000 (irq = 2) is a S3C44B0
Blkmem copyright 1998,1999 D. Jeff Dionne
Blkmem copyright 1998 Kenneth Albanowski
Blkmem 1 disk images:
0: C600000-C65FFFF [VIRTUAL C600000-C65FFFF] (RO)
RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize
NAND device: Manufacture ID: 0xec, Chip ID: 0x73 (Samsung NAND 16MB 3,3V)
Creating 2 MTD partitions on "NAND 16MB 3,3V":
0x00200000-0x00800000 : "ARMSYS flash partition 1"
mtd: Giving out device 0 to ARMSYS flash partition 1
0x00800000-0x00e00000 : "ARMSYS flash partition 2"
mtd: Giving out device 1 to ARMSYS flash partition 2

VFS: Mounted root (romfs filesystem) readonly.
Freeing init memory: 36K
Shell invoked to run file: /etc/rc
Command: hostname Samsung
Command: /bin/expand /etc/ramfs.img /dev/ram0
Command: mount -t proc proc /proc
Command: mount -t ext2 /dev/ram0 /var
Command: mkdir /var/config
Command: mkdir /var/tmp
Command: mkdir /var/log
Command: mkdir /var/run
Command: mkdir /var/lock
Command: cat /etc/motd
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|

For further information check:
http://www.uclinux.org/

Command:
Execution Finished, Exiting

Sash command shell (version 1.1.1)
/>

其中的黑體部分說(shuō)明系統已經(jīng)識別到了K9F2808器件,并創(chuàng )建了2個(gè)MTD分區。還可以到proc目錄中看一下MTD分區表:
/> cd proc
/proc> cat mtd
dev: size erasesize name
mtd0: 00600000 00004000 "ARMSYS flash partition 1"
mtd1: 00600000 00004000 "ARMSYS flash partition 2"

/proc>

到dev目錄下查看一下mtd設備:
/proc> cd /dev
/dev> ls
console
cua0
cua1
kmem
mem
mtd0
mtd1
mtdblock0
mtdblock1

null
ptyp0
………
urandom
zero
/dev>
有了上面的結果就說(shuō)明MTD設備已經(jīng)配置好了。下面我們就要創(chuàng )建一個(gè)JFFS2映像文件,并將它拷貝到MTD分區中。

9.創(chuàng )建和拷貝JFFS2映像文件

在目標板上運行以下的命令行:
/dev> cd /var/tmp
/var/tmp> mkdir jffs2
/var/tmp> c
/var/tmp/jffs2> vi file1
Hello, this is JFFS2 on Nandflash.
/var/tmp/jffs2> cat file1
Hello, this is JFFS2 on Nandflash.
/var/tmp/jffs2> mkdir folder1
/var/tmp/jffs2> mkdir folder2
/var/tmp/jffs2> mkdir folder3
/var/tmp/jffs2> cd ..
/var/tmp> mkfs.jffs2 -d jffs2 -o jffs2.img
/var/tmp> ls
jffs2
jffs2.img
/var/tmp>eraseall /dev/mtd0
………
/var/tmp> cp jffs2.img /dev/mtd0
MTD_open
MTD_write
MTD_close
/var/tmp>
同樣可以使用/dev/mtd1,那么在下面的Mount中要使用mtdblock1。

10.Mount/umount JFFS2分區

10.1 Mount

在目標板上運行以下命令行:
/var/tmp> mount -t jffs2 /dev/mtdblock0 /mnt
/var/tmp>

這樣就mount上/mnt了。查看proc/mounts的內容:
/mnt> cd /proc
/proc> cat mounts
rootfs / rootfs rw 0 0
/dev/root / romfs ro 0 0
/proc /proc proc rw 0 0
/dev/ram0 /var ext2 rw 0 0
/dev/mtdblock0 /mnt jffs2 rw 0 0
/proc>

我們還可以看看現在mnt下面的內容:
/var/tmp> cd /mnt
/mnt> ls
file1
folder1
folder2
folder3
/mnt> cat file1
Hello, this is JFFS2 on Nandflash.
/mnt>
這樣我們就可以在/mnt下操作Nandflash中的文件內容。例如:
/mnt> rm file1
/mnt> vi file2
This is ARMSYS board.
/mnt> ls
file2
folder1
folder2
folder3
/mnt>

10.2 umount
在開(kāi)發(fā)板上運行以下命令行:
/> umount /mnt
/> cd mnt
/mnt> ls
/mnt>

11.JFFS2文件系統的使用
由于Nandflash是非易失性的存儲器,因此保存在其中的內容不會(huì )隨掉電而消失。因此,在第一次成功完成了第9和第10步驟之后,以后只要直接運行第10步的mount即可。我們可以試試看。關(guān)閉開(kāi)發(fā)板電源,再重新打開(kāi),同樣下載和啟動(dòng)uClinux。啟動(dòng)后直接輸入如下的命令行:
/> mount -t jffs2 /dev/mtdblock0 /mnt
/> cd /mnt
/mnt> ls
file2
folder1
folder2
folder3
/mnt>
我們看到Nandflash中的第1分區還是保存著(zhù)上次操作的內容。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
linux下Nand Flash的JFFS2文件系統的移植
YAFFS文件系統移植筆記
MTD的概念(轉貼)
uClinux平臺下的Flash存儲技術(shù)||uclinux|
Cramfs、JFFS2、YAFFS2的全面對比
mtd
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久