Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux для AT91SAM9260
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Bladerunner
Для начала заказал оценочную плату с данным процессором. Там на компакт диске шел демо Linux для этого процесора (впринципе он бы подошел если бы только не отсутсвие поддержки ethernet и usb gadget) . Поэтому решил собрать новое ядро и соотвественно toolchain.
Для сборки toolchain и Linux я воспользовался Buildroot (информация на linux4sam.org). С сборкой кроскомпилятора gcc и uclibc для ARM особых проблем не возниклою Удалось собрать загрузчики тоже без особых проблем. При сборке возникли небольшие проблемы с makefile для архитектуры ARM (ядро получалолсь просто невероятных размеров ), но их тоже решил.
Так вот проблема возникла в следующем:
- ядро загружается вполне штатно (так же как и работающий демоLinux для 9260) , но после того как он загрузился и подключил RAm диск не грузит консоль:

NET: Registered protocol family 1
NET: Registered protocol family 17
RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 4096KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 100K

по идее дальше должен обрабатыватся либо init либо linuxrc (в настройках ядра указано что init=/linuxrc), но это не происходит.

Что делать и как это исправить?

з.ы. сначала думал что какие то проблемы с фс , но нет , она прекрасно монтируется под обычным линуксом. Пробовал использовать ядро от демоLinux для 9260 оно нормально подключает мою фс и начинает обрабатывать init и тд
amw
Цитата
RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 4096KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem).

Тут же написано что фс смонтирована.
А на этой фс есть все необходимые устройства?
В частности /dev/console, /dev/loop*, /dev/ram*, /dev/null.
И еще, что используетс в качестве init? busybox?
Думаю - не хватает библиотек, а точнее пути к ним не сконфигурированы.
Скомпилируете busybox (ну или что Вы используете как init) статически. Там есть в конфигурации опция.
BTW. linuxrc - это скрипт, как я понимаю. То есть для его исполнения нужен /bin/sh, то же статически слинкованый.
А динамические библиотеки подключите позже.
Bladerunner
да если фсэку подмантировать к host системе и посмотреть содержимое то там уже есть все устройства типа console loop null.
Пробовал разные фс ничего не меняется (cramfs, jffs,ext2)
после

VFS: Mounted root (ext2 filesystem).
Freeing init memory: 100K

и все ... Попробую сделать свою фс без всяких библиотек со стаичным busybox...

з.ы. осталосось то всего ничего ... ядро в принципе работает ... если воткнуть флэху то он пишет логи ее подключения к usb-host (ядро откомпилено с дебаг )
amw
Цитата(Bladerunner @ Feb 29 2008, 12:03) *
да если фсэку подмантировать к host системе и посмотреть содержимое то там уже есть все устройства типа console loop null.
Пробовал разные фс ничего не меняется (cramfs, jffs,ext2)
после

VFS: Mounted root (ext2 filesystem).
Freeing init memory: 100K

и все ... Попробую сделать свою фс без всяких библиотек со стаичным busybox...

з.ы. осталосось то всего ничего ... ядро в принципе работает ... если воткнуть флэху то он пишет логи ее подключения к usb-host (ядро откомпилено с дебаг )

А покажите-ка /etc/inittab.
Может init настраивается не на ту консоль? У Вас консоле на последовательном порту?
Попробуйте так:
Код
ttyS0:respawn:/bin/sh

Не помню точно, гляньте в документации busybox точное количество двоеточий и их порядок.
Bladerunner
Цитата(amw @ Feb 29 2008, 13:14) *
А покажите-ка /etc/inittab.
Может init настраивается не на ту консоль? У Вас консоле на последовательном порту?
Попробуйте так:
Код
ttyS0:respawn:/bin/sh

Не помню точно, гляньте в документации busybox точное количество двоеточий и их порядок.


непонятно то что я беру фс от демаLinux, тот который идет на сд с китом , он тоже никак не хочет запускать init
andron86
Цитата(amw @ Feb 29 2008, 11:14) *
А покажите-ка /etc/inittab.
Может init настраивается не на ту консоль? У Вас консоле на последовательном порту?
Попробуйте так:
Код
ttyS0:respawn:/bin/sh

Не помню точно, гляньте в документации busybox точное количество двоеточий и их порядок.


Могу только подтвердить. У меня была такая проблемка, консоль на другой порт перестраивалась. глянь /etc/inittab, в общем, полазь в /etc/
MTh
Вот содержимое:
Код
cat inittab

# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
#
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id        == tty to run on, or empty for /dev/console
# runlevels == ignored
# action    == one of sysinit, respawn, askfirst, wait, and once
# process   == program to run

# Startup the system
null::sysinit:/bin/mount -o remount,rw /
null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -a
null::sysinit:/bin/hostname -F /etc/hostname
null::sysinit:/sbin/ifconfig lo 127.0.0.1 up
null::sysinit:/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
# now run any rc scripts
::sysinit:/etc/init.d/rcS

# Set up a couple of getty's
#tty1::respawn:/sbin/getty 38400 tty1
#tty2::respawn:/sbin/getty 38400 tty2

# Put a getty on the serial port
# ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
ttyS0::respawn:/bin/ash

# Logging junk
null::sysinit:/bin/touch /var/log/messages
null::respawn:/sbin/syslogd -n -m 0
null::respawn:/sbin/klogd -n
tty3::respawn:/usr/bin/tail -f /var/log/messages

# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot

