Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
MiniMax (Guest)
Добавлено 21.11.2008 15:42 Редактировалось 21.11.2008 15:42 Сообщение: 21
MiniMax (Guest)

Собрал U-boot, Linux ядро и RAMdisk.
Все запустилось. Консоль работает :-)
Но хотелось-бы прояснить некоторые моменты.

U-Boot распаковывает ядро с адреса 0x20008000.
RAMDISK ( gzip сжатие) image находится по адресу 0x20410000.
Ядру передаются следующие параметры
root=/dev/ram rw initrd=0x20410000,0x800000 ramdisk_size=8192 console=ttyS1,115200 mem=32M

Ядро находит запакованный RAMDISK и монтирует

RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 120K

Теперь сами вопросы :-)
1. С какого адреса Linux распаковывает сжатый RAMDISK ?
2. Где у Linux находится стек? Ядро знает, что памяти 32M из строки аргументов.
Но откуда оно знает где вершина стека ?
3. Linux использует стек, который U-boot ему оставил в наследство?
Или само ядро инициализирует стек ?
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 21.11.2008 15:49 Редактировалось 21.11.2008 15:49 Сообщение: 22
starterkit (Guest)

Извините, я не настолько изощрен в потрохах ядра чтобы ответить на Ваши вопросы. Полагаю, что ядро само инициализирует стек (скорее целую тучу стеков, ведь по идее каждый процес имеет свой стек), адрес распаковки рамдиска тоже скорее всего сама рассчитывает.
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 21.11.2008 16:36 Редактировалось 21.11.2008 16:36 Сообщение: 23
MiniMax (Guest)

Насчет стеков для процессов согласен.
Где-то встречал предупреждение,
что если указать неправильно "mem" ( наверноре имелось ввиду завышенное значение), то рано или поздно это приведет к краху системы. Наверное система растет вверх.
Интересно откуда берется отсчет ?

Memory: 32MB = 32MB total
Memory: 21176KB available (2708K code, 238K data, 120K init)

21176KB + 8000KB ( рамдиск)
хммм. Похоже, что знает :-)
> адрес распаковки рамдиска тоже скорее всего сама рассчитывает.
Может и рассчитывает.

А что означает "Freeing init memory: 120K"?
Какая это память иницализатора освобождается? Может распаковщика RAMDISK ?
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 21.11.2008 16:48 Редактировалось 21.11.2008 16:48 Сообщение: 24
sasamy (Guest)

Цитата
А что означает "Freeing init memory: 120K"?


Это освобождается память ф-ий в модулях которые имеют макрооопределения __init и __exit , и данные с макроопределением __initdata.
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 21.11.2008 21:06 Редактировалось 21.11.2008 21:06 Сообщение: 25
MiniMax (Guest)

Скомпилировал hello.c. На хосте все работает. На таргет пишет
sh: applet not found

для таргета компилировал
/usr/local/arm/bin/arm-elf-gcc -g -c -mcpu=arm926ej-s -Os -Wall -o hello hello.c

Я использую arm-elf-gcc -g + newlib

В качестве RAMDISK пробовал готовый rootfs с электроникса
http://electronix.ru/forum/index.php?act=Attach&type=post&id=19829

В чем проблема ?


Что-то я пропустил важное при компиляции для Linux.
Интересно как компилятор привязывает печать к стандарному вызову POSIX?
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 21.11.2008 22:53 Редактировалось 21.11.2008 22:53 Сообщение: 26
sasamy (Guest)

Трудно сказать что происходит на неизвестно откуда взятой rootfs, неизвестно откуда взятым toolchain с неизвестно что содержащей программой :)
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 21.11.2008 23:11 Редактировалось 21.11.2008 23:11 Сообщение: 27
MiniMax (Guest)

Toolchain я генерил сам( binutils,GCC, newlib, U-boot, Linux).
Собрать busybox c newlib не имеется возможности.
Поэтому я взял готовый RootFS пока. Для экспериментов.
Меня интересует - правильно ли я двигаюсь.
Например, я не знаю какие библиотеки на том RootFS.
Наверное, glibc или ucLibc. Я использую newlib.
newlib - это статическая линковка. Насколько я понимаю,
то SHARED библиотеки не используются. Поэтому, IMHO, все должно работать. Или не так ?
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 21.11.2008 23:11 Редактировалось 21.11.2008 23:11 Сообщение: 28
MiniMax (Guest)

А где можно взять проверенный RootFS ?
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 21.11.2008 23:39 Редактировалось 21.11.2008 23:39 Сообщение: 29
sasamy (Guest)

Цитата
А где можно взять проверенный RootFS ?

так плата идет с зашитой rootfs - чем она не понравилась ? вообще на диске от платы есть все необходимое. можно испльзовать ее (и наверно в большинстве случаев нужно) как начальный загрузчик и основную rootfs держать на внешней flash (sd, mmc, usb) - они есть готовые, можно собрать самому (как собрать не напрягаясь можно найти например тут http://www.angstrom-distribution.org/building-angstrom там же если поискать есть готовые образы). Немного о том как писать для платы велись разговоры на этом форуме
http://www.starterkit.ru/new/index.php?name=Forums&op=showtopic&id=90
Вообще что касается linux на этих контроллерах очень много полезного можно узнать тут http://www.linux4sam.org/ - там информация не очень опративно обновляется но жить можна :)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно sasamy 21.11.2008 г. в 23:46:21
Спуститься к концу Подняться к началу
MiniMax (Guest)
Добавлено 22.11.2008 10:44 Редактировалось 22.11.2008 10:44 Сообщение: 30
MiniMax (Guest)

Я, естественно, знаю про ttp://www.linux4sam.org/ и
http://www.angstrom-distribution.orgю

Я даже смонтировал angstrom JFFS2 Image на моем PC.
Привожу команды для Ubuntu. Может кому пригодится
cd ~/fs
sudo /sbin/modinfo mtdcore
sudo modprobe jffs2
sudo modprobe mtdram
modprobe mtdram total_size=16384
sudo modprobe mtdchar
sudo modprobe mtdblock
sudo dd if=Angstrom-console-image-demo-glibc.rootfs.jffs2 of=/dev/mtd0
sudo mount -t jffs2 /dev/mtdblock0 ~/rootfs

Он очень большой для RAMDISK ( ~12MB). Памяти всего 32MB.
Поэтому я подчистил его и сделал из этих файлов EXT2 Ramdisk. Пока не монтируется :-( Проблемы c init.

Кстати, ч не совсем понял назначение linuxrc файла ( симлинк на busybox). В Angstrom root он осутствует.
На том root, что у меня запускается он есть в корне.
Linux стартует с init. Зачем linuxrc?
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux