Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux на SK-AT91SAM9XE512-S3E
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
JeDay
Всем доброго времени суток.

Продолжаю осваивать Linux на плате SK-AT91SAM9XE512-S3E. Ядро научился запускать, дело дошло до RootFS.
Исходные данные:
Первичный загрузчик, u-boot окружение и ядро находятся в dataflash, RootFS располагается в NAND. Карта памяти здесь:
http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted

расположение блоков в u-boot по умолчанию:
u-boot-2010.09\board\atmel\at91sam9260ek\partition.c
Код
/*define the area offsets*/
dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
    {0x00000000, 0x000041FF, FLAG_PROTECT_SET,   0, "Bootstrap"},
    {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
    {0x00008400, 0x00041FFF, FLAG_PROTECT_SET,   0, "U-Boot"},
    {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0,    "Kernel"},
    {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0,    "FS"},
};


Аргументы передаваемые ядру тоже не менялись:
u-boot-2010.09\include\configs\at91sam9260ek.h
Код
#define CONFIG_BOOTARGS        "console=ttyS0,115200 "            \
                "root=/dev/mtdblock0 "            \
                "mtdparts=atmel_nand:-(root) "        \
                "rw rootfstype=jffs2"


В ядре
linux-2.6.36\arch\arm\mach-at91\board-sam9260ek.c
прописано:
Код
/*
* NAND flash
*/
static struct mtd_partition __initdata ek_nand_partition[] = {
       {
               .name        = "Bootstrap",
               .offset      = 0,
               .size        = SZ_4M,
       },
       {
               .name        = "rootfs",
               .offset      = MTDPART_OFS_NXTBLK,
               .size        = MTDPART_SIZ_FULL,
       },
};


т.е. ,как я понял, rootfs располагается в NAND по смещению 4М и занимает все оставшееся место.
Но в логе загрузки ядра видно что раздел rootfs создается на весь размер флешки.
Код
Creating 1 MTD partitions on "atmel_nand":
0x000000000000-0x000010000000 : "root"


Код
U-Boot> bootm
## Booting kernel from Legacy Image at 22000000 ...
   Image Name:   JedaY Linux 2.6.36 b002
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1809044 Bytes = 1.7 MiB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.36 (jeday@vmachine) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #2 Wed Oct 27 20:16:23 MSD 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: -=JedaY ComputerS=-
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 200 MHz, master 100 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock0 mtdparts=atmel_nand:-(root) rw rootfstype=jffs2
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: 61340k/61340k available, 4196k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
    vmalloc : 0xc4800000 - 0xfee00000   ( 934 MB)
    lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0026000   ( 120 kB)
      .text : 0xc0026000 - 0xc0338000   (3144 kB)
      .data : 0xc0352000 - 0xc0374680   ( 138 kB)
NR_IRQS:192
AT91: 96 gpio irqs in 3 banks
Console: colour dummy device 80x30
console [ttyS0] enabled
Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
AT91: Power Management
AT91: Starting after user reset
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Switching to clocksource tcb_clksrc
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.
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) A© 2001-2006 Red Hat, Inc.
msgmni has been set to 119
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered (default)
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
brd: module loaded
loop: module loaded
ssc ssc.0: Atmel SSC device at 0xc4860000 (irq 14)
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 1833 at 0x00000e520000
1 cmdlinepart partitions found on MTD device atmel_nand
Creating 1 MTD partitions on "atmel_nand":
0x000000000000-0x000010000000 : "root"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.1: AT45DB321x (4224 KBytes) pagesize 528 bytes (OTP)
atmel_spi atmel_spi.0: chipselect 1 already in use
atmel_spi atmel_spi.1: Atmel SPI Controller at 0xfffcc000 (irq 13)
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (3e:36:65:ba:6f:be)
eth0: attached PHY driver [Micrel KS8001 or KS8721] (mii_bus:phy_addr=ffffffff:01, irq=-1)
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
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
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
mice: PS/2 mouse device common for all mice
rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
NET: Registered protocol family 10
IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
VFS: Mounted root (jffs2 filesystem) on device 31:0.
Freeing init memory: 120K
Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[<c002c1a8>] (unwind_backtrace+0x0/0xe4) from [<c0284418>] (panic+0x50/0x174)
[<c0284418>] (panic+0x50/0x174) from [<c0026598>] (init_post+0x9c/0xbc)
[<c0026598>] (init_post+0x9c/0xbc) from [<c000846c>] (kernel_init+0x110/0x14c)
[<c000846c>] (kernel_init+0x110/0x14c) from [<c0027df8>] (kernel_thread_exit+0x0/0x8)