# Stuff to do before rebooting
null::shutdown:/usr/bin/killall klogd
null::shutdown:/usr/bin/killall syslogd
null::shutdown:/bin/umount -a -r
null::shutdown:/sbin/swapoff -a


в строках:

Код
# ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
ttyS0::respawn:/bin/ash

Пробовал и первую и вторую (предложенную здесь)... во второй один раз ошибся, система даже не отругалась...
MTh
Работать так и не хочет.... все в том же состоянии как и было...
Господа, у кого есть рабочее откомпиленное ядро для AT91SAM9260? киньте если не жалко. smile.gif
slava2005
Цитата(MTh @ Mar 13 2008, 04:52) *
Работать так и не хочет.... все в том же состоянии как и было...
Господа, у кого есть рабочее откомпиленное ядро для AT91SAM9260? киньте если не жалко. smile.gif


Есть то есть, и не жалко ни грамма smile.gif, только вот что в ядре нужно ?

А то вот напрмер: http://rapidshare.com/files/98402351/uImage.html - это рабочий вариант ядра для вот этого проекта http://electronix.ru/forum/index.php?showtopic=42507
MTh
Э-э-э... а можно в другое место или на почту? Рапида закрыта... sad.gif

Может подскажете чем собирали (crosscompiler)? И из чего... если был какой-то мануал, может линк есть?

В ядре нужно:
Ethernet
USB Host+ communication device + storage device
Com (все) + RS485
NAND Flash
RTC (DS1682)
I2C
DataFlash
amw
Цитата(MTh @ Mar 12 2008, 11:19) *
Вот содержимое:
Код
cat inittab

# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
#
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id        == tty to run on, or empty for /dev/console
# runlevels == ignored
# action    == one of sysinit, respawn, askfirst, wait, and once
# process   == program to run

# Startup the system
null::sysinit:/bin/mount -o remount,rw /
null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -a
null::sysinit:/bin/hostname -F /etc/hostname
null::sysinit:/sbin/ifconfig lo 127.0.0.1 up
null::sysinit:/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

Это лучше переместить в один из rc scripts, который будет вызываться из /etc/init.d/rcS
Цитата
Код
# now run any rc scripts
::sysinit:/etc/init.d/rcS

# Set up a couple of getty's
#tty1::respawn:/sbin/getty 38400 tty1
#tty2::respawn:/sbin/getty 38400 tty2

# Put a getty on the serial port
# ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
ttyS0::respawn:/bin/ash

Попробуйте так:
Код
ttyS0::askfirst:/bin/sh

Шелл - busybox? Если да - то убедитесь, что шелл по умолчанию в busybox сконфигурирован и есть соответствующий симлинк (/bin/sh -> /bin/ash)
Цитата
Код
# Logging junk
null::sysinit:/bin/touch /var/log/messages
null::respawn:/sbin/syslogd -n -m 0
null::respawn:/sbin/klogd -n
tty3::respawn:/usr/bin/tail -f /var/log/messages

# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot

# Stuff to do before rebooting
null::shutdown:/usr/bin/killall klogd
null::shutdown:/usr/bin/killall syslogd
null::shutdown:/bin/umount -a -r
null::shutdown:/sbin/swapoff -a


в строках:

Код
# ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
ttyS0::respawn:/bin/ash

Пробовал и первую и вторую (предложенную здесь)... во второй один раз ошибся, система даже не отругалась...

А как выглядит командная строкой ядра?
UARTы имеют имена ttyS* или ttyAT* ?
Если Вы видите на UART вывод сообщений ядра при загрузке, а судя по первому посту - Вы их видите, то ищите причину в конфигурации rootfs. Это может быть или скрипт, или настроечный файл, или сам busybox. Его лучше всего собрать статически, тогда он точно будет запускаться и Вы сможете увидеть его сообщения.

И дайте полный лог загрузочных сообщений ядра.
Убедитесь, что на rootfs есть /linuxrc. А лучше укажите init=/bin/init, или на крайний случай init=/bin/sh
MTh
Код
AT91Bootstrap loading from 0x8400...
>AT45DB642D detected
>Loading from Dataflash[0x00008400] to SDRAM[0x23F00000]
.......
>Loading complete, [0x00032000] bytes
>Start application at [0x23F00000]


U-Boot 1.2.0 (Feb 21 2008 - 16:29:37)

DRAM:  64 MB
NAND:  No NAND device found!!!
No NAND device found!!!
0 MiB
DataFlash:AT45DB642
Nb pages:   8192
Page Size:   1056
Size= 8650752 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0004144 (RO) bootstrap
Area 1: C0004200 to C00083FF      Environment
Area 2: C0008400 to C0041FFF (RO) U-BOOT 1.20
Area 3: C0042000 to C02FFFFF      KERNEL
Area 4: C0300000 to C0800000      FS
In:    serial
Out:   serial
Err:   serial
DM9161A PHY Detected
No link
MAC: error during RMII initialization
Hit any key to stop autoboot:  0
## Booting image at 21600000 ...
   Image Name:   Linux-2.6.23.1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1498432 Bytes =  1.4 MB
   Load Address: 20008000
   Entry Point:  20008000
   Verifying Checksum ... OK
OK

Starting kernel ...

