Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux + Buildroot
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
JeDay
Добрый день коллеги.
Имеется плата SK-AT91SAM9XE512-S3E, собраное ядро Linux.
Buildroot собирался на базе конфига с сайта: http://dmilvdv.narod.ru/AT91SAM9260/index.html
Конфиг busybox по умолчанию, версия 1.17.4. После загрузки выводится приглашение
Код
Welcome to Buildroot
buildroot login:


после ввода root получаю символ "#", казалось бы можно вводить команды, но банальная LS не работает.
После нажатия ENTER получаю новый символ решетки..
Думал что с busybox проблемы, но ведь init то отрабатывает нормально...
Ниже инфа по busybox:

Код
# busybox
BusyBox v1.17.4 (2010-12-23 12:24:48 MSK) multi-call binary.
Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

age: busybox [function] [arguments]...
   or: function [arguments]...

    BusyBox is a multi-call binary that combines many common Unix
    utilities into a single executable.  Most people will create a
    link to busybox for each function they wish to use and BusyBox
    will act like whatever it was invoked as.

Currently defined functions:
    [, [[, addgroup, adduser, ar, arping, ash, awk, basename, bunzip2,
    bzcat, cat, catv, chattr, chgrp, chmod, chown, chroot, chrt, chvt,
    cksum, clear, cmp, cp, cpio, crond, crontab, cut, date, dc, dd,
    deallocvt, delgroup, deluser, devmem, df, diff, dirname, dmesg, dnsd,
    dnsdomainname, dos2unix, du, dumpkmap, echo, egrep, eject, env,
    ether-wake, expr, false, fdflush, fdformat, fgrep, find, fold, free,
    freeramdisk, fsck, fuser, getopt, getty, grep, gunzip, gzip, halt,
    hdparm, head, hexdump, hostid, hostname, hwclock, id, ifconfig, ifdown,
    ifup, inetd, init, insmod, install, ip, ipaddr, ipcrm, ipcs, iplink,
    iproute, iprule, iptunnel, kill, killall, killall5, klogd, last,
    length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap,
    logger, login, logname, losetup, ls, lsattr, lsmod, lspci, lsusb,
    lzcat, lzma, makedevs, md5sum, mdev, mesg, microcom, mkdir, mkfifo,
    mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, mt, mv,
    nameif, netstat, nice, nohup, nslookup, od, openvt, passwd, patch,
    pidof, ping, pipe_progress, pivot_root, poweroff, printenv, printf, ps,
    pwd, rdate, readlink, readprofile, realpath, reboot, renice, reset,
    resize, rm, rmdir, rmmod, route, run-parts, runlevel, sed, seq,
    setarch, setconsole, setkeycodes, setlogcons, setsid, sh, sha1sum,
    sha256sum, sha512sum, sleep, sort, start-stop-daemon, strings, stty,
    su, sulogin, swapoff, swapon, switch_root, sync, sysctl, syslogd, tail,
    tar, tee, telnet, test, tftp, time, top, touch, tr, traceroute, true,
    tty, udhcpc, umount, uname, uniq, unix2dos, unlzma, unxz, unzip,
    uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch,
    watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat, yes, zcat



И еще вопрос.
После первой прошивки rootfs.jffs2 в NAND первый запуск проходит без ошибок.
А после первой хардварной перезагрузки, появляются дефекты файловой системы.
Выводится следующее:

Код
Empty flash at 0x01227854 ends at 0x01228000
Empty flash at 0x01230804 ends at 0x01231000
VFS: Mounted root (jffs2 filesystem) on device 31:0.
Freeing init memory: 124K
...
...
JFFS2 notice: (360) check_node_data: wrong data CRC in data node at 0x012307b8: read 0x186b259f, calculated 0xef3d92a5.
...
Welcome to Buildroot
buildroot login:


Подскажите плиз как решить первую и вторую проблемы.
По поводу дефекта ФС. Исправит ли ситуацию переход на YAFFS2?
dch
Цитата(JeDay @ Dec 23 2010, 16:51) *
после ввода root получаю символ "#", казалось бы можно вводить команды, но банальная LS не работает.

Она у Вас есть, те когда Вы собираете образ файловой системы, должен формироваться каталог где у Вас
эти командочки лежат, из которого собирается образ, который Вы прошиваете в флэш, ls --help пробовали?
JeDay
Да они формируются как симлинки на бизибокс.
Вот что хелп выдает:
Код
# ls --help
BusyBox v1.17.4 (2010-12-23 12:24:48 MSK) multi-call binary.

Usage: ls [-1AacCdeFilnpLRrSsTtuvwxXhk] [FILE]...

List directory contents

Options:
    -1    List in a single column
    -A    Don't list . and ..
    -a    Don't hide entries starting with .
    -C    List by columns
    -c    With -l: sort by ctime
    --color[={always,never,auto}]    Control coloring
    -d    List directory entries instead of contents
    -e    List full date and time
    -F    Append indicator (one of */=@|) to entries
    -i    List inode numbers
    -l    Long listing format
    -n    List numeric UIDs and GIDs instead of names
    -p    Append indicator (one of /=@|) to entries
    -L    List entries pointed to by symlinks
    -R    Recurse
    -r    Sort in reverse order
    -S    Sort by file size
    -s    List the size of each file, in blocks
    -T N    Assume tabstop every N columns
    -t    With -l: sort by modification time
    -u    With -l: sort by access time
    -v    Sort by version
    -w N    Assume the terminal is N columns wide
    -x    List by lines
    -X    Sort by extension
    -h    List sizes in human readable format (1K 243M 2G)

# ls -l
total 0
#


Т.е. вроди как все хорошо, только ниодного файла не выводится. Вот почему LS не видит файлов меня и смущает 05.gif
S_agent
Цитата(JeDay @ Dec 23 2010, 16:55) *
Код
# ls -l
total 0
#


Т.е. вроди как все хорошо, только ниодного файла не выводится. Вот почему LS не видит файлов меня и смущает 05.gif


А Вы на всяк случай попробуйте
Код
ls /

или
Код
ls /bin

а то вдруг Вы случайно в /root заскочили,- а там пусто wink.gif

а по второй проблеме - делайте readonly rootfs рамдиском/инитрамфс, темп/лог итд каталоги монтируйте как tmpfs, а конфиги подключайте как mtd раздел с jffs2
и тогда не будет у Вас проблем с некоректным выключением железки без предупреждения sm.gif
JeDay
Цитата
а то вдруг Вы случайно в /root заскочили,- а там пусто wink.gif

Действительно был в пустой директории. Я ожидал что по умолчанию в корневой раздел попаду. yeah.gif

Цитата
а по второй проблеме - делайте readonly rootfs рамдиском/инитрамфс, темп/лог итд каталоги монтируйте как tmpfs, а конфиги подключайте как mtd раздел с jffs2
и тогда не будет у Вас проблем с некоректным выключением железки без предупреждения sm.gif

Спасибо буду курить доки как это сделать.
А если я допустим создам раздел по указанному выше рецепту... после аварийного выключения питания как я понимаю все равно будут ошибки только в пользовательских файлах или логах?

Еще в догонку хотел спросить. После компиляции Buildroot (тулчейн и ФС) как правильно удалять сборку корневухи не удаляя при этом скомпиленные объектники?
make clean удалит все полностью..
Я попробовал грохнуть содержимое директорий /output/target и /output/images после чего у меня make вываливается с ошибкой.

Спасибо.
S_agent
Цитата(JeDay @ Dec 24 2010, 12:28) *
А если я допустим создам раздел по указанному выше рецепту... после аварийного выключения питания как я понимаю все равно будут ошибки только в пользовательских файлах или логах?

да, именно так, и еще гляньте на cramfs , эт тоже вариант
Цитата
Еще в догонку хотел спросить. После компиляции Buildroot (тулчейн и ФС) как правильно удалять сборку корневухи не удаляя при этом скомпиленные объектники?
make clean удалит все полностью..
Я попробовал грохнуть содержимое директорий /output/target и /output/images после чего у меня make вываливается с ошибкой.
Спасибо.

просто удалите output/build/
или make proftpd-clean для клина и деинсталяции конкретного пакета
JeDay
Цитата
просто удалите output/build/
или make proftpd-clean для клина и деинсталяции конкретного пакета

Если я не удалю раздел /output/target, то по идее в новый образ rootfs.jffs2 попадут пакеты с предыдущего когфига, которые в новом я мог исключить.
Пробовал удалить все каталоги в output кроме toolchain, после чего у меня Buildroot перестал собираться..

Как правильно "очищать" Buildroot чтобы не перекомпилировать toolchain каждый раз и по возможности пакеты с предыдущей сборки?
~phase
сколько не боролся с такой проблемой к сожалению, только через make clean + make menuconfig + make busybox-menuconfig + make, так собирает все правильно. если другие манипуляции проводить, то или криво собирает или не выкидывает пакеты с проэкта =(
S_agent
еще можно попробовать удалить output/build/.root & /output/target , сделать для каждого пакета клин и пускать сборку,
возможно первых пару раз она заругается, но должно с третьего собраться wink.gif
faa
Цитата(JeDay @ Dec 26 2010, 14:03) *
Как правильно "очищать" Buildroot чтобы не перекомпилировать toolchain каждый раз и по возможности пакеты с предыдущей сборки?


ЕМНИП, make clean
Можно еще сказать make distclean. Но тогда надо забекапить все закачанные при сборке исходники (а то будет качать по новой, если не найдет), почистить, а потом их снова подложить.
А toolchain собрать один раз, положить сбоку. И казать buildroot, что будем пользовать внешний toolchain.
Ну и посмотреть на сами скрипты buildroot-а на предмет их правильности, особенно где clean и distclean - там тоже косяки могут быть.
S_agent
Цитата(faa @ Dec 27 2010, 13:22) *
ЕМНИП, make clean
Можно еще сказать make distclean. Но тогда надо забекапить все закачанные при сборке исходники (а то будет качать по новой, если не найдет), почистить, а потом их снова подложить.
А toolchain собрать один раз, положить сбоку. И казать buildroot, что будем пользовать внешний toolchain.
Ну и посмотреть на сами скрипты buildroot-а на предмет их правильности, особенно где clean и distclean - там тоже косяки могут быть.

действительно, екстернал это как вариант, но его нужно совсем сбокуsm.gif положить дабы не потереть при клине

а еще можно глянуть в сторону http://old.nabble.com/new-way-to-rebuld-ju...td30195561.html
там правда более поздний буилдрут используется, но идею можно захватить
JeDay
Кстати хорошая идея его родной тулчейн положить отдельно и указать как внешний.
Пробовал в качестве внешнего указывать crosstoll-NG, которым пользуюсь для сборки ядра. Но в нем по умолчанию конфиг для uclibc неполный и некоторые компоненты с Buildroot не собираютсяsad.gif

Цитата
сколько не боролся с такой проблемой к сожалению, только через make clean + make menuconfig + make busybox-menuconfig + make, так собирает все правильно. если другие манипуляции проводить, то или криво собирает или не выкидывает пакеты с проэкта =(

Это правда. В файле TODO так и написано, что в будущем есть план сделать слежение за пакетами которые уже в /target лежат и выкидывать ненужные, но пока это не работает.
S_agent
да, еще можете собрать openwrt, у него после сборки можно найти SDK, в котором есть тулчейн и библы
и его можно подключить в билдрут как экстернал, или использовать родную сборку рута от опенврт при нужности со своими правками
~phase
Цитата(S_agent @ Dec 27 2010, 17:09) *
да, еще можете собрать openwrt, у него после сборки можно найти SDK, в котором есть тулчейн и библы
и его можно подключить в билдрут как экстернал, или использовать родную сборку рута от опенврт при нужности со своими правками

При пересборке некоторых пакетов иногда нужно пересобирать тулчейн.
sasamy
Цитата(~phase @ Dec 30 2010, 11:19) *
При пересборке некоторых пакетов иногда нужно пересобирать тулчейн.


Интересно - зачем sm.gif
~phase
Цитата(sasamy @ Jan 12 2011, 00:36) *
Интересно - зачем sm.gif

Потому как некоторые пакеты/тулзы/либы и тп.требуют определенных опций компилятора и собрать их без этих функций не получится, по этому устанавливаем соответствующие опции в настройках компилятора, а далее собираем нужные пакеты/тулзы/либы. при этом нужно пересобрать сам компилятор. make clean удаляет всё и компиль в том числе.
PS геморно, но другого варианта решения я не нашел, что б не использовать make clean. Хотя если фс небольшая времени у меня это занимает 20-30мин.
sasamy
Цитата(~phase @ Mar 27 2011, 11:31) *
Потому как некоторые пакеты/тулзы/либы и тп.требуют определенных опций компилятора и собрать их без этих функций не получится, по этому устанавливаем соответствующие опции в настройках компилятора, а далее собираем нужные пакеты/тулзы/либы. при этом нужно пересобрать сам компилятор. make clean удаляет всё и компиль в том числе.
PS геморно, но другого варианта решения я не нашел, что б не использовать make clean. Хотя если фс небольшая времени у меня это занимает 20-30мин.


Все эти опции есть изначально - никто не мешает их выбрать сразу и не пересобирать кросскомпилятор потом, к тому же в последних версиях есть хорошая поддержка внешних кросскомпиляторов, включая codesourcery и сборку crosstool-ng. В общем случае пересобирать кросскомпилятор нет никакой необходимости.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.