您的位置:首页 > 编程语言 > PHP开发

u-boot烧写yaffs2文件系统

2011-09-28 22:39 585 查看
u-boot烧写yaffs2文件系统

以前移植的U-boot一直都支持Yaffs2文件系统的烧写,但是我一直都没有时间测试,其中的Bug也是网友发现后修正的。虽然现在又有新的UBI文件系统,但是UBI是在Linux2.6.28以后才被支持的,所以yaffs2还是需要的。前几天因为项目需要,我又试了一次Yaffs2的烧写引导,在这里记录下来,以备后用。

一、下载Yaffs2映像制作工具。

mkyaffs2image就在yaffs2的源码包里:Yaffs源码下载

下载源码解压之后,在utils文件夹下的两个C文件就是yaffs和yaffs2文件映像制作工具,这里只将yaffs2了。512B/page的nand已经比较少了。

二、打上补丁

为了正确制作Yaffs2文件系统映像,必须打上一下补丁:


文件:yaffs2_tekkaman_utils.patch.tar.bz2
大小:6KB
下载:下载
将补丁拷贝到Yaffs2源码目录下,并执行:

patch -p1 < ./yaffs2_tekkaman_utils.patch

补丁参考:http://www.100ask.net/showtopic-2011.aspx

这个补丁增加了oob的两字节偏移和oob中ECC的产生。否则新的内核和yaffs2文件系统挂载会出错。

由于大小端的转换还有问题,所以被我去掉了。

三、编译

直接在utils目录下“make”就可以了。

四、制作yaffs2映像文件

制作命令很简单:

mkyaffs2image [dir] [image_file_name]

[dir]:是你要制做的文件系统
内容所在的目录

[image_file_name] : 是生成的映像名


五、用U-boot烧入nand flash。

添加yaffs2烧写功能的补丁是没有硬件依赖的,不单单在2440上可以用,应该可以说是在被Uboot支持的、可以操作Nand Flash中的oob的CPU上应该都可以用。我在别的CPU上已做了实验,没有问题。

yaffs2烧写功能的补丁:


文件:u-boot_yaffs2img.patch.tar.bz2
大小:2KB
下载:下载
要烧写的位置和内核分区有关。先擦除后烧写。

[u-boot@MINI2440]# tftp rootfs.yaffs2

dm9000 i/o: 0x20000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 08:08:11:18:12:27

operating at 100M full duplex mode

Using dm9000 device

TFTP from server 192.168.1.100; our IP address is 192.168.1.101

Filename 'rootfs.yaffs2'.

Load address: 0x30008000

Loading: T #################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

######

done

Bytes transferred = 14397504 (dbb040 hex)

[u-boot@MINI2440]# nand erase 0x580000  7a80000

(我是128MB的Nand)


[u-boot@MINI2440]# nand write.yaffs 30008000 0x580000 dbb040

NAND write: device 0 offset 0x580000, size 0xdbb040

Skip the first good block 58000000000000

Writing at 0x12e000000020000 -- 100% is complete. 13961216 bytes written: OK

六、更新内核启动参数,并启动测试。

[u-boot@MINI2440]# setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

[u-boot@MINI2440]# saveenv

Saving Environment to NAND...

Erasing Nand...

Erasing at 0x6000000000002 -- 0% complete.

Writing to Nand... done

[u-boot@MINI2440]# tftp 30008000 192.168.1.100:zImage.img;bootm

dm9000 i/o: 0x20000300, id: 0x90000a46

DM9000: running in 16 bit mode

MAC: 08:08:11:18:12:27

operating at 100M full duplex mode

Using dm9000 device

TFTP from server 192.168.1.100; our IP address is 192.168.1.101

Filename 'zImage.img'.

Load address: 0x30008000

Loading: T #################################################################

#################################################################

################

done

Bytes transferred = 2140320 (20a8a0 hex)

## Booting kernel from Legacy Image at 30008000 ...

Image Name:   tekkaman

Created:      2010-04-25   9:12:36 UTC

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    2140256 Bytes =  2 MB

Load Address: 30008000

Entry Point:  30008040

Verifying Checksum ... OK

XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #18 Sun Apr 25 17:11:42 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: MINI2440

Memory policy: ECC disabled, Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, Copyright 2004 Simtec Electronics

S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256

Kernel command line: noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

PID hash table entries: 256 (order: -2, 1024 bytes)

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60444KB available (3764K code, 412K data, 140K init, 0K highmem)

SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

Hierarchical RCU implementation.

NR_IRQS:85

irq: clearing pending status 02000000

irq: clearing subpending status 00000003

irq: clearing subpending status 00000002

Console: colour dummy device 80x30

console [ttySAC0] enabled

Calibrating delay loop... 201.93 BogoMIPS (lpj=504832)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

MINI2440: Option string mini2440=0t

MINI2440: 't' ignored, touchscreen not compiled in

MINI2440: LCD [0:240x320] 1:800x480 2:1024x768

S3C2440: Initialising architecture

S3C2440: IRQ Support

S3C24XX DMA Driver, Copyright 2003-2006 Simtec Electronics

DMA channel 0 at c4808000, irq 33