Вопросы в следующем:
1. Почему ядро пытается создать раздел в начале NAND а не с адреса 0х400000?
2. Где можно почитать про передачу аргументов в ядро, именно: root и mtdparts?
В файле linux-2.6.36\Documentation\kernel-parameters.txt они есть, но синтаксиса нету, есть только ссылка на исходник:
"See drivers/mtd/cmdlinepart.c".
3. Правильно я понимаю, что u-boot знает где лежит RootFS только для того, чтобы по TFTP его автоматом в нужное место флешки записывать (т.е. на нахождение rootfs ядром это не влияет) ?
4. Откуда берется параметр в аргументе "atmel_nand" ? В исходниках ядра так и не смог распутать клубок...
JeDay
На вопрос-2 нашел ответ:
http://electronix.ru/forum/index.php?showtopic=66883

Остальные пока открыты..
sasamy
Цитата(JeDay @ Oct 28 2010, 23:44) *
На вопрос-2 нашел ответ:
http://electronix.ru/forum/index.php?showtopic=66883

Остальные пока открыты..


На все вопросы есть ответы тут
Цитата
Аргументы передаваемые ядру тоже не менялись:
u-boot-2010.09\include\configs\at91sam9260ek.h
Код
#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
"root=/dev/mtdblock0 " \
>>>>"mtdparts=atmel_nand:-(root) " \<<<<
"rw rootfstype=jffs2"


Эта строчка отдает всю флешь под один раздел atmel_nand. Параметры передаваемые ядру загрузчиком всегда имеют приоритет - странно если бы было наоборот - иначе их нет никакого смысла передавать ядру smile.gif
JeDay
Всем доброго времени суток.
Долго не проявлял активности т.к. был в отпуске...
С синтаксисом указания MTD блоков и их размеров разобрался. Оказывается его описание было в самом исходнике drivers/mtd/cmdlinepart.c
Код
The format for the command line is as follows:
*
* mtdparts=<mtddef>[;<mtddef]
* <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
*              where <mtd-id> is the name from the "cat /proc/mtd" command
* <partdef> := <size>[@offset][<name>][ro][lk]
* <mtd-id>  := unique name used in mapping driver/device (mtd->name)
* <size>    := standard linux memsize OR "-" to denote all remaining space
* <name>    := '(' NAME ')'
*
* Examples:
*
* 1 NOR Flash, with 1 single writable partition:
* edb7312-nor:-
*
* 1 NOR Flash with 2 partitions, 1 NAND with one
* edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home)


Для теста скачал образ ФС "v23434-rootfs.arm_nofpu.jffs2" c сайта с at91.com. Образ грузится нормально.
Дальше пробую собрать свой образ RootFS.
Скомпилил Buildroot 2010.08. За основу брал конфиг с http://dmilvdv.narod.ru/AT91SAM9260/index.html
Убрал поддержку звука и видео, а также busybox(на него ругался компилер т.к. я конфиг не указал).
Добавил поддержку JFFS2.NAND с параметрами 2к-128к.
Сейчас для меня главное, чтобы ядро "подхватило" ФС, а не боевая работоспособность внутренних компонентов и busybox.
Прошиваю c нулевого адреса NAND свой образ "rootfs_nand.jffs2"(2.5Мб) через SAM-BA.
Дальше пробуем загрузиться:

Код
bootm
## Booting kernel from Legacy Image at 22000000 ...
   Image Name:   JedaY Linux 2.6.36 b002
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1809044 Bytes = 1.7 MiB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.36 (jeday@vmachine) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #2 Wed Oct 27 20:16:23 MSD 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: -=JedaY ComputerS=-
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 200 MHz, master 100 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock0 mtdparts=atmel_nand:-(root) rw rootfstype=jffs2
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: 61340k/61340k available, 4196k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
    vmalloc : 0xc4800000 - 0xfee00000   ( 934 MB)
    lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0026000   ( 120 kB)
      .text : 0xc0026000 - 0xc0338000   (3144 kB)
      .data : 0xc0352000 - 0xc0374680   ( 138 kB)
