Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос про nandflash и UBIFS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
ZAA
Всем добрый день. Использую отладочную плату AT91SAM9261ek. Ядро linux-2.6.28 с патчем от linux4sam. Файловая система Angstrom, собранная с помощью openembedded. Есть 2 вопроса:
1) При загрузке из Dataflash (Bootstrap - в dataflash по 0х00 адресу, u-boot по 0х8400 адресу в dataflash, ядро по 0х42000 адресу в dataflash, jffs2-образ файловой системы по 0х400000 адресу в nandflash) все происходит нормально. Собственно этим способом я всегда и пользовалась. Возникла необходимость использовать загрузку с nandflash (Bootstrap - в dataflash по 0х00 адресу, u-boot по 0х20000 адресу в nandflash, ядро по 0х200000 адресу в nandflash, jffs2-образ файловой системы по 0х400000 адресу в nandflash). После прошивки первый запуск системы происходит без проблем (грузятся и u-boot, и ядро, монтируется файловая система, происходят операции чтения-записи...). После перезагрузки - как будто вся nandflash стерта((( В консоли только строка от Bootstrap'a, который прошит в dataflash ("Starting AT91 Bootstrap...") и тишина...Перед заливкой в nandflash в самбе выбираю пункты Enable nandflash и Erase All...В чем может быть проблема???

2)Для ускорения загрузки решили попробовать ubifs вместо jffs2. Посмотрев обсуждения на форумах (и на electronix'е - http://electronix.ru/forum/index.php?showtopic=68478&hl=, и на www.at91.com), попробовала сделать аналогичное - файловую систему от Angstrom Openembedded с помощью mkfs.ubifs и ubinize превратила в образ rootfs.ubi и прошила так же по 0x400000 адресу в nandflash. Результаты получились такими же, какие описаны в упомянутых ветках форума. Ошибки те же, хотя там вроде как проблема решена...
Лог загрузки:
Код
RomBOOT                                                                        
>Start AT91Bootstrap...                                                        
Uncompressing Linux.............................................................
Linux version 2.6.28 (nastya@nastya-desktop) (gcc version 4.2.4) #25 Thu Feb 250
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177                  
CPU: VIVT data cache, VIVT instruction cache                                    
Machine: Atmel AT91SAM9261-EK                                                  
Warning: bad configuration page, trying to continue                            
Memory policy: ECC disabled, Data cache writeback                              
On node 0 totalpages: 16384                                                    
free_area_init_node: node 0, pgdat c02f9f8c, node_mem_map c0313000              
  Normal zone: 128 pages used for memmap                                        
  Normal zone: 0 pages reserved                                                
  Normal zone: 16256 pages, LIFO batch:3                                        
  Movable zone: 0 pages used for memmap                                        
Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz                            
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256      
Kernel command line: mem=64M console=ttyS0,115200 ubi.mtd=1 root=ubi0:rootfs row
AT91: 96 gpio irqs in 3 banks                                                  
PID hash table entries: 256 (order: 8, 1024 bytes)                              
Console: colour dummy device 80x30                                              
console [ttyS0] enabled                                                        
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: 61748KB available (2796K code, 220K data, 92K init)                    
Calibrating delay loop... 99.12 BogoMIPS (lpj=495616)                          
Mount-cache hash table entries: 512                                            
CPU: Testing write buffer coherency: ok                                        
net_namespace: 288 bytes                                                        
NET: Registered protocol family 16                                              
AT91: Power Management                                                          
AT91: Starting after power-restored wakeup                                      
SCSI subsystem initialized                                                      
usbcore: registered new interface driver usbfs                                  
usbcore: registered new interface driver hub                                    
usbcore: registered new device driver usb                                      
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                                                            
NET: Registered protocol family 1                                              
NetWinder Floating Point Emulator V0.97 (double precision)                      
JFFS2 version 2.2. (NAND) пїЅВ© 2001-2006 Red Hat, Inc.                            
msgmni has been set to 120                                                      
alg: No test for stdrng (krng)                                                  
io scheduler noop registered                                                    
io scheduler anticipatory registered (default)                                  
atmel_lcdfb atmel_lcdfb.0: 525KiB frame buffer at 23a00000 (mapped at ffc00000)
Console: switching to colour frame buffer device 80x26                          
atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0x00600000 (mapped at c48ae000), 1
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL            
dm9000 Ethernet Driver, V1.31                                                  
dm9000 dm9000.0: eth%d: Invalid ethernet MAC address. Please set using ifconfig
eth0: dm9000e at c48b2000,c48b6044 IRQ 107 MAC: 00:00:00:00:00:00 (chip)        
Driver 'sd' needs updating - please use bus_type methods                        
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bi)
AT91 NAND: 8-bit, Software ECC                                                  
Scanning device for bad blocks                                                  
Creating 2 MTD partitions on "atmel_nand":                                      
0x00000000-0x00040000 : "Partition 1"                                          
0x00040000-0x10000000 : "Partition 2"                                          
UBI: attaching mtd1 to ubi0                                                    
UBI DBG (pid 1): io_init: min_io_size      2048                                
UBI DBG (pid 1): io_init: hdrs_min_io_size 512                                  
UBI DBG (pid 1): io_init: ec_hdr_alsize    512                                  
UBI DBG (pid 1): io_init: vid_hdr_alsize   512                                  
UBI DBG (pid 1): io_init: vid_hdr_offset   512                                  
UBI DBG (pid 1): io_init: vid_hdr_aloffset 512                                  
UBI DBG (pid 1): io_init: vid_hdr_shift    0                                    
UBI DBG (pid 1): io_init: leb_start        2048                                
UBI: physical eraseblock size:   131072 bytes (128 KiB)                        
UBI: logical eraseblock size:    129024 bytes                                  
UBI: smallest flash I/O unit:    2048                                          
UBI: sub-page size:              512                                            
UBI: VID header offset:          512 (aligned 512)                              
UBI: data offset:                2048                                          
UBI DBG (pid 1): ubi_scan: process PEB 0                                        
UBI DBG (pid 1): ubi_scan: process PEB 1                                        
UBI DBG (pid 1): ubi_scan: process PEB 2                                        
UBI DBG (pid 1): ubi_scan: process PEB 3                                        
UBI DBG (pid 1): ubi_scan: process PEB 4                                        
UBI DBG (pid 1): ubi_scan: process PEB 5                                        
UBI DBG (pid 1): ubi_scan: process PEB 6                                        
UBI DBG (pid 1): ubi_scan: process PEB 7                                        
UBI DBG (pid 1): ubi_scan: process PEB 8                                        
UBI DBG (pid 1): ubi_scan: process PEB 9                                        
UBI DBG (pid 1): ubi_scan: process PEB 10                                      
UBI DBG (pid 1): ubi_scan: process PEB 11                                      
UBI DBG (pid 1): ubi_scan: process PEB 12                                      
UBI DBG (pid 1): ubi_scan: process PEB 13                                      
UBI DBG (pid 1): ubi_scan: process PEB 14                                      
UBI DBG (pid 1): ubi_scan: process PEB 15                                      
UBI DBG (pid 1): ubi_scan: process PEB 16                                      
UBI DBG (pid 1): ubi_scan: process PEB 17                                      
UBI DBG (pid 1): ubi_scan: process PEB 18                                      
UBI DBG (pid 1): ubi_scan: process PEB 19                                      
UBI DBG (pid 1): ubi_scan: process PEB 20                                      
UBI DBG (pid 1): ubi_scan: process PEB 21                                      
UBI DBG (pid 1): ubi_scan: process PEB 22                                      
UBI DBG (pid 1): ubi_scan: process PEB 23                                      
UBI DBG (pid 1): ubi_scan: process PEB 24                                      
UBI DBG (pid 1): ubi_scan: process PEB 25                                      
UBI DBG (pid 1): ubi_scan: process PEB 26                                      
UBI DBG (pid 1): ubi_scan: process PEB 27                                      
UBI DBG (pid 1): ubi_scan: process PEB 28                                      
UBI DBG (pid 1): ubi_scan: process PEB 29                                      
UBI DBG (pid 1): ubi_scan: process PEB 30                                      
UBI error: validate_ec_hdr: bad VID header offset 2048, expected 512            
UBI error: validate_ec_hdr: bad EC header                                      
Erase counter header dump:                                                      
        magic          0x55424923                                              
        version        1                                                        
        ec             0                                                        
        vid_hdr_offset 2048                                                    
        data_offset    4096                                                    
        hdr_crc        0x7fb7d50c                                              
erase counter header hexdump:                                                  
00000000: 55 42 49 23 01 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 .
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .
[<c002400c>] (dump_stack+0x0/0x14) from [<c0198e0c>] (ubi_io_read_ec_hdr+0x2f8/)
[<c0198b14>] (ubi_io_read_ec_hdr+0x0/0x368) from [<c019bee8>] (ubi_scan+0x164/0)
[<c019bd84>] (ubi_scan+0x0/0x71c) from [<c0193360>] (ubi_attach_mtd_dev+0x580/0)
[<c0192de0>] (ubi_attach_mtd_dev+0x0/0xc74) from [<c00163cc>] (ubi_init+0x154/0)
[<c0016278>] (ubi_init+0x0/0x280) from [<c001f320>] (__exception_text_end+0x60/)
[<c001f2c0>] (__exception_text_end+0x0/0x190) from [<c000872c>] (kernel_init+0x)
r8:00000000 r7:00000000 r6:00000000 r5:c001ab84 r4:c001ab10                    
[<c00086bc>] (kernel_init+0x0/0xd8) from [<c003820c>] (do_exit+0x0/0x6cc)      
r5:00000000 r4:00000000                                                        
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 30                    
UBI error: ubi_attach_mtd_dev: failed to attach by scanning, error -22          
UBI error: ubi_init: cannot attach mtd1                                        
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22                
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)              
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP)        
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver                          
at91_ohci at91_ohci: AT91 OHCI                                                  
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1              
at91_ohci at91_ohci: irq 20, io mem 0x00500000                                  
usb usb1: configuration #1 chosen from 1 choice                                
hub 1-0:1.0: USB hub found                                                      
hub 1-0:1.0: 2 ports detected                                                  
Initializing USB Mass Storage driver...                                        
usbcore: registered new interface driver usb-storage                            
USB Mass Storage support registered.                                            
usbcore: registered new interface driver usbserial                              
usbserial: USB Serial Driver core                                              
udc: at91_udc version 3 May 2006                                                
mice: PS/2 mouse device common for all mice                                    
input: gpio-keys as /class/input/input0                                        
ads7846 spi0.2: touchscreen, irq 29                                            
input: ADS784x Touchscreen as /class/input/input1                              
usbcore: registered new interface driver hiddev                                
usbcore: registered new interface driver usbhid                                
usbhid: v2.6:USB HID core driver                                                
TCP cubic registered                                                            
NET: Registered protocol family 17                                              
UBIFS DBG (pid 1): ubifs_get_sb: name ubi0:rootfs, flags 0x8000                
UBI DBG (pid 1): ubi_open_volume_nm: open volume rootfs, mode 1                
UBIFS error (pid 1): ubifs_get_sb: cannot open "ubi0:rootfs", error -19        
VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,255)              
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0 (driver?)                                        
1f01          261888 mtdblock1 (driver?)                                        
1f02            8448 mtdblock2 (driver?)                                        
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)