Uncompressing Linux...........................................................................
....................... done, booting the kernel.
Linux version 2.6.23.1 (root@skb_p4) (gcc version 4.2.1) #1 Thu Feb 28 10:29:48 IRKT 2008
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
Machine: Atmel AT91SAM9260-EK
Memory policy: ECC disabled, Data cache writeback
Clocks: CPU 198 MHz, master 99 MHz, main 18.432 MHz
CPU0: D VIVT write-back cache
CPU0: I cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets
CPU0: D cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets
Built 1 zonelists in Zone order.  Total pages: 16256
Kernel command line: mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 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
Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
... MAX_LOCKDEP_SUBCLASSES:    8
... MAX_LOCK_DEPTH:          30
... MAX_LOCKDEP_KEYS:        2048
... CLASSHASH_SIZE:           1024
... MAX_LOCKDEP_ENTRIES:     8192
... MAX_LOCKDEP_CHAINS:      16384
... CHAINHASH_SIZE:          8192
memory used by lock dependency info: 1024 kB
per task-struct memory footprint: 1920 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: 56576KB available (2748K code, 2396K data, 116K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
Generic PHY: Registered new driver
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: 4, 73728 bytes)
TCP bind hash table entries: 2048 (order: 4, 73728 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
Freeing initrd memory: 3072K
JFFS2 version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler anticipatory registered (default)
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
atmel_usart.1: ttyS1 at MMIO 0xfffb0000 (irq = 6) is a ATMEL_SERIAL
atmel_usart.2: ttyS2 at MMIO 0xfffb4000 (irq = 7) is a ATMEL_SERIAL
RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
loop: module loaded
Davicom DM9161E: Registered new driver
Davicom DM9161A: Registered new driver
Davicom DM9131: Registered new driver
ICPlus IP175C: Registered new driver
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffc4000 irq 21 (00:00:00:00:00:00)
eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=ffffffff:00, irq=-1)
No NAND device found!!!
usbmon: debugfs is not available
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
drivers/usb/host/r8a66597-hcd.c: driver r8a66597_hcd, 29 May 2007
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
udc: at91_udc version 3 May 2006
mice: PS/2 mouse device common for all mice
i2c /dev entries driver
at91_i2c at91_i2c: AT91 i2c bus driver.
usbcore: registered new interface driver usbhid
drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver
Advanced Linux Sound Architecture Driver Version 1.0.14 (Fri Jul 20 09:12:58 2007 UTC).
ALSA device list:
  No soundcards found.
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
Installing 9P2000 support
RAMDISK: cramfs filesystem found at block 0
RAMDISK: Loading 2912KiB [1 disk] into ram disk... done.
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 116K
slava2005
Этта ... Вы бы printenv из u-boot бы привели... Телепатия мне подсказывает, что у Вас переменные не настроены.
amw
Цитата
Kernel command line: mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw

То есть в качестве init у Вас используется либо /sbin/init, либо /bin/init.
Он слинкован статически?
Покажите карту памяти.
Цитата
Этта ... Вы бы printenv из u-boot бы привели... Телепатия мне подсказывает, что у Вас переменные не настроены.

Да, не помешало бы.
MTh
Переменные окружения:
Код
ARM M7 BOOT> printenv
baudrate=115200
ethaddr=04:05:fe:ed:00:18
ipaddr=XX.XX.XX.XX
gatewayip=XX.XX.XX.XX
netmask=255.255.255.0
hostname=at91sam9260_arm_test
bootcmd=cp.b 0xc0042000 0x21600000 0x1fffff; cp.b 0xc0300000 0x21100000 0x3fffff; bootm 0x21600000
bootdelay=1
serverip=10.10.10.11
stdin=serial
stdout=serial
stderr=serial

Environment size: 488/8188 bytes


Карта памяти:
Код
DataFlash:AT45DB642
Nb pages:   8192
Page Size:   1056
Size= 8650752 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0004144 (RO) bootstrap
Area 1: C0004200 to C00083FF      Environment
Area 2: C0008400 to C0041FFF (RO) U-BOOT 1.20
Area 3: C0042000 to C02FFFFF      KERNEL
Area 4: C0300000 to C0800000      FS

init слинкован НЕ статически
Сейчас пытаюсь собрать все еще раз с нуля так сказать... Если есть какие-то предложения, очень прошу написать ))
Про то что busybox должен быть статический я уже понял.
MTh
А то что busybox ругается когда его пытаешься скомпилить статически, ничего страшного? Говорит что бинарники могут быть битыми?
amw
Цитата(MTh @ Mar 14 2008, 09:56) *
А то что busybox ругается когда его пытаешься скомпилить статически, ничего страшного? Говорит что бинарники могут быть битыми?

Он предупреждает, что статически слинкованный busybox будет использовать системные вызовы dlopen и пр. при работе с DNS.
Пусть его, пускай использует.
Главное - при загрузке, когда доступа к shared libraryes еще может не быть, статически слинкованный init (т.е. busybox) не требует этих библиотек.
Есть какаято другая ругань? Кроме dlopen?


Цитата(MTh @ Mar 14 2008, 02:53) *
Карта памяти:
Код
DataFlash:AT45DB642
Nb pages:   8192
Page Size:   1056
Size= 8650752 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0004144 (RO) bootstrap
Area 1: C0004200 to C00083FF      Environment
Area 2: C0008400 to C0041FFF (RO) U-BOOT 1.20
Area 3: C0042000 to C02FFFFF      KERNEL
Area 4: C0300000 to C0800000      FS