DMA channel 1 at c4808040, irq 34

DMA channel 2 at c4808080, irq 35

DMA channel 3 at c48080c0, irq 36

S3C244X: Clock Support, DVS off

bio: create slab <bio-0> at 0

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

s3c-i2c s3c2440-i2c: slave address 0x10

s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz

s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter

Advanced Linux Sound Architecture Driver Version 1.0.21.

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

TCP: Hash tables configured (established 2048 bind 2048)

TCP reno registered

UDP hash table entries: 256 (order: 0, 4096 bytes)

UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

RPC: Registered tcp NFSv4.1 backchannel transport module.

JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat, Inc.

yaffs Apr 25 2010 17:05:23 Installing.

msgmni has been set to 118

alg: No test for stdrng (krng)

io scheduler noop registered

io scheduler deadline registered

io scheduler cfq registered (default)

Console: switching to colour frame buffer device 60x53

fb0: s3c2410fb frame buffer device

s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

brd: module loaded

at24 0-0050: 1024 byte 24c08 EEPROM (writable)

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c24xx-nand s3c2440-nand: Tacls=1, 9ns Twrph0=3 29ns, Twrph1=2 19ns

s3c24xx-nand s3c2440-nand: NAND soft ECC

NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)

Creating 4 MTD partitions on "NAND 128MiB 3,3V 8-bit":

0x000000000000-0x000000060000 : "u-boot"

ftl_cs: FTL header not found.

0x000000060000-0x000000080000 : "u-boot-env"

ftl_cs: FTL header not found.

0x000000080000-0x000000580000 : "kernel"

ftl_cs: FTL header not found.

0x000000580000-0x000008000000 : "root"

ftl_cs: FTL header not found.

dm9000 Ethernet Driver, V1.31

eth0: dm9000e at c486e300,c4872304 IRQ 51 MAC: 08:08:11:18:12:27 (chip)

ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

s3c2410-ohci s3c2410-ohci: S3C24XX OHCI

s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 ports detected

usbcore: registered new interface driver libusual

s3c2440-usbgadget s3c2440-usbgadget: S3C2440: increasing FIFO to 128 bytes

mice: PS/2 mouse device common for all mice

input: gpio-keys as /devices/platform/gpio-keys/input/input0

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling

s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0

i2c /dev entries driver

S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled

cpuidle: using governor ladder

sdhci: Secure Digital Host Controller Interface driver

sdhci: Copyright(c) Pierre Ossman

s3c-sdi s3c2440-sdi: powered down.

s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQ

Registered led device: led1

Registered led device: led2

Registered led device: led3

Registered led device: led4

usbcore: registered new interface driver hiddev

usbcore: registered new interface driver usbhid

usbhid: USB HID core driver

No device for DAI UDA134X

No device for DAI s3c24xx-i2s

S3C24XX_UDA134X SoC Audio driver

UDA134X SoC Audio Codec

asoc: UDA134X <-> s3c24xx-i2s mapping ok

ALSA device list:

#0: S3C24XX_UDA134X (UDA134X)

TCP cubic registered

NET: Registered protocol family 17

s3c2410-rtc s3c2410-rtc: setting system clock to 2010-04-28 22:58:01 UTC (1272495481)

yaffs: dev is 32505859 name is "mtdblock3"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.3, "mtdblock3"

block 346 is bad

block 347 is bad

block 348 is bad

block 972 is bad

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 4 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

Partially written block 107 detected

yaffs_read_super: isCheckpointed 0

VFS: Mounted root (yaffs2 filesystem) on device 31:3.

Freeing init memory: 140K

----------mount all

----------Starting mdev......

********************************************

Tekkaman Ninja mini2440 Rootfs(nfs) 2010.3

Love Linux ! ! @@ Love Ke Ke ! !

********************************************

(none) login:

产生“
Partially written block 107 detected”的原因是你在写入nand flash后,没有等系统同步完,或者没有卸载系统就强行关机、重启,或系统宕机了。

只要正常关机以后再启动就不会有这个提示了。


[root@~]#reboot

save exit: isCheckpointed 1

[root@~]#umount: mdev busy - remounted read-only

The system is going down

Sent SIGTERM to all processes

Sent SIGKILL to all processes

s3c-sdi s3c2440-sdi: powered down.

Restarting system

U-Boot 2010.03 ( 4月 18 2010 - 21:39:25)

modified by tekkamanninja (tekkamanninja@163.com)

Love Linux

I2C: ready

DRAM: 64 MB

Flash: 2 MB

NAND: 128 MiB

Video: 240x320x16 20kHz 62Hz

In: serial

Out: serial

Err: serial

USB slave is

Net: dm9000

U-Boot 2010.03 ( 4月 18 2010 - 21:39:25)

modified by tekkamanninja

(tekkamanninja@163.com)

Love Linux

Hit any key to stop autoboot: 0

[u-boot@MINI2440]# boot

NAND read: device 0 offset 0x80000, size 0x500000

5242880 bytes read: OK

## Booting kernel from Legacy Image at 30008000 ...

Image Name: tekkaman

Created: 2010-04-25 9:12:36 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2140256 Bytes = 2 MB