mkfs.ubifs и ubinizе собраны из исходников git clone git://git.infradead.org/mtd-utils.git
В ядре включена поддержка UBI и файловой системы UBIFS.
Пожалуйста, подскажите, если кто решал уже эти проблемы) Спасибо.
Dron_Gus
Цитата(ZAA @ Feb 26 2010, 07:09) *
Creating 2 MTD partitions on "atmel_nand":
0x00000000-0x00040000 : "Partition 1"
0x00040000-0x10000000 : "Partition 2"

Это, ИМХО, не соответствует тому, как Вы прошиваете у-бут, ядро и ФС из u-boot'а (или ем Вы прошиваете). http://free-electrons.com/doc/flash-filesystems.odp
ZAA
Цитата(Dron_Gus @ Feb 26 2010, 11:51) *
Это, ИМХО, не соответствует тому, как Вы прошиваете у-бут, ядро и ФС из u-boot'а (или ем Вы прошиваете). http://free-electrons.com/doc/flash-filesystems.odp

Забыла сказать - бутстрап настроен так, что он прыгает сразу же на адрес, по которому прошито ядро в nandflash (на 0х200000). Распаковка и загрузка ядра происходит без у-бута (он даже не прошит по адресу 0х20000)
Dron_Gus
Передайте ему нормальный параметр root= . В теме на которвую Вы же ссылаетесь, это обуждалось root=/dev/mtdblock1 . И что "root=ubi0:rootfs row" значит row? rw или ro?
ZAA
Цитата(Dron_Gus @ Feb 26 2010, 14:02) *
Передайте ему нормальный параметр root= . В теме на которвую Вы же ссылаетесь, это обуждалось root=/dev/mtdblock1 . И что "root=ubi0:rootfs row" значит row? rw или ro?