Это, как я понимаю карта флаш памяти, а я имел в виду карту памяти типа
C0000000 - CFFFFFFF - Flash
20000000 - 24000000 - SDRAM
То есть проверить не накладывается ли образ initrd после распаковки на область памяти ядра.
Точнее наоборот.
Общаяя рекомендяция загрузки - ядро по младшим адресам ОЗУ, initrd по адресу RAM_Size - sizeof(initrd). Примерно так. Буквально выполнять не обязательно, но придерживаться идеологии.
Цитата
init слинкован НЕ статически
Сейчас пытаюсь собрать все еще раз с нуля так сказать... Если есть какие-то предложения, очень прошу написать ))
Про то что busybox должен быть статический я уже понял.

Сделайте именно статически. Динамичекой линковкой (а точнее подготовкой запуска динамически слинкованных приложений) можно будет заняться потом.

Сколько у Вас UART-ов? Можете глятуть на каждом?
Уберите все лишнее из /etc/inittab. оставте только
Код
ttyS0:askfirst:/bin/sh
ttyS1:askfirst:/bin/sh
ttyS2:askfirst:/bin/sh
ttyS3:askfirst:/bin/sh
ttyS4:askfirst:/bin/sh

И так по всем UARTам. Сколько их у Вас есть в процессоре а не на плате, включая DBGU (не помню точно есть ли он в Вашем процессоре).
Возможно Вы считаете номера UART не в том порядке, в каком их считает Linux.
slava2005
[quote name='MTh' date='Mar 14 2008, 03:53' post='379129']
Переменные окружения:
Код
ARM M7 BOOT> printenv
baudrate=115200
ethaddr=04:05:fe:ed:00:18
ipaddr=XX.XX.XX.XX
gatewayip=XX.XX.XX.XX
netmask=255.255.255.0
hostname=at91sam9260_arm_test
bootcmd=cp.b 0xc0042000 0x21600000 0x1fffff; cp.b 0xc0300000 0x21100000 0x3fffff; bootm 0x21600000
bootdelay=1
serverip=10.10.10.11
stdin=serial
stdout=serial
stderr=serial

Environment size: 488/8188 bytes


А где bootargs ?
MTh
C bootargs был трабл.... сейчас он есть )) Завтра на работе скину последнее все что есть...
Дело в том что начал все это один человек (т.е. ядро-то грузится именно его), а продолжаю я... Пока разбираюсь что к чему и пытаюсь таки перекомпилить и запустить...
BuildRoot был собран на ASP Linux, его скачал... и допилил напильником BladeRunner (как я понял пилить пришлось много)
Я под Debian собрал buildroot который был на диске argussoft для оценочной платы. Собралось не без проблем, но собралось. Но вот ядро отказывается запускаться напрочь sad.gif
Завтра продолжу "извращения" и обновлю всю инфу.

Очень признателен за помощь. ))
MTh
Каким-то неведомым образом оно завелось. т.е. все: ядро грузиться, приглашение появляется...
В чем была причина понять до конца так и не понял. Собирал buildroot с диска argussoft. Сделал статический busybox.... может причина и была в этом....

Всем большое спасибо за помощь. ))
amw
Цитата(MTh @ Mar 17 2008, 04:51) *
Сделал статический busybox.... может причина и была в этом....

Большинство проблем, похожих на Ваши, именно в этом и заключаются.
MTh
Теперь другой трабл: поднял сеть... все ок...
Пытаюсь скомпилить приложение:
Код
make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-

Приложение с кучей варнингов компилиться, копирую в коренвую систему, по tftp заливаю... пытаюсь запустить приложение:
Код
ls
hello  s.sh
# ./hello
-sh: ./hello: not found

написал небольшой скрипт, в нем вывод строки и запуск hello в двух вариантах:
Код
# ./s.sh
Just string
./s.sh: ./s.sh: 3: hello: not found
./s.sh: ./s.sh: 4: ./hello: not found
#


Что я делаю не так?
amw
Цитата(MTh @ Mar 17 2008, 10:50) *
Теперь другой трабл: поднял сеть... все ок...
Пытаюсь скомпилить приложение:
Код
make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-

Приложение с кучей варнингов компилиться, копирую в коренвую систему, по tftp заливаю... пытаюсь запустить приложение:
Код
ls
hello  s.sh
# ./hello
-sh: ./hello: not found

написал небольшой скрипт, в нем вывод строки и запуск hello в двух вариантах:
Код
# ./s.sh
Just string
./s.sh: ./s.sh: 3: hello: not found
./s.sh: ./s.sh: 4: ./hello: not found
#


Что я делаю не так?

1. Та же проблема, что и с busybox. Скомпилируйте статически. Если запускается - скопируйте нужные библиотеки на rottfs.
Как проверить можно посмотреть тут http://electronix.ru/forum/index.php?showtopic=44076 пост #5. Рекомендации и методы в данном вопросе не зависят от архитектуры. Библиотеки лучше всего ложить на rootfs в папку /lib. По крайней мере для начала. Не забывайте что libstdc++ не бывает статической. Таким образом все C++ приложения требуют библиотеку. Некоторые библиотеки зависят от других. Если Ваше приложение требует одну, то нужно копировать обе и т.д.
2. Как я понял Вы используете buildroot. Если да - смотрите в его доках как вставит свое приложение в систему. Не могу сказать подробнее, так как buildroot не использую вообще.
MTh
amw спасибо smile.gif

