Надо не забыть что sam-ba на плате "запустится" только если не найдет прогу на DataFlash - надо перед подачей питания разомкнуть J6, потом подать питание и замкнуть снова. При этом в терминале (rs-232) появится что то типа RomBOOT>
Спасибо всем ответившим, очень помогает этот форум.
Сам я с линуксом на уровне пользователя, с ядрами и прочими внутренностями не работал никогда.
Почитал про большой линукс, появились вопросы по маленькому.
Как я уже понял на плате сидят 2 загрузчика (bootstrap, u-boot), ядро и образ корневой файловой системы.
Большая просьба пояснить что есть что.
Я понимаю что для гуру ответы наверное очевидны, но поиск в гугле займёт гораздо больше чем 15 минут вашего времени,
да и с наскока получилось найти весьма поверхностные знания
1. В двух словах что есть что?
vmlinux
zlinux
linux.bin
Судя по папке tftpboot
zlinux как раз и является тем самым ядром коорое нужно заливать
на плату
2.Вот листинг директории rootfs из /home/user/src
mkimage - видимо создает ramdisk.img - из чего?
mount_ramdisk - с этим понятно
umount_ramdisk - с этим понятно
starterkit писал
6) Коренвая ФС создается в "ручную" (без builtrootfs), лежит в /home/user/src/rootfs.
Порядок манипуляций:
а)запускаете скрипт mount_ramdisk добавляете/удаляете необходимое,
б)запускаете скрипт umount_ramdisk. Утилиты для коревой ФС (busybox ...) лежат /home/user/utils
ramdisk.img - образ корневой ФС, откуда он получается? Неужели всё вручную пишется, и структура папок, и скрипты и т.п.?
ramdisk.orig - ?
ramdisk.gz - ? разархивировал, полученный бинарник не совпадает ни с одним из ramdisk*
rootfs - ?
3. Заливается это дело в dataflash я полагаю по отдельности
Это адреса в ram куда их копирут загрузчики. Старт происходит следующим образом:
1 стартует программа самого at91sam9260 - она ищет устройства с которых можно загрузиться или в конце концов если нет таких - samba (подробней - даташит раздел 13, стр 75)
2 в нашем случае она находит валидный загрузчик на dataflash (условия валидности - считывание первых 28 байт и проверка правильности векторов прерываний за исключением №6 где должен быть размер загрузчика в байтах) под названием boostrap, загружает его во внутреннюю sram и передает ему управление
3 bootstrap переключает осциллятор на высокоскоростной режим, настраивает plla, pllb, master clock, processor clock, контроллер внешней sdram, dbgu, gpio, spi - dataflash, копирует с определенного в его конфиге адреса из dataflash программу по определенному в конфиге адресу в ram - теперь уже адресуется весь доступный объем и передает ей управление (в нашем случае это u-boot)
4 u-boot любым доступным методом (tftp, dataflash, nand, usb и тд) получает ядро копирует его по определнному в конфиге адресу, отключает кеши и прерывания и запускает ядро.
Состояние dataflash есть в первом посте в сообщении u-boot
Если из этих адресов вычесть Logical address: 0xC0000000 - то во второй колонке получите физические смещения в dataflash.
Только эта таблица немного неправильная :) Там 5 разделов
1 bootstrap
2 u-boot env
3 u-boot
4 kernel
5 initrd image (rootfs)
sasamy, спасибо большое.
Я правильно понимаю что если я хочу залить ядро то мне нужно записать его по конкретному адресу во флэшку, например самбой?
с ramdisk вроде разобрался чуть чуть только не пойму какие параметры забить для mkimage, разные rootfs получаются на выходе, хоть размер тот же(по сравнению с тем что идёт на диске).
А что есть u-boot-env?
Да правильно. Хотя если вы легких путей не ищите - можно записать куда угодно :) Этот адрес указан в конфиге u-boot в его командах для загрузки (в конфиге, они созданы автором). Конфиг находится тут
u-boot-1.1.5/include/configs/at91sam9260ek.h
Вот тут хоошо видно
boot_df=cp.b c0038000 20400000 170000
u-boot копирует ядро (вернее кусок памяти в котором ядро должно уместиться) с физического адреса 0х38000 датафлэша по адресу в ram 20400000 (размер 0х170000 байт)
Это место для переменных окружения самого u-boot hint: по идее нафик не нужно и на самом деле пропадает зря если вы после прошивки u-boot не сделаете saveenv о чем и говорит u-boot в первом посте этого треда:
*** Warning - bad CRC, using default environment
он не читает оттуда ничего а берет то что зашито у него в теле при сборке. Если после прошивки в командной строке u-boot набрать saveenv то он их туда запишет, при следующей загрузке будет читать уже оттуда и сообщение об ошибке пропадет. Поэтому в переменные коружения можно переопределить-переписать-написать новые соотвественно с адресами какие душе угодны :)
Это есть в скриптах автора в rootfs - umount_ramdisk и помоему никаких mkimage для rootfs не требуется (просто gzip).
Да, действительно, проглядел.
Спасибо огромнейшее, теперь всё стало намного понятнее.
Скажите а файловую систему ядро само тащит с флэшки в память или же в ядро зашит какой то минимум?
Просто скопировал u-boot'ом в память одно ядро и всё равно всё запустилось и файловая система есть,
затем загрузил ядро а файловую систему залил по ком порту, загрузилась моя файловая система.
Не совсем понял о чем речь. Флээш она разная - если dataflash и речь идет о том варианте загрузки который у автора - то имидж ram-диска в ram копирует загрузчик (u-boot в данном случае) а ядру передаются через строку парметров параметры рамдиска - адрес в рам и размер а также что root нужно искать на рамдиске (в конфиге ядра - параметр CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21100000,0x500000 mem=32M console=ttyS0,115200")
Если речь об usb,mmc,sd флэше то в этом случае ядру передается параметр root=/dev/sda1, /dev/mmcblk0p1 например - это говорит ядру где нужно искать корневую фс и оно ее монтирует само.
Вслучае рамдиска параметры можно передать и из загрузчика - там есть специальные тэги initrd2 и ramdisk, в данном случае он не используется а парметры передаются через командную строку ядра.
дада, я говорил про датафлэш что на плате.
Я загрузил ядро в оперативную память, а рамдиск не загружал,
потмо сделал bootm 20400000 и всё загрузилось, хотя я ожидал что не загрузится потому что рамдиск я не подгружал в память.
Вот и не пойму как же оно загрузилось...
Про mmc спасибо, хочется сделать ФС на mmc, а то все чем я привык пользоваться отсутствует и не убирается в dataflash,
хотя наверное проще будет купить ethernet кабель.
А кто нибудь знает подойдёт только кросс или обычный тоже можно?