Почему??? В той теме параметр bootargs равен
Код
console=ttyS0,115200 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw

где rw - я так понимаю, параметр, указывающий на то, что монтировать файловую систему на чтение/запись...Или Вы другое имеете в виду???
Dron_Gus
В той теме все завелось после пропатчивания.
Вам даже ядро предлагает варианты:
Код
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0 (driver?)                                        
1f01          261888 mtdblock1 (driver?)                                        
1f02            8448 mtdblock2 (driver?)

Стоит попробовать.

Из первого Вашего сообщения я вижу, то выпередаете
Код
Kernel command line: mem=64M console=ttyS0,115200 ubi.mtd=1 root=ubi0:rootfs row

Про последний row я и спрашивал.
ZAA
Цитата(Dron_Gus @ Feb 26 2010, 14:45) *
В той теме все завелось после пропатчивания.
Вам даже ядро предлагает варианты:
Код
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0 (driver?)                                        
1f01          261888 mtdblock1 (driver?)                                        
1f02            8448 mtdblock2 (driver?)

Стоит попробовать.

эх, не могу сообразить, чем пропатчить-то...патч с linux4sam я уже применила...
Dron_Gus
Вот уж не знаю, про что VDV писал в том топике. А с mtdblock1 не заработало?
ZAA
Цитата(Dron_Gus @ Feb 26 2010, 16:03) *
Вот уж не знаю, про что VDV писал в том топике. А с mtdblock1 не заработало?