Я использовал АРМовый компилер и вместо Makefile скомпилил все напрямую, т.е.:
/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -c hello.c
/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -o hello hello.o
Воткнул в rootfs, закинул по tftp и запустилось без проблем... Хотя в Makefile прописал опцию на вызов компилятора именно АРМ... Это и есть статическая линковка?
Правда я ядро пересобрал... и в /lib появились библиотеки...
amw
Цитата(MTh @ Mar 18 2008, 11:02) *
Я использовал АРМовый компилер и вместо Makefile скомпилил все напрямую, т.е.:
/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -c hello.c
/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -o hello hello.o
Воткнул в rootfs, закинул по tftp и запустилось без проблем... Хотя в Makefile прописал опцию на вызов компилятора именно АРМ... Это и есть статическая линковка?

Извините - не понял. Про АРМовский компилер.

Статическая линковка - это когда все функции и переменные из библиотек вставляются линкеров в исполняемый файл полностью.
Динамическая линковка - это когда линкер создает в исполняемом вайле только ссылки на имена функций в библиотеках.
При статической линковке - исполняемый файл содержит все, в том числе копии всех используемых им библиотечных функций.
При динамической линковке - исполняемый файл содержит только написаный Вами код. Для его запуска необходимы все библиотеки, из которых он использует функции.

Статическая линковка:
Код
/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -Wl,-static -o hello hello.o

Динамическая линковка выполняется по умолчанию. (То есть Вы не указали что нужно линковать статически - значит динамически)
Цитата
... и в /lib появились библиотеки...

У Вас линковка динамическая. Но появились библиотеки.

PS: Для uClinux могут быть ньюансы по линковке. Однако тут я Вам помочь не смогу. uClinux не пользую.
MTh
Цитата(amw @ Mar 18 2008, 12:31) *
Извините - не понял. Про АРМовский компилер.


Компилятор собранный для компиляции прилады под ARM //*Масло маслянное но факт

Цитата(amw @ Mar 18 2008, 12:31) *
PS: Для uClinux могут быть ньюансы по линковке. Однако тут я Вам помочь не смогу. uClinux не пользую.


Это не uCLinux...

Спасибо за развернутый ответ smile.gif
amw
Цитата(MTh @ Mar 19 2008, 02:14) *
Компилятор собранный для компиляции прилады под ARM //*Масло маслянное но факт

Очепятка? Про масло я понял а вот про все остальное - нет smile.gif.
Цитата
Это не uCLinux...

Используете uClibc? Или просто компилятор стащеный?
Я как-то привык сам пересобирать компиляторы, потому плохо ориентируюся в том, что можно скачать.
Цитата
Спасибо за развернутый ответ smile.gif

Главное, чтоб в пользу smile.gif.
MTh
Господа, спасайте....
Собрал ядро и ФС... заработало... Потребовалось включить поддержку libusb и libtool... В buildroot в menuconfig включил соответствующие пункты. Собираю все... закидываю на АРМ - вешается после монтирования ФС... пишет freeing init memory 96K и все... тишина.... Правда на вводимые символы реагирует... т.е. echo работает. Иогда система пишет что неверный формат архива...

ФС лежит по адресу 0х21100000, ядро по 0х22200000 т.е. между ними около 20 МБ (знаю что много, пока поставил так,чтобы отладить smile.gif )
-rw-r--r-- 1 root root 1065698 2008-03-21 15:49 at91sam9260ek-linux-2.6.19-2008-03-21.gz
-rw-r--r-- 1 root root 3610702 2008-03-21 15:45 rootfs.arm_nofpu.ext2.gz

Версия ядра: 2.6.19.2
Версия buildroot: 2007116-RC2

Вот вывод printenv:
Код
baudrate=115200
bootdelay=1
boot_addr=0x21600000
ramdisk_addr=0x21100000
ld_root=run linux; run ramdisk; bootm $(boot_addr)
ethaddr=04:05:fe:ed:00:18
hostname=at91sam9260_arm_test
initrd=0x2118C000,6000000
OS=C0042000
endflash=c083ffff
ver=1
config=tftp  ${ramdisk} autoscript.${hostname}; autoscr ${ramdisk}
kernel-version=2.6.21.1
kernel-date=2007-06-05
fs-date=2007-06-05
get-ramdisk=tftp        ${ramdisk}      ${rd};          setenv rd-size  ${filesize}
store-ramdisk=cp.b      ${ramdisk}      ${FS}           ${rd-size}
load-ramdisk=cp.b       ${FS}           ${ramdisk}      ${rd-size}
flash-ramdisk=run       get-ramdisk;    run             store-ramdisk
get-kernel=tftp ${kernel}       ${linux};       setenv  kernel-size     ${filesize}
store-kernel=cp.b       ${kernel}       ${OS}           ${kernel-size};         saveenv
load-kernel=cp.b        ${OS}           ${kernel}       ${kernel-size};         saveenv
flash-kernel=run        get-kernel;     run             store-kernel
get=run get-kernel        ; run get-ramdisk
flash=run flash-kernel; run flash-ramdisk; saveenv
load=run load-kernel ; run load-ramdisk
fstype=ram
flashfs=/dev/mtdblock2
ramfs=/dev/ram
access=rw
ramdisk_size=15360
console=ttyS0,115200
mem=64M
update=os; fs; setargs
cmpk=run flash-kernel; cp.b ${OS} ${ramdisk} ${kernel-size}; cmp ${kernel} ${ramdisk} ${kernel-size}
rootfstype=ext2
FS=C0300000
bootcmd=run load; bootm 0x21600000
rd=rootfs.ext2.gz
linux=linuximage.gz
myboot=bootm ${kernel}
ramdisk=21100000
bootargs=root=/dev/ram0 initrd=0x21100000,3000000 console=ttyS0,115200 mem=64M
rd-size=1d3a14
filesize=1248b3
fileaddr=32000000
gatewayip=10.10.10.1
netmask=255.255.255.0
ipaddr=10.10.10.83
serverip=10.10.10.15
kernel-size=1248b3
kernel=22200000
stdin=serial
stdout=serial
stderr=serial