NR_IRQS:192
AT91: 96 gpio irqs in 3 banks
Console: colour dummy device 80x30
console [ttyS0] enabled
Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
AT91: Power Management
AT91: Starting after user reset
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Switching to clocksource tcb_clksrc
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.
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) A© 2001-2006 Red Hat, Inc.
msgmni has been set to 119
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered (default)
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
brd: module loaded
loop: module loaded
ssc ssc.0: Atmel SSC device at 0xc4860000 (irq 14)
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 1833 at 0x00000e520000
1 cmdlinepart partitions found on MTD device atmel_nand
Creating 1 MTD partitions on "atmel_nand":
0x000000000000-0x000010000000 : "root"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.1: AT45DB321x (4224 KBytes) pagesize 528 bytes (OTP)
atmel_spi atmel_spi.0: chipselect 1 already in use
atmel_spi atmel_spi.1: Atmel SPI Controller at 0xfffcc000 (irq 13)
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (3e:36:65:ba:6f:be)
eth0: attached PHY driver [Micrel KS8001 or KS8721] (mii_bus:phy_addr=ffffffff:01, irq=-1)
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
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
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
mice: PS/2 mouse device common for all mice
rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
rtc-at91sam9 at91_rtt.0: rtc0: SET TIME!
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
NET: Registered protocol family 10
IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
rtc-at91sam9 at91_rtt.0: hctosys: unable to read the hardware clock
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18a4: 0x7df7 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18a8: 0xe9b5 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18ac: 0xfccb instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18b0: 0x0f7f instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18b4: 0x20b0 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18b8: 0xcc20 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18bc: 0xe168 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18c0: 0x35f3 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18c4: 0xfae2 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18c8: 0xf7a0 instead
Further such events for this erase block will not be printed
Empty flash at 0x00c2a16c ends at 0x00c2a800
VFS: Mounted root (jffs2 filesystem) on device 31:0.
Freeing init memory: 120K
Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[<c002c1a8>] (unwind_backtrace+0x0/0xe4) from [<c0284418>] (panic+0x50/0x174)
[<c0284418>] (panic+0x50/0x174) from [<c0026598>] (init_post+0x9c/0xbc)
[<c0026598>] (init_post+0x9c/0xbc) from [<c000846c>] (kernel_init+0x110/0x14c)
[<c000846c>] (kernel_init+0x110/0x14c) from [<c0027df8>] (kernel_thread_exit+0x0/0x8)


Как видно ФС не определяется.. sad.gif
Пробовал несколько раз пересобирать, указывал GNU 4.4 и 4.3 компилятор. Результат один и тот же.
Старт компиляции делаю командой make без указания ключей к CodeSourcery т.к. сборка производится внутренним тулчейном.
В чем может быть проблема?
И что за девайс такой 31:0, где можно почитать об этом? ( VFS: Mounted root (jffs2 filesystem) on device 31:0. )
kurtis
Цитата
Убрал поддержку звука и видео, а также busybox(на него ругался компилер т.к. я конфиг не указал).

Вы init отдельно собираете? Если нет, но скорее всего подразумевается что будет использоваться тот init что идет в комплекте с busybox, а раз вы убрали busybox, то и запускать ядру нечего.

Цитата
Как видно ФС не определяется.

Судя по логу, файловая система то как раз у вас и определилась.
JeDay
Спасибо за подсказку, буду пытаться busybox заставить скомпилиться.
А что тогда вот эти строки значат? Я думал что это дефект ФС.
Код
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18a4: 0x7df7 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x002e18a8: 0xe9b5 instead
...
...
kurtis
Цитата
А что тогда вот эти строки значат? Я думал что это дефект ФС.

попробуйте перед записью стереть flash, вдруг поможет
JeDay
Я стирал флешь полностью перед записью smile.gif Не помогает
JeDay
Ураа, поднялась rootfs.
Пересобрал buildroot с busybox.
Теперь в дополнение к предыдущему логу добавилось:
Код
VFS: Mounted root (jffs2 filesystem) on device 31:0.
Freeing init memory: 120K
Initializing random number generator... done.
Starting network...
Starting network time protocol daemon: ntpd.
Starting dropbear sshd: generating rsa key... generating dsa key... OK
Starting ProFTPD: warning: `proftpd' uses 32-bit capabilities (legacy support in use)
- warning: unable to determine IP address of 'buildroot'
- error: no valid servers configured
- Fatal: error processing configuration file '/etc/proftpd.conf'
FAILED

Welcome to Buildroot

buildroot login:


Надо теперь понять откуда брать логин с паролем smile.gif и допиливать ФС с busybox, чтобы ничего лишнего небыло...
JeDay
Пользователи по умолчанию в Buildroot: root и default. (Если у кого такой же вопрос возникнет)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.