C mtdblock1 ядро начинает сканировать flash - и появляются сообщения типа emty scan block jffs2... - в таком роде...
Dron_Gus
А Вы пытаетесь решить проблемму из пункта 1 или 2?

Если два, то параметр rootfstype=ubifs Вы передаете?
one_man_show
Цитата
...параметр rootfstype=ubifs Вы передаете?

Судя по логу загрузки параметр типа не передавался и, возможно, опечатка вместо rw указано row
IgorKossak
Тему перенёс из ARM в Linux.
ZAA
Цитата(Dron_Gus @ Feb 26 2010, 16:22) *
А Вы пытаетесь решить проблемму из пункта 1 или 2?

Если два, то параметр rootfstype=ubifs Вы передаете?

Я прошу прощения за неточности. Снова вернулась к загрузке из dataflash вместе с убутом (так проще менять параметры загрузки ядра). Ситуация следующая:
При передаче ядру следующих параметров:
Код
set bootargs 'mem=64M console=ttyS0,115200 ubi.mtd=1 root=/dev/mtdblock1 rootfstype=ubifs loglevel=8 rootflags=bulk_read,chk_data_crc rw'

Лог такой:
Код
Uncompressing Linux...........................................................................
....................... done, booting the kernel.
Linux version 2.6.28 (nastya@nastya-desktop) (gcc version 4.2.4) #26 Fri Feb 26 10:40:27 EET 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Atmel AT91SAM9261-EK
Ignoring unrecognised tag 0x54410008
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 16384
free_area_init_node: node 0, pgdat c02fbf8c, node_mem_map c0315000
  Normal zone: 128 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 16256 pages, LIFO batch:3
  Movable zone: 0 pages used for memmap
Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: mem=64M console=ttyS0,115200 ubi.mtd=1 root=/dev/mtdblock1 rootfstype=ubifs loglevel=8 rootflags=bulk_read,chk_data_crc rw
AT91: 96 gpio irqs in 3 banks
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
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: 61748KB available (2804K code, 220K data, 92K init)
Calibrating delay loop... 99.12 BogoMIPS (lpj=495616)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
AT91: Power Management
AT91: Starting after power-restored wakeup
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
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
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) В© 2001-2006 Red Hat, Inc.
msgmni has been set to 120
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered (default)
atmel_lcdfb atmel_lcdfb.0: 525KiB frame buffer at 23a00000 (mapped at ffc00000)
Console: switching to colour frame buffer device 80x26
atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0x00600000 (mapped at c48ae000), irq 21
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
dm9000 Ethernet Driver, V1.31
eth0: dm9000e at c48b2000,c48b6044 IRQ 107 MAC: 3a:1f:34:08:54:54 (chip)
Driver 'sd' needs updating - please use bus_type methods
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit)
AT91 NAND: 8-bit, Software ECC
Scanning device for bad blocks
Creating 2 MTD partitions on "atmel_nand":
0x00000000-0x00040000 : "Partition 1"
0x00040000-0x10000000 : "Partition 2"
UBI: attaching mtd1 to ubi0
UBI DBG (pid 1): io_init: min_io_size      2048
UBI DBG (pid 1): io_init: hdrs_min_io_size 512
UBI DBG (pid 1): io_init: ec_hdr_alsize    512
UBI DBG (pid 1): io_init: vid_hdr_alsize   512
UBI DBG (pid 1): io_init: vid_hdr_offset   512
UBI DBG (pid 1): io_init: vid_hdr_aloffset 512
UBI DBG (pid 1): io_init: vid_hdr_shift    0
UBI DBG (pid 1): io_init: leb_start        2048
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI DBG (pid 1): ubi_scan: process PEB 0
UBI DBG (pid 1): ubi_scan: process PEB 1
..................
UBI DBG (pid 1): ubi_scan: process PEB 2044
UBI DBG (pid 1): ubi_scan: process PEB 2045
UBI DBG (pid 1): ubi_scan: scanning is finished
UBI DBG (pid 1): process_lvol: check layout volume
UBI error: vtbl_check: too large reserved_pebs 8127, good PEBs 2046
UBI error: vtbl_check: volume table check failed: record 0, error 9
Volume table record 0 dump:
reserved_pebs   8127
alignment       1
data_pad        0
vol_type        1
upd_marker      0
name_len        6
name            rootfs
crc             0xaa2b7c3
UBI error: ubi_attach_mtd_dev: failed to attach by scanning, error -22
UBI error: ubi_init: cannot attach mtd1
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP)
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
udc: at91_udc version 3 May 2006
mice: PS/2 mouse device common for all mice
input: gpio-keys as /class/input/input0
ads7846 spi0.2: touchscreen, irq 29
input: ADS784x Touchscreen as /class/input/input1
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
TCP cubic registered
NET: Registered protocol family 17
UBIFS DBG (pid 1): ubifs_get_sb: name /dev/root, flags 0x8000
UBIFS error (pid 1): ubifs_get_sb: cannot open "/dev/root", error -22
List of all partitions:
1f00             256 mtdblock0 (driver?)
1f01          261888 mtdblock1 (driver?)
1f02            8448 mtdblock2 (driver?)
No filesystem could mount root, tried:  ubifs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,1)