Заканчивается все вот так:
Код
RAMDISK: Compressed image found at block 0
RAMDISK: ran out of compressed data
invalid compressed format (err=1)
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 92K
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #624: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0
Warning: unable to open an initial console.
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0


Больше всего меня пугает, то что концовка меняется... т.е. она не постоянно такая...

busybox собран статически:
Код
#arm-linux-uclibc-readelf -d busybox

В этом файле нет динамического раздела.
amw
Цитата(MTh @ Mar 21 2008, 10:04) *
Заканчивается все вот так:
Код
RAMDISK: Compressed image found at block 0
RAMDISK: ran out of compressed data
invalid compressed format (err=1)
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 92K
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #624: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0
Warning: unable to open an initial console.
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0

Это первое упоминание в логе про RAMDISK? Приведите чуть больше перед этими строками если есть что-то про RAMDISK.
Какой формат RAMDISK фактически? Какой формат поддерживает Вами собранное ядро?
Скорее всего образ корневухи (RAMDISK) initramfs, а ядро поддерживает только initrd. Или наоборот.
Включите в ядре поддержку всех форматов и приведите полный лог загрузки, если будутет та-же проблема.
andron86
Цитата(MTh @ Mar 21 2008, 09:04) *
Код
RAMDISK: Compressed image found at block 0
RAMDISK: ran out of compressed data
invalid compressed format (err=1)
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 92K
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #624: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0
Warning: unable to open an initial console.
EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0


Больше всего меня пугает, то что концовка меняется... т.е. она не постоянно такая...

busybox собран статически:


Хе, Хе это у тебя файловая система глючит. Помочь не могу, так как подход индивидуальный нужен, сам jffs2 пользую.
MTh
Цитата(amw @ Mar 21 2008, 11:16) *
Это первое упоминание в логе про RAMDISK? Приведите чуть больше перед этими строками если есть что-то про RAMDISK.
Какой формат RAMDISK фактически? Какой формат поддерживает Вами собранное ядро?
Скорее всего образ корневухи (RAMDISK) initramfs, а ядро поддерживает только initrd. Или наоборот.
Включите в ядре поддержку всех форматов и приведите полный лог загрузки, если будутет та-же проблема.


Спасибо ))
amw
Цитата(MTh @ Mar 21 2008, 10:04) *
ФС лежит по адресу 0х21100000, ядро по 0х22200000 т.е. между ними около 20 МБ (знаю что много, пока поставил так,чтобы отладить smile.gif )

Еще вспомнил.
Рекомендуется образ RAMDISK грузить в память по адресу MAX_MEM_ADDR - RAMDISK_SIZE.
Не нужно воспринимать буквально, но нужно следовать принципу.
Суть в том, что ядро распаковывается в нижние адреса при выключенном MMU (читай linux/Documentation/arm/Booting). Размер распакованного ядра будет не меньше чем размер файла vmlinux (посмотрите его размер). Если зазора не хватает - при распаковке ядра будет похерен образ RAMDISK (еще сжатый).
Потом распаковывается RAMDISK, но на этот момент MMU уже включен, и ядро может управлять распаковкой RAMDISK.
MTh
Итак, попытка сборки ядра 2.6.24 не удалась... вернее удалась, но ядро не видит RAM диск... никак....

Решили пока остановиться на 2.6.19, от него удалось добиться стабильной сборки и запуска. Один момент, при включении поддержки NAND Flash, компилер начал ругаться о необъявленных переменных (AT91_MATRIX_EBICSA и AT91_MATRIX_CS3A_SMC) в файле at91sam9260_devices.c я подсмотрел в хидерах на 9200 и сделал аналогично в 9260... Сборка проходит... но меня мучают подозрения: а будет ли работать? Проверить в железе пока возможности нет...
amw
Цитата(MTh @ Mar 25 2008, 02:27) *
Итак, попытка сборки ядра 2.6.24 не удалась... вернее удалась, но ядро не видит RAM диск... никак....

(AT91_MATRIX_EBICSA и AT91_MATRIX_CS3A_SMC)...
а будет ли работать? Проверить в железе пока возможности нет...

На сколько я могу судить это выводы CS и/или другие управляющие выводы для NAND.
Если да - то смотреть по схеме.
Вожможно так-же, что при конфигурировании ядра был неправильно или не полностью сконфигурирован MTD NAND.
slava2005
Цитата(MTh @ Mar 25 2008, 03:27) *
Итак, попытка сборки ядра 2.6.24 не удалась... вернее удалась, но ядро не видит RAM диск... никак....

Решили пока остановиться на 2.6.19, от него удалось добиться стабильной сборки и запуска.


Позволю себе небольшую ремарку. Юзайте ядро 2.6.22. На мой взгляд самое оно пока smile.gif
MTh
Цитата(slava2005 @ Mar 25 2008, 12:05) *
Позволю себе небольшую ремарку. Юзайте ядро 2.6.22. На мой взгляд самое оно пока smile.gif



Спасибо! Но это не раньше выходных.... кроме того опыта у меня маловато, хотя сидя без дела его не получишь....

