Итак, перечитав кучу веток на форуме, с горем пополам разобрался с внутренним устройством платы, где что хранится, как загружается, как пересобрать загрузчики и ядро и, главное, писать проги под этого "зверя" и возвращать поломаную прошивку назад )) .
Возник вопрос: "А как же нам "вкрутить" свою программу в dataflesh?"
По моим, сугубо личным представлениям, для решения этого вопроса необходимо должным образом пересобрать корневую файловую систему.
Вчитываясь тут http://dmilvdv.narod.ru/AT91SAM9260/index.html?linux.html , я так и не понял как участвуют бинарники программ, которые я хочу залить на плату при сборке.
Подскажите пожалуйста, кто как с этим борется и желательно поподробнее, от начала до конца, так сказать )). спасибо.
допустим у вас есть бинарный исполнимый файл для АРМа
загружаем линукс на виртуальной машине от Павла
логинимся
переходим в каталог /home/user/src/rootfs
изучаем там два полезных скрипта
- mount_ramdisk - берет файл ramdisk.img и монтирует его в каталог ./mnt в виде развернутой структуры диска
в корень ./mnt или любой понравившийся каталог копируем свою программу
- umount_ramdisk демонтирует новую корневую, сжимает и копирует в /tftpboot/rootfs
пара советов - очень большой образ rootfs может не распаковаться при загрузке
ну и не забыть про права на запуск программы.. :)
Я так и думал что в этих скриптах собака порылась. Спасибо.
Я так полагаю этот ключ к вопросу о компиляции программ, если да то это я уже осмыслил.
А какой размер rootfs является гарантированно допустимым и работает?
И раз уж пошла дискуссия о размере файловой системы, как перенести на USB flash или MMC карту, так как на моей плате например нету NAND flash, как выяснилось.
Я понимаю, что одним форматированием в файловую систему ext2 не обойтись, необходимо пересобирать ядро. Опять же пролистывая форум и вышеуказанный "учебник" не осознал пока, где меняется местонахождение файловой системы, её поддержка и тип.
А можно использовать компилятор, которым buildroot собирает корневую систему, тогда -static не обязателен. Этот компилятор располагается в <папка_buildroot>/output/staging/usr/bin/. Или наоборот заставить buildroot использовать ваш компилятор.
Как запуститься с SD/USB Jury093 описывает в теме по установке Debian. Поддержка ext2 в ядре уже есть, раз у вас работает initrd.
Вроде еще придется сделать владельцем файлов корневухи root'а, я так делаю, но может можно как-то по-другому.
к сожалению, мне прямо сейчас не проверить ниженаписанное, могу лишь общий план действий:
подмонтируйте свой накопитель USB-flash или SD/MMC
форматируете накопитель - флешку или SD в ФС ext/ext3
запустите скрипт mount_ramdisk
содержимое ./mnt копируете на носитель с целью получить дерево корневой системы на накопителе
запускаете скрипт umount_ramdisk, чтобы корректно закрыть образ ramdisk.img
отмонтируйте накопитель
теперь ядро
запуск конфигуратора ./make_menuconfig
подключаете поддержку нужной ФС ext2/ext3
подключаете поддержку нужного интерфейса накопителя USB/SD
откорректировать Kernel command line к виду
например у меня для usb-накопителя строка такая: console=ttyS0,115200n8 rw rootdelay=10 mem=64M root=/dev/sda1
для SD-карточки такая: console=ttyS0,115200n8 rw rootwait mem=64M root=/dev/mmcblk0p1
32/64 - свое число мегабайт
выйти из конфига с сохранением
запустить сборку ядра ./make_kernel
по идее, должно загрузиться, если что присутствующие поправят
обязательно сделайте копии рабочих файлов, чтоб была возможность откатиться назад..
update о! уже поправляют :)
"..и опыт - сын ошибок трудных.." - если честно - я не знаю, тут похожее обсуждалось и не раз, ищите
Попробовал - не работает)))
Вообщем походу всё включено.
Поменял только cmd line CONFIG_CMDLINE="console=ttyS0,115200n8 rw rootwait mem=32M root=/dev/mmcblk0p1"
Меня смутило root=/dev/mmcblk0p1 - откуда это и как это определить?
На форуме мелькнула фраза о том, что SD иногда и на /dev/sda1 подцепляется, может в этом и дело?!
При загрузке вот такая картина
Попробовал собрать ядро для загрузки с USB флешки.
Исправил cmdline /dev/sda1
Подсоединив sd карту - то же самое что и до этого - висим
Всунув usb флешку с rootfs ситуация немножко изменилась
Waiting for root device /dev/sda1...
scsi 0:0:0:0: Direct-Access JetFlash Transcend 2GB 8.07 PQ: 0 ANSI: 2
sd 0:0:0:0: [sda] 3944446 512-byte hardware sectors (2020 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] 3944446 512-byte hardware sectors (2020 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Assuming drive cache: write through
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI removable disk
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 108K
Warning: unable to open an initial console.
Значит почему-то половина файлов не копируются из подмонтированного /mnt, что сейчас, что до этого, ошибка при копировании, это нормально?
И возможно чтото с правами доступа.
И ещё - питание от usb.
к сожалению инета у меня нет - пробегам мимо компа с ним
в сообщение 7 - похоже не включена поддержка SD в ядре
в логе про SD ничего не видно
в сообщение 8 есть фраза из лога unable to open an initial console - есть соответствующий тред - надо в /dev заранее создать console и проверить там же null