При передаче следующих параметров:
Код
set bootargs 'console=ttyS0,115200 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw'

лог загрузки следующий:
Код
Starting kernel ...

Uncompressing Linux...........................................................................
....................... done, booting the kernel.
Linux version 2.6.28 (nastya@nastya-desktop) (gcc version 4.2.4) #26 Fri Feb 26 10:40:27 EET 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Atmel AT91SAM9261-EK
Ignoring unrecognised tag 0x54410008
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS0,115200 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw
AT91: 96 gpio irqs in 3 banks
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
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: 61748KB available (2804K code, 220K data, 92K init)
Calibrating delay loop... 99.12 BogoMIPS (lpj=495616)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
AT91: Power Management
AT91: Starting after power-restored wakeup
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
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
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) \0xc2\0xa9 2001-2006 Red Hat, Inc.
msgmni has been set to 120
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered (default)
atmel_lcdfb atmel_lcdfb.0: 525KiB frame buffer at 23a00000 (mapped at ffc00000)
Console: switching to colour frame buffer device 80x26
atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0x00600000 (mapped at c48ae000), irq 21
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
dm9000 Ethernet Driver, V1.31
eth0: dm9000e at c48b2000,c48b6044 IRQ 107 MAC: 3a:1f:34:08:54:54 (chip)
Driver 'sd' needs updating - please use bus_type methods
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron NAND 256MiB 3,3V 8-bit)
AT91 NAND: 8-bit, Software ECC
Scanning device for bad blocks
Creating 2 MTD partitions on "atmel_nand":
0x00000000-0x00040000 : "Partition 1"
0x00040000-0x10000000 : "Partition 2"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI error: vtbl_check: too large reserved_pebs 8127, good PEBs 2046
UBI error: vtbl_check: volume table check failed: record 0, error 9
UBI error: ubi_attach_mtd_dev: failed to attach by scanning, error -22
UBI error: ubi_init: cannot attach mtd1
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes) pagesize 1056 bytes (OTP)
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 1
at91_ohci at91_ohci: irq 20, io mem 0x00500000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
udc: at91_udc version 3 May 2006
mice: PS/2 mouse device common for all mice
input: gpio-keys as /class/input/input0
ads7846 spi0.2: touchscreen, irq 29
input: ADS784x Touchscreen as /class/input/input1
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
TCP cubic registered
NET: Registered protocol family 17
UBIFS error (pid 1): ubifs_get_sb: cannot open "ubi0:rootfs", error -19
VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0 (driver?)
1f01          261888 mtdblock1 (driver?)
1f02            8448 mtdblock2 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)