Цитата
На сколько я могу судить это выводы CS и/или другие управляющие выводы для NAND.
Если да - то смотреть по схеме.
Вожможно так-же, что при конфигурировании ядра был неправильно или не полностью сконфигурирован MTD NAND.


Посмотрю. Спасибо....

Еще вопрос попутно :-[

Написал простенькую программку:
Код
# cat main.cpp
#include <iostream>
using namespace std;

int main()
{
    cout << "g++ compiler test\n";
    return 0;
}


Makefile:
Код
# cat Makefile
main: main.o
        $(CC) -o main main.o

main.o: main.cpp
        $(CC) -c main.cpp


Компилирую:
Код
# make ARCH=arm CC=arm-linux-uclibc-g++
arm-linux-uclibc-g++ -o main main.o
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__towupper_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtold_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strftime_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__nl_langinfo_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__newlocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__freelocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcsxfrm_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__iswctype_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__towlower_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtod_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__uselocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strcoll_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wctype_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strxfrm_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcsftime_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtof_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcscoll_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__duplocale'
collect2: ld returned 1 exit status
make: *** [main] Ошибка 1


Я что-то упустил при сборке? Хотя приложение (udp сервер) написанное на Си компилируется и работает "на УРА!"...
amw
Цитата(MTh @ Mar 25 2008, 11:25) *
Код
#include <iostream>
using namespace std;

int main()
{
    cout << "g++ compiler test\n";
    return 0;
}


Makefile:
Код
main: main.o
        $(CC) -o main main.o

main.o: main.cpp
        $(CC) -c main.cpp

В крне не верно!!!!
Переменная CC - это C компилятор.
Переменная CXX - это C++ компилятор.
Переменная CPP - это C препроцессор.
Эти перемнные проверяются make-ом. Используйте правильный синтаксис.
Наберите в командной строке вот это
Код
arm-linux-uclibc-g++ -v -o main main.cpp

Примечание: *-uclibc-* вообще-то расчитано на uClibc. Возможно используется glibc.
MTh
Цитата(amw @ Mar 25 2008, 12:42) *
В крне не верно!!!!
Переменная CC - это C компилятор.
Переменная CXX - это C++ компилятор.
Переменная CPP - это C препроцессор.
Эти перемнные проверяются make-ом. Используйте правильный синтаксис.
Наберите в командной строке вот это
Код
arm-linux-uclibc-g++ -v -o main main.cpp

Примечание: *-uclibc-* вообще-то расчитано на uClibc. Возможно используется glibc.


Вот что получается:
Код
# /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-g++ -o main /home/mamonth/g++_test/main.cpp -v
Reading specs from /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/specs
Configured with: /root/arm/argussoft/toolchain_build_arm_nofpu_small/gcc-3.4.6/configure --prefix=/usr/local/arm/gcc-3.4.6-uclibc --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=arm-linux-uclibc --enable-languages=c,c++,objc --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --enable-shared --enable-threads --enable-multilib --with-float=soft --enable-sjlj-exceptions --with-float=soft
Thread model: posix
gcc version 3.4.6
/usr/local/arm/gcc-3.4.6-uclibc/libexec/gcc/arm-linux-uclibc/3.4.6/cc1plus -quiet -v -D_GNU_SOURCE -D__ARM_ARCH_3__ /home/mamonth/g++_test/main.cpp -quiet -dumpbase main.cpp -msoft-float -auxbase main -version -o /tmp/ccXMa3qM.s
ignoring nonexistent directory "/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../include/c++/3.4.6
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../include/c++/3.4.6/arm-linux-uclibc
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../include/c++/3.4.6/backward
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/include
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/sys-include
End of search list.
GNU C++ version 3.4.6 (arm-linux-uclibc)
        compiled by GNU C version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/bin/as -mfpu=softfpa -mfpu=softfpa -o /tmp/ccUYu4iU.o /tmp/ccXMa3qM.s
/usr/local/arm/gcc-3.4.6-uclibc/libexec/gcc/arm-linux-uclibc/3.4.6/collect2 --eh-frame-hdr -dynamic-linker /lib/ld-uClibc.so.0 -X -m armelf_linux -p -o main /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/crt1.o /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/crti.o /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/crtbegin.o -L/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6 -L/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib /tmp/ccUYu4iU.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/crtend.o /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/crtn.o
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__towupper_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtold_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strftime_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__nl_langinfo_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__newlocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__freelocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcsxfrm_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__iswctype_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__towlower_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtod_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__uselocale'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strcoll_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wctype_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strxfrm_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcsftime_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__strtof_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__wcscoll_l'
/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/libstdc++.so: undefined reference to `__duplocale'
collect2: ld returned 1 exit status


Однако, если сделать вот так:
Код
#
#arm-linux-uclibc-g++ -c main.cpp -o main

И на выходе даже что-то получается...
Код
# arm-linux-uclibc-readelf -h main
Заголовок ELF:
  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
  Класс:                             ELF32
  Данные:                            дополнение до 2, little endian
  Версия:                            1 (current)
  OS/ABI:                            ARM
  Версия ABI:                        0
  Тип:                               REL (Перемещаемый файл)
  Машина:                            ARM
  Версия:                            0x1
  Адрес точки входа:                 0x0
  Начало заголовков программы:       0 (байт в файле)
  Начало заголовков программы:       940 (байт в файле)
  Флаги:                             0x200, GNU EABI, software FP
  Размер этого заголовка:            52 (байт)
  Размер заголовков программы:       0 (байт)
  Число заголовков программы:        0
  Размер заголовков раздела:         40 (байт)
  Число заголовков раздела:          16
  Индекс табл. строк загол. раздела: 13

однако это что-то потом не запускается... На целевой платформе выдается сообщение:
Код
# tftp -r main -g ХХ.ХХ.ХХ.ХХ
# chmod +x main
# ./main
./main: ./main: 1: Syntax error: word unexpected (expecting ")")
MTh
Вопрос снимается... проблема с компилятором....
amw
Цитата(MTh @ Mar 26 2008, 05:04) *
Вопрос снимается... проблема с компилятором....

А какая?


Код
/usr/local/arm/gcc-3.4.6-uclibc/libexec/gcc/arm-linux-uclibc/3.4.6/collect2 --eh-frame-hdr -dynamic-linker /lib/ld-uClibc.so.0 -X -m armelf_linux -p -o main /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/crt1.o /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib/crti.o /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/crtbegin.o -L/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6 -L/usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/../../../../arm-linux-uclibc/lib /tmp/ccUYu4iU.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/gcc-3.4.6-uclibc/lib/gcc/arm-linux-uclibc/3.4.6/crtend.o

Проанализируйте на предмет наличия используемых библиотек (опции -l) в указанных путях (опции -L). А также соответствие форматов библиотек (поскольку --enable-multilib). Несколько смущает использование --enable-languages=c,c++,objc, у меня с objc были конфликты.
MTh
Проблема как раз с баблиотеками для С++ (libsdtc++.so)... компилятор напрочь отказывается видеть процедуры и функции включенные в стандартные инклуды... в чем причина - понять не могу...
amw
Цитата(MTh @ Mar 26 2008, 15:50) *
Проблема как раз с баблиотеками для С++ (libsdtc++.so)... компилятор напрочь отказывается видеть процедуры и функции включенные в стандартные инклуды... в чем причина - понять не могу...

А в самой библиотеке они есть?
Судя по ошибке - нет. Тогда надо искать, в какой они библиотеке и подключить принудительно ее.
MTh
Цитата(amw @ Mar 26 2008, 19:02) *
А в самой библиотеке они есть?
Судя по ошибке - нет. Тогда надо искать, в какой они библиотеке и подключить принудительно ее.


Есть подозрение что компилер не собрался правильно...
MTh
Цитата(slava2005 @ Mar 25 2008, 12:05) *
Позволю себе небольшую ремарку. Юзайте ядро 2.6.22. На мой взгляд самое оно пока smile.gif


А позвольте поинтересоваться, если Вы используете buildroot то какой версии? Если нет, то какие порекомендуете остальные пакеты (binutils, uClibc и прочее).

Трабл в том, что в каждой версии пакета свои заморочки... с каким-то я справился, с какими-то не смог... Вот и хотелось бы с минимумом проблем, но это линукс, тут такое бывает редко ))
3.14
Поделитесь плиз живой корневухой для 9260.
slava2005
Цитата(3.14 @ Apr 8 2008, 23:34) *
Поделитесь плиз живой корневухой для 9260.


А что именно интересует ?

Например этот проект успешно стартует с этим - это Дебиан

Цитата(MTh @ Mar 27 2008, 09:34) *
А позвольте поинтересоваться, если Вы используете buildroot то какой версии? Если нет, то какие порекомендуете остальные пакеты (binutils, uClibc и прочее).

Трабл в том, что в каждой версии пакета свои заморочки... с каким-то я справился, с какими-то не смог... Вот и хотелось бы с минимумом проблем, но это линукс, тут такое бывает редко ))


Buidroot не использую. Я сторонник полновесных дистрибутивов (см мою тему про Дебиан).
3.14
Спасибо, уже разобрался ...
igrok213
Проблема с той же платой sad.gif

Переменные среды:
Цитата
bootdelay=3
baudrate=115200
ethaddr=3e:36:65:ba:6f:be
filesize=11fd70
fileaddr=20000000
netmask=255.255.255.0
ipaddr=192.168.1.22
serverip=192.168.1.8
bootcmd=cp.b 0xD0030000 0x21500000 0x0011FD70; cp.b 0xD0300000 0x21100000 0x00400000; bootm 0x21500000
stdin=serial
stdout=serial
stderr=serial

при них он нормально грузит линукс из флеша.
Пытаюсь использовать тоже ядро, но другую корневую, для этого делаю:
Цитата
tftp 0х21100000 /tftpboot/rootfs
setenv bootcmd 'cp.b 0xD0030000 0x21500000 0x0011FD70; bootm 0x21500000'
boot

После этого идёт процесс загрузки ядра и в конце выводится вот такая надпись:
Цитата
List of all partitions:
No filesystem could mount root, tried: ext2 cramfs msdos vfat
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet


Где я неправ? Что может быть? sad.gif
slava2005
Цитата(igrok213 @ Apr 10 2008, 17:29) *
Проблема с той же платой sad.gif

Переменные среды:

при них он нормально грузит линукс из флеша.
Пытаюсь использовать тоже ядро, но другую корневую, для этого делаю:

После этого идёт процесс загрузки ядра и в конце выводится вот такая надпись:
Где я неправ? Что может быть? sad.gif


Элементарно smile.gif

Код
tftp 0х21100000 /tftpboot/rootfs
setenv bootcmd 'cp.b 0xD0030000 0x21500000 0x0011FD70; bootm 0x21500000'
boot


А где копирование рутфс в память ?

Тщательнее надо smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.