Load Address: 30008000

Entry Point: 30008040

Verifying Checksum ... OK

XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #18 Sun Apr 25 17:11:42 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: MINI2440

Memory policy: ECC disabled, Data cache writeback

CPU S3C2440A (id 0x32440001)

S3C24XX Clocks, Copyright 2004 Simtec Electronics

S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256

Kernel command line: noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

PID hash table entries: 256 (order: -2, 1024 bytes)

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 60444KB available (3764K code, 412K data, 140K init, 0K highmem)

SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

Hierarchical RCU implementation.

NR_IRQS:85

irq: clearing pending status 02000000

irq: clearing subpending status 00000003

irq: clearing subpending status 00000002

Console: colour dummy device 80x30

console [ttySAC0] enabled

Calibrating delay loop... 201.93 BogoMIPS (lpj=504832)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

MINI2440: Option string mini2440=0t

MINI2440: 't' ignored, touchscreen not compiled in

MINI2440: LCD [0:240x320] 1:800x480 2:1024x768

S3C2440: Initialising architecture

S3C2440: IRQ Support

S3C24XX DMA Driver, Copyright 2003-2006 Simtec Electronics

DMA channel 0 at c4808000, irq 33

DMA channel 1 at c4808040, irq 34

DMA channel 2 at c4808080, irq 35

DMA channel 3 at c48080c0, irq 36

S3C244X: Clock Support, DVS off

bio: create slab <bio-0> at 0

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

s3c-i2c s3c2440-i2c: slave address 0x10

s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz

s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter

Advanced Linux Sound Architecture Driver Version 1.0.21.

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

TCP: Hash tables configured (established 2048 bind 2048)

TCP reno registered

UDP hash table entries: 256 (order: 0, 4096 bytes)

UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)

NET: Registered protocol family 1

RPC: Registered udp transport module.

RPC: Registered tcp transport module.

RPC: Registered tcp NFSv4.1 backchannel transport module.

JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.

ROMFS MTD (C) 2007 Red Hat, Inc.

yaffs Apr 25 2010 17:05:23 Installing.

msgmni has been set to 118

alg: No test for stdrng (krng)

io scheduler noop registered

io scheduler deadline registered

io scheduler cfq registered (default)

Console: switching to colour frame buffer device 60x53

fb0: s3c2410fb frame buffer device

s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

brd: module loaded

at24 0-0050: 1024 byte 24c08 EEPROM (writable)

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c24xx-nand s3c2440-nand: Tacls=1, 9ns Twrph0=3 29ns, Twrph1=2 19ns

s3c24xx-nand s3c2440-nand: NAND soft ECC

NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)

Creating 4 MTD partitions on "NAND 128MiB 3,3V 8-bit":

0x000000000000-0x000000060000 : "u-boot"

ftl_cs: FTL header not found.

0x000000060000-0x000000080000 : "u-boot-env"

ftl_cs: FTL header not found.

0x000000080000-0x000000580000 : "kernel"

ftl_cs: FTL header not found.

0x000000580000-0x000008000000 : "root"

ftl_cs: FTL header not found.

dm9000 Ethernet Driver, V1.31

eth0: dm9000e at c486e300,c4872304 IRQ 51 MAC: 08:08:11:18:12:27 (chip)

ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

s3c2410-ohci s3c2410-ohci: S3C24XX OHCI

s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 ports detected

usbcore: registered new interface driver libusual

s3c2440-usbgadget s3c2440-usbgadget: S3C2440: increasing FIFO to 128 bytes

mice: PS/2 mouse device common for all mice

input: gpio-keys as /devices/platform/gpio-keys/input/input0

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling

s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0

i2c /dev entries driver

S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled

cpuidle: using governor ladder

sdhci: Secure Digital Host Controller Interface driver

sdhci: Copyright(c) Pierre Ossman

s3c-sdi s3c2440-sdi: powered down.

s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQ

Registered led device: led1

Registered led device: led2

Registered led device: led3

Registered led device: led4

usbcore: registered new interface driver hiddev

usbcore: registered new interface driver usbhid

usbhid: USB HID core driver

No device for DAI UDA134X

No device for DAI s3c24xx-i2s

S3C24XX_UDA134X SoC Audio driver

UDA134X SoC Audio Codec

asoc: UDA134X <-> s3c24xx-i2s mapping ok

ALSA device list:

#0: S3C24XX_UDA134X (UDA134X)

TCP cubic registered

NET: Registered protocol family 17

s3c2410-rtc s3c2410-rtc: setting system clock to 2010-04-28 23:02:23 UTC (1272495743)

yaffs: dev is 32505859 name is "mtdblock3"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.3, "mtdblock3"

yaffs: restored from checkpoint

yaffs_read_super: isCheckpointed 1

VFS: Mounted root (yaffs2 filesystem) on device 31:3.

Freeing init memory: 140K

----------mount all

----------Starting mdev......

********************************************

Tekkaman Ninja mini2440 Rootfs(nfs) 2010.3

Love Linux ! ! @@ Love Ke Ke ! !

********************************************

(none) login:

转载:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&cuid=2220344
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 文件系统 休闲