1. 程式人生 > >Linux2.6.39在S3C2440上的移植(二)新增yaffs2檔案系統

Linux2.6.39在S3C2440上的移植(二)新增yaffs2檔案系統

1、主機環境:VMare下ubuntu10.04 ,1G記憶體。

2、編譯編譯環境:arm-linux-gcc

3、開發板:Micro2440,2M nor flash,256M nand flash。

4、u-boot-version:u-boot-2010.06

5、linux -version:Linux-2.6.39

2.1、yaffs2檔案系統移植

a)獲取yaffs2 原始碼

針對嵌入式裝置,現在大部分開發板都可以支援yaffs2 檔案系統,特別是使用nand flash 作為儲存器的嵌入式裝置而建立的一種檔案系統,早先的yaffs 僅支援小頁(512byte/page)的nand flash,現在的開發板大都配備了更大容量的nand flash,它們一般是大頁模式的(2K/page),使用yaffs2 就可以支援大頁的nand flash,下面是yaffs2 的移植詳細步驟。
使用git工具獲取yaffs2原始碼

root@bootloader:/home/eilian/development# apt-get install git-core

root@bootloader:/home/eilian/development# git clone git://www.aleph1.co.uk/yaffs2
Initialized empty Git repository in /home/eilian/development/yaffs2/.git/
remote: Counting objects: 6632, done.
remote: Compressing objects: 100% (3921/3921), done.
remote: Total 6632 (delta 5268), reused 3394 (delta 2642)
Receiving objects: 100% (6632/6632), 3.35 MiB | 59 KiB/s, done.
Resolving deltas: 100% (5268/5268), done.

root@bootloader:/home/eilian/development#ls

Android  Bootloader  Linux  Tools  workspace  yaffs2

root@bootloader:/home/eilian/development#cdyaffs2

b)為核心打補丁

root@bootloader:/home/eilian/development/yaffs2#./patch-ker.sh c s ../Linux/linux-2.6.39

c)配置核心

root@bootloader:/home/eilian/development/Linux/linux-2.6.39# make menuconfig                          //在之前載入預設檔案的前提下

移動上下按鍵找到File Systems,如圖

 按回車進入該子選單,再找到“Miscellaneous filesystems”選單項,如圖

 按回車進入該子選單,找到“YAFFS2 file system support”,如圖

 按空格選中它,這樣我們就在核心中添加了yaffs2 檔案系統的支援,按“Exit”退出核心配置。最好選中“Yes”儲存

2.2、編譯測試

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#make clean

root@bootloader:/home/eilian/development/Linux/linux-2.6.39#make uImage

開啟超級終端下載核心執行

U-Boot 2010.06 (Dec 03 2011 - 12:10:06)

DRAM:  64 MiB
Flash: 2 MiB
NAND:  dev_id = 218
NAND 256MiB 3,3V 8-bit256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Device nand0 not found!
Hit any key to stop autoboot:  0
bootloader# printenv
bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 mem=64M
bootcmd=nboot 0x32000000 kernel; bootm 0x32000000
bootdelay=3
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
netmask=255.255.255.0
ethact=dm9000
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:1m@0(bootloader),128k(params),5m(kernel),-(root)
ipaddr=211.67.217.138
serverip=211.67.217.136
gatewayip=211.67.217.1
stdin=serial
stdout=serial
stderr=serial

Environment size: 428/131068 bytes
bootloader# tftp 32000000 uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
operating at unknown: 0 mode
Using dm9000 device
TFTP from server 211.67.217.136; our IP address is 211.67.217.138
Filename 'uImage'.
Load address: 0x32000000
Loading: T #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #####################################
done
Bytes transferred = 2182288 (214c90 hex)
bootloader# bootm 32000000
## Booting kernel from Legacy Image at 32000000 ...
   Image Name:   Linux-2.6.39
   Created:      2011-12-02  12:29:08 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2182224 Bytes = 2.1 MiB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.39 (root@bootloader) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #3 Fri Dec 2 20:27:45 CST 2011
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: eilian240 development board
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/mtdblock2 init=/linuxrc console=ttySAC0 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: 60384k/60384k available, 5152k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
    vmalloc : 0xc4800000 - 0xf6000000   ( 792 MB)
    lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0029000   ( 132 kB)
      .text : 0xc0029000 - 0xc040a654   (3974 kB)
      .data : 0xc040c000 - 0xc042fe00   ( 144 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:85
irq: clearing subpending status 00000003
irq: clearing subpending status 00000002
Console: colour dummy device 80x30
console [ttySAC0] enabled
Calibrating delay loop... 201.52 BogoMIPS (lpj=503808)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
gpiochip_add: gpios 288..303 (GPIOK) failed to register
gpiochip_add: gpios 320..334 (GPIOL) failed to register
gpiochip_add: gpios 352..353 (GPIOM) failed to register
NET: Registered protocol family 16
S3C2440: Initialising architecture
S3C2440: IRQ Support
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.24.
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.
msgmni has been set to 117
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: ttySAC0 at MMIO 0x50000000 (irq = 70) is a S3C2440
s3c2440-uart.1: ttySAC1 at MMIO 0x50004000 (irq = 73) is a S3C2440
s3c2440-uart.2: ttySAC2 at MMIO 0x50008000 (irq = 76) is a S3C2440
brd: module loaded
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns
s3c24xx-nand s3c2440-nand: NAND soft ECC
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Creating 5 MTD partitions on "nand":
0x000000000000-0x000000100000 : "bootloader"
0x000000100000-0x000000120000 : "params"
0x000000120000-0x000000620000 : "kernel"
0x000000620000-0x000040620000 : "root"
mtd: partition "root" extends beyond the end of device "nand" -- size truncated to 0xf9e0000

0x000000000000-0x000010000000 : "nand"
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
mousedev: PS/2 mouse device common for all mice
S3C24XX RTC, (c) 2004,2006 Simtec Electronics
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
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
ALSA device list:
  No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
Registering the dns_resolver key type
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
yaffs: dev is 32505858 name is "mtdblock2" rw
yaffs: passed flags ""
VFS: Mounted root (yaffs filesystem) on device 31:2.

Freeing init memory: 132K
Failed to execute /linuxrc.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[<c002e198>] (unwind_backtrace+0x0/0xec) from [<c03073d8>] (panic+0x54/0x184)
[<c03073d8>] (panic+0x54/0x184) from [<c0029590>] (init_post+0xa0/0xc4)
[<c0029590>] (init_post+0xa0/0xc4) from [<c0008404>] (kernel_init+0x100/0x138)
[<c0008404>] (kernel_init+0x100/0x138) from [<c002a7d4>] (kernel_thread_exit+0x0/0x8)