Все-таки, видимо, Вы были правы, Dron Gus, насчет того, что ядру надо передавать root=/dev/mtdblock1. Но ошибка все равно никуда не девается...
Скомпилировала также UBI-utils'ы под ARM (ubiattach, ubimkvol и т. д.), но их применение (в обычной своей ФС хотела подмонтировать UBI-образ) не увенчалось успехом(((
Dron_Gus
Цитата(ZAA @ Feb 26 2010, 19:37) *
Все-таки, видимо, Вы были правы, Dron Gus, насчет того, что ядру надо передавать root=/dev/mtdblock1. Но ошибка все равно никуда не девается...
Скомпилировала также UBI-utils'ы под ARM (ubiattach, ubimkvol и т. д.), но их применение (в обычной своей ФС хотела подмонтировать UBI-образ) не увенчалось успехом(((


Похоже,все же я не прав (root=ubi0:rootfs - правильно). Пока на практике нет возможности проверить. Но активно изучаю вопрос. Посмотрите здесь http://wiki.metrotek.spb.ru/wiki/Colibri_P...rchid_%2B_Linux может что полезное найдете.
ZAA
Цитата(Dron_Gus @ Feb 27 2010, 00:44) *
Похоже,все же я не прав (root=ubi0:rootfs - правильно). Пока на практике нет возможности проверить. Но активно изучаю вопрос. Посмотрите здесь http://wiki.metrotek.spb.ru/wiki/Colibri_P...rchid_%2B_Linux может что полезное найдете.

Эх, спасибо))) БУду смотреть)

Мне не очень понятно следующее - можно ли как-то, загрузившись в нормальную рабочую файловую систему (jffs2), создать новый раздел - например /dev/mtdblock2, потом
Код
ubiformat /dev/mtd2
ubiattach /dev/ubi_ctrl -m 2
ubimkvol /dev/ubi0 -N rootfs -s 'свой размер флешки'
mount -t ubifs ubi0:rootfs /mnt/ubifs

Или каким образом это все надо делать?? Как можно создать раздел новый и вообще нужно ли это делать??
Dron_Gus
Партишны для нанд-флеша задаются в специфичном для вашей платы файле. В виде такой вот структуры
Код
static struct mtd_partition __initdata ek_nand_partition[] = {
        {
                .name   = "Linux Kernel",
                .offset = 0,
                .size   = SZ_16M,
        },
        {
                .name   = "Root FS",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = 120 * SZ_1M,
        },
        {
                .name   = "FS",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = 120 * SZ_1M,
        }
};

Это я привел код из презентации http://free-electrons.com/doc/flash-filesystems.odp

Загрузиться с другого носителя и создать файловую систему можно. Еще можно сделать минимальный образ рам-диска. Но проще загрузиться с усб-флешки (например) и сделать все операции оттуда. Потом просто поменять root= в строке ядра и все.

Теоретиески с ubifs умеет работать u-boot.
one_man_show
Я на своих железках делаю именно так, как сказал Dron_Gus, управляя загрузкой параметрами среды U-boot:
- гружусь с usb-флэшки, естесственно указывая set bootargs root=/dev/sda1 rootwait ro и предварительно загрузив ядров ОЗУ
- у меня ubifs разбит на mtd1 и mtd2, один для ядра, второй для rootfs
- после загрузки с usb-флэшки делаю flashcp -v /uImage /dev/mtd1 , чтобы зашить ядро в mtd1
- для продключения раздела встроенной флэш выполняю ubiattach /dev/ubi_ctrl -m 2
- создаю том ubimkvol /dev/ubi0 -m -N rootfs
- монтирую mount -t ubifs ubi:rootfs /mnt/root
- потом копирую в смонтированное место все, что требуется
- перегружаюсь и меняю параметры окружения u-boot set bootargs ubi.mtd=2 root=ubi:rootfs rootfstype=ubifs

Что у Вас не получилось с ubiattach?
Dron_Gus
one_man_show, раз уж защел разговор в это русло. Небольшой оффтоп вопрос к Вам. Я особо с у-бутом не разбирался, но может можно сделать, чтобы у-бут автоматом грузился с флешки (или ммс-карты), если она присутствует. В противном случае - nand. Очень удобно было бы для апдейста системы.
mdmitry
Насколько я понимаю, u-boot производит некоторую настройку оборудования. bootstrap (в 9260) очень маленький и инициализирует только память, не инициализируя SPI и другое. Поэтому не понятно, кто и как должен инициализировать эту периферию и передавать управление и загружать с флэш или mmc-карты u-boot.
Dron_Gus
Не тосно выразился. Имел ввиду, что у-бут то один. Просто он, при наличии усб-флешки грузит ядро с нее и передает соответственно одну строку ядру. А при отсутствии - грузит ядро из нанда и передает соответственно другую строку.
ZAA
Спасибо всем большое за советы и ответы)) Похоже наметились позитивные сдвиги.
ДЕлаю так:
1) Разрешаю в ядре опцию Command line partition table parcing, чтобы можно было делить nandflash на разделы с помощью параметров, передаваемых ядру.
2) Записываю в nandflash по адресу 0x400000 образ файловой системы jffs2. Загружаюсь, передав ядру следующие параметры:
Код
set bootargs 'console=ttyS0,115200 mtdparts=atmel_nand:4096k(MyRootfs),40960k(Ubifs) root=/dev/mtdblock1 rw rootfstype=jffs2'

где MyRootfs - это раздел, куда записан мой образ файловой системы, Ubifs - раздел, который я отвожу под будущую систему ubifs.

3) Загружаюсь в свою файловую систему. Чтобы убедиться в правильности создания разделов:
Код
cat /proc/mtd                                              
dev:    size   erasesize  name                                                  
mtd0: 00400000 00020000 "MyRootfs"                                              
mtd1: 02800000 00020000 "Ubifs"                                                  
mtd2: 00840000 00000420 "spi0.0-AT45DB642x"

Таким образом, продолжать работать будем с /dev/mtd1.

4)Указываем путь до ubi-utils, скомпилированных под ARM и скопированных на флешку:
Код
export PATH=/media/sda1/home/root/ubi-utils


5)Далее следующая последовательность действий:
Форматируем нужный раздел под ubifs
Код
ubiformat /dev/mtd1
ubiattach /dev/ubi_ctrl -m 1

Создаем том на отформатированном разделе
Код
ubimkvol /dev/ubi0 --name=rootfs -m

Эти данные (ubi0 и rootfs мы потом будем использовать для указания ядру, откуда монтировать файловую систему)
Монтируем наш раздел на /mnt/ubifs
Код
mount -t ubifs ubi0:rootfs /mnt/ubifs/

Заходим в папку /mnt/ubifs и распаковываем туда за'tar'енный архив файловой системы, предварительно созданный на ПК и скопированный на флешку
Код
cd /mnt/ubifs
tar xvf /media/sda1/home/root/myfs.rootfs.tar


6) Перезагружаемся и передаем ядру новые параметры:
Код
set bootargs 'console=ttyS0,115200 mtdparts=atmel_nand:4096k(MyRootfs),40960k(Ubifs) ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs rw'


