Jump to content

    
Sign in to follow this  
JeDay

Linux + Buildroot

Recommended Posts

Добрый день коллеги.

Имеется плата 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?

Share this post


Link to post
Share on other sites
после ввода root получаю символ "#", казалось бы можно вводить команды, но банальная LS не работает.

Она у Вас есть, те когда Вы собираете образ файловой системы, должен формироваться каталог где у Вас

эти командочки лежат, из которого собирается образ, который Вы прошиваете в флэш, ls --help пробовали?

Share this post


Link to post
Share on other sites

Да они формируются как симлинки на бизибокс.

Вот что хелп выдает:

# 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:

Share this post


Link to post
Share on other sites
# ls -l
total 0
#

 

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

 

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

ls /

или

ls /bin

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

 

а по второй проблеме - делайте readonly rootfs рамдиском/инитрамфс, темп/лог итд каталоги монтируйте как tmpfs, а конфиги подключайте как mtd раздел с jffs2

и тогда не будет у Вас проблем с некоректным выключением железки без предупреждения :)

Share this post


Link to post
Share on other sites
а то вдруг Вы случайно в /root заскочили,- а там пусто wink.gif

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

 

а по второй проблеме - делайте readonly rootfs рамдиском/инитрамфс, темп/лог итд каталоги монтируйте как tmpfs, а конфиги подключайте как mtd раздел с jffs2

и тогда не будет у Вас проблем с некоректным выключением железки без предупреждения sm.gif

Спасибо буду курить доки как это сделать.

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

 

Еще в догонку хотел спросить. После компиляции Buildroot (тулчейн и ФС) как правильно удалять сборку корневухи не удаляя при этом скомпиленные объектники?

make clean удалит все полностью..

Я попробовал грохнуть содержимое директорий /output/target и /output/images после чего у меня make вываливается с ошибкой.

 

Спасибо.

Share this post


Link to post
Share on other sites
А если я допустим создам раздел по указанному выше рецепту... после аварийного выключения питания как я понимаю все равно будут ошибки только в пользовательских файлах или логах?

да, именно так, и еще гляньте на cramfs , эт тоже вариант

Еще в догонку хотел спросить. После компиляции Buildroot (тулчейн и ФС) как правильно удалять сборку корневухи не удаляя при этом скомпиленные объектники?

make clean удалит все полностью..

Я попробовал грохнуть содержимое директорий /output/target и /output/images после чего у меня make вываливается с ошибкой.

Спасибо.

просто удалите output/build/

или make proftpd-clean для клина и деинсталяции конкретного пакета

 

Share this post


Link to post
Share on other sites
просто удалите output/build/

или make proftpd-clean для клина и деинсталяции конкретного пакета

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

Пробовал удалить все каталоги в output кроме toolchain, после чего у меня Buildroot перестал собираться..

 

Как правильно "очищать" Buildroot чтобы не перекомпилировать toolchain каждый раз и по возможности пакеты с предыдущей сборки?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

еще можно попробовать удалить output/build/.root & /output/target , сделать для каждого пакета клин и пускать сборку,

возможно первых пару раз она заругается, но должно с третьего собраться ;)

Share this post


Link to post
Share on other sites
Как правильно "очищать" Buildroot чтобы не перекомпилировать toolchain каждый раз и по возможности пакеты с предыдущей сборки?

 

ЕМНИП, make clean

Можно еще сказать make distclean. Но тогда надо забекапить все закачанные при сборке исходники (а то будет качать по новой, если не найдет), почистить, а потом их снова подложить.

А toolchain собрать один раз, положить сбоку. И казать buildroot, что будем пользовать внешний toolchain.

Ну и посмотреть на сами скрипты buildroot-а на предмет их правильности, особенно где clean и distclean - там тоже косяки могут быть.

 

Share this post


Link to post
Share on other sites
ЕМНИП, make clean

Можно еще сказать make distclean. Но тогда надо забекапить все закачанные при сборке исходники (а то будет качать по новой, если не найдет), почистить, а потом их снова подложить.

А toolchain собрать один раз, положить сбоку. И казать buildroot, что будем пользовать внешний toolchain.

Ну и посмотреть на сами скрипты buildroot-а на предмет их правильности, особенно где clean и distclean - там тоже косяки могут быть.

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

 

а еще можно глянуть в сторону http://old.nabble.com/new-way-to-rebuld-ju...td30195561.html

там правда более поздний буилдрут используется, но идею можно захватить

Share this post


Link to post
Share on other sites

Кстати хорошая идея его родной тулчейн положить отдельно и указать как внешний.

Пробовал в качестве внешнего указывать crosstoll-NG, которым пользуюсь для сборки ядра. Но в нем по умолчанию конфиг для uclibc неполный и некоторые компоненты с Buildroot не собираются:(

 

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

Это правда. В файле TODO так и написано, что в будущем есть план сделать слежение за пакетами которые уже в /target лежат и выкидывать ненужные, но пока это не работает.

Share this post


Link to post
Share on other sites

да, еще можете собрать openwrt, у него после сборки можно найти SDK, в котором есть тулчейн и библы

и его можно подключить в билдрут как экстернал, или использовать родную сборку рута от опенврт при нужности со своими правками

Share this post


Link to post
Share on other sites
да, еще можете собрать openwrt, у него после сборки можно найти SDK, в котором есть тулчейн и библы

и его можно подключить в билдрут как экстернал, или использовать родную сборку рута от опенврт при нужности со своими правками

При пересборке некоторых пакетов иногда нужно пересобирать тулчейн.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this