Пока исследования остановились на этом...KErnel Panic уже нет, что очень радует))) В понедельник продолжу)
one_man_show
ZAA, где продолжение? У Вас получилось классное развернутое описание шагов.

Dron_Gus, сам был бы раз запустить u-boot в озу, чтобы он оттуда смог загрузить ядро. Сейчас столкнулся с тем, что на плате флэш с доп.защитой, для которой нет описания, но известно, что линуксовая утилита flashcp умеет с такими работать. А начальный загрузчик не изменишь, так как неизвестны параметры флэш.
ZAA
Цитата(one_man_show @ Mar 4 2010, 18:10) *
ZAA, где продолжение? У Вас получилось классное развернутое описание шагов.


Прошу прощения, сегодня вечером отпишусь обязательно. Возникли другие неотложные дела)))
ZAA
1.Записываем в Dataflash файл образа первичного загрузчика Bootstrap, скомпилированного для загрузки из dataflash по адресу 0x00000000.
2.Записываем в Dataflash файл образа вторичного загрузчика U-Boot по адресу 0x00008400.
3.Записываем в Dataflash файл образа ядра linux по адресу 0x00042000.
4.Во вкладке sam-ba выбираем nandflash и выполняем скрипты Enable Nandflash->EraseAll.
5.На съемном носителе (flash-карта памяти) создаем файловую систему из собранного с помощью Openembedded образа:
cd /media/disk
tar -xvf Angstrom-x11-gpe-image-glibc-ipk-2009.X-stable-at91sam9263ek.rootfs.tar

6.Включаем питание платы. Устанавливаем значение переменной окружения U-Boot:
set bootargs 'console=ttyS0,115200 root=/dev/sda1 rw rootdelay=10 mtdparts=atmel_nand:2048k(Unused), 2048k(Kernel),-(rootfs)'
где root=/dev/sda1 — указание ядру, откуда монтировать файловую систему;
mtdparts=atmel_nand:2048k(Unused),2048k(Kernel),-(rootfs) — это указание ядру создать на устройстве atmel_nand три раздела со следующими названиями — Unused (неиспользуемое пространство на nandflash от адреса 0х00000000 до адреса 0х00200000), Kernel (пространство на nandflash, отведенное для ядра, начинающееся с адреса 0x00200000, заканчивающееся адресом 0х00400000), rootfs (все оставшееся пространство, начинающееся адресом 0х00400000).
7.Загружаемся, передав U-Boot команду boot.
8.Зайдя в систему под логином root, начинаем создание файловой системы UBIFS.
9.Чтобы убедиться в правильности создания ядром разделов на nandflash, в консоли набираем cat /proc/mtd:
dev: size erasesize name
mtd0: 00200000 00020000 "Unused"
mtd1: 00200000 00020000 "Kernel"
mtd2: 0fc00000 00020000 "rootfs"
mtd3: 00840000 00000420 "spi0.0-AT45DB642x"
10.В папку на флешке предварительно были скопированы инструменты для работы с UBIFS, скомпилированные под ARM-платформу. Указываем путь до них.
export PATH=/home/root/ubi-utils/:$PATH
11.Форматируем раздел, отведенный для файловой системы (rootfs):
ubiformat /dev/mtd2
12.Присоединяем:
ubiattach /dev/ubi_ctrl -m 2
13.Создаем логический том:
ubimkvol /dev/ubi0 --name=rootfs -m
14.Создаем папку для монтирования будущей UBIFS-файловой системы:
mkdir /mnt/ubifs
15.Монтируем еще пока пустую файловую систему:
mount -t ubifs ubi0:rootfs /mnt/ubifs/
16.Переходим в папку /mnt/ubifs:
cd /mnt/ubifs
17.Разархивируем в эту папку tar-архив файловой системы, предвартельно скопированный на флешку:
tar xvf /home/root/x11.rootfs.tar
18.Отмонтируем файловую систему:
umount /mnt/ubifs
19.Выключаем питание платы.
20.Включаем плату и через sam-ba записываем в Dataflash образ первичного загрузчика Bootstrap, скомпилированного для загрузки из nandflash, по адресу 0x00000000.
21.В nandflash записываем образ ядра по адресу 0х00200000.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.