Ник:
Пароль:

Контакты

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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
sasamy (Guest)
Добавлено 15.01.2009 22:21 Редактировалось 15.01.2009 22:21 Сообщение: 41
sasamy (Guest)

Цитата
ка настроить initrd?


В конфиге ядра (.config) параметр
CONFIG_BLK_DEV_INITRD=y
вкючает поддержку initrd в ядре.
Параметры загрузки в конфиге
CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21100000,0x500000 mem=32M console=ttyS0,115200"

initrd=0x21100000,0x500000 - говорит о том где искать образ initrd (я так понимаю это адрес,размер блока в ram). rootfs которую вы заливаете в dataflash - это и есть тот самый образ initrd.
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 15.01.2009 23:49 Редактировалось 15.01.2009 23:49 Сообщение: 42
repairman (Guest)

Цитата

rootfs которую вы заливаете в dataflash - это и есть тот самый образ initrd.


Нечто в dataflash можно использовать как угодно... и как initrd тоже...
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.01.2009 03:00 Редактировалось 16.01.2009 03:00 Сообщение: 43
sasamy (Guest)

Цитата
Нечто в dataflash можно использовать как угодно... и как initrd тоже...


К чему эти "сенсационные" замечания ? Не надо путать людей, файл rootfs это не "нечто" - это сжатый gzip образ ram диска начальной загрузки (INITial Ram Disk - initrd), лежит по определенному адресу в dataflash который прописан в конфиге u-boot, название rootfs используется в скриптах автора при загрузке в u-boot с tftp-сервера, в авторском варианте он же является корневой файловой системой. У вас он может вообще не используется - у меня root находится на разделе mmc-карты и это место на dataflash можно использовать как угодно (один только вопрос - для чего мне 2,5 Мб на dataflash когда свободно 450 Мб на ммс :)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно sasamy 16.01.2009 г. в 03:45:28
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 16.01.2009 10:47 Редактировалось 16.01.2009 10:47 Сообщение: 44
repairman (Guest)

В данном случае, в отличии от "взрослых" линукс - rootfs заливается в образ ramdisk и передается ядру КАК initrd и этот ramdisk, распакованный в ОЗУ используется как основная корневая система хоста (а не как временноя явление, существующее 2 секунды в процессе загрузки)... что позволяет слепить АБСОЛЮТНО бездисковую станцию...
Все работает, но используется НЕ по прямому назначению... embedded-специфика...

Классический initrd в нашем случае НЕ НУЖЕН, т.к. НЕТ того, для чего он, собственно, был создан.... У нас все машины 100% одинаковы, ядро 100% заточено под машину.... даже модули ядра делать бессмысленно, не говоря про остальное...

p.s. для чего мне MMC, если все мне нужное помещается в dataflash и еще 1мб в запасе...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 16.01.2009 г. в 12:06:24
Спуститься к концу Подняться к началу
starterkit (Guest)
Добавлено 16.01.2009 11:09 Редактировалось 16.01.2009 11:09 Сообщение: 45
starterkit (Guest)

Кстати, по слухам, пугают в новых версиях ядра initrd убрать оставить только initramfs ...
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.01.2009 14:25 Редактировалось 16.01.2009 14:25 Сообщение: 46
sasamy (Guest)

2repairman почитай документацию идущую с ядром - для чего initrd был предназначен главным образом не меняет его сути. Documentation/initrd.txt (первые два абзаца)
Цитата
initrd provides the capability to load a RAM disk by the boot loader.
This RAM disk can then be mounted as the root file system and programs
can be run from it. Afterwards, a new root file system can be mounted
from a different device.
The previous root (from initrd) is then moved
to a directory and can be subsequently unmounted.

initrd is mainly designed to allow system startup to occur in two phases,
where the kernel comes up with a minimum set of compiled-in drivers, and
where additional modules are loaded from initrd.

os linux например не создавалась как bios для системных плат - и что, после того как ее стали пихать вместо bios она перестала быть os linux ? И вообще я больше не буду спорить и доказывать очевидные вещи.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно sasamy 16.01.2009 г. в 14:38:46
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 16.01.2009 16:03 Редактировалось 16.01.2009 16:03 Сообщение: 47
repairman (Guest)

Ну.... про эти 2 абзаца я тебе и говорю...
Загрузка в 2 фазы - нам НЕ НУЖНА...

Че биос-то приплел сюда ??? Каждая (приличная) система тащит всегда все свое с собой.. то, что есть в BIOS только позволяет "встать из лежачего состояния на колени"... а ходить и уж бегать оно не в состоянии... для этого нужно ядро ОС...

initrd - способ запускать linux на сотнях раличных машин на ОДНОМ УНИВЕСАЛЬНОМ ЯДРЕ (которые и идут в стандартных дистрибутивах линукс).

Машин много, железо разное, порой ОЧЕНЬ разное, чтобы линукс мог загрузится на конкретной машине - ему нужен КАК МИНИМУМ - набор драйверов контроллера, накопителя и файловой системы, с которого он будет грузится...
Архитектура i386 - такой зоопарк... железа разного немеренно за годы понасоздавали и понаделали... Если ВСЕ это засунуть в ядро - оно будет ОГРОМНОГО размера в памяти... так оно там и не нужно... Значит КАЖДЫЙ должен скомпилить себе свое уникальное ядро ??? Согласен ?
Большинство шарахнется от этого и никогда больше не возьмет в руки линукс...

Можно, конечно, cделать сбалансированное, универсальное ядро, а драйвера положить модулями ядра... отлично НО А КАК загрузить модуль ядра накопителя, если он лежит на том накопителе, драйвер от которого и нужен ??? Тупик...

Вот для этого и придумали initrd с загрузкой в 2 фазы... Драйвера (модули ядра scsi, usb, ide, ext2 и т.п.) минимально необходимые для запуска данной конкретной rootfs на данном конкретном железе (и только они) кладутся на ramdisk, 1 фаза - ядро читает initrd, через int13h, долго и нудно... , запускает драйвера накопителя, на котором и находится реальная rootfs, монтируется реальная rootfs (что теперь возможно т.к. драйвера загружены), initrd уничтожается, она свое дело сделала и больше не нужна... происходит обычная, штатная загрузка...

Результат - ОДНО небольшое универсальное ядро, 90% драйверов в *.ko, грузится (почти) на любом железе... разница только в содержимом initrd, который лепится за 10 секунд для данного железа с помощью mkinitrd (что, никак, не сравнимо с перекомпиляцией ядра)...

Бельды ?

p.s. Если не понял про что я - попробуй загрузить систему с одним и тем же стандартным ядром от какого-нибудь Debian'а или Fedora'ы или SuSe (по фигу) БЕЗ initrd:
1. со scsi-2/adaptec/minix
2. с EIDE Promise/RAID1/ext3
3. с USB флешки/fat16

Это возможно ТОЛЬКО благодаря initrd, без него тебя ждет во всех 3-х случаях "паника ядра", т.к. ни 1, ни 2, ни 3 - не собраны в ядро... если, только оно не предназначено для чего-то "супер-пупер-необычного"... а теперь представь все богатство комбинаций железа-систем, которые могут случится....

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 16.01.2009 г. в 16:42:39
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.01.2009 19:14 Редактировалось 16.01.2009 19:14 Сообщение: 48
sasamy (Guest)

Цитата
1 фаза - ядро читает initrd, через int13h

какой бред - у вас каша в голове. Сокращу цитату для лучшего понимания, даже переведу - вы видимо не в состоянии.

initrd provides the capability to load a RAM disk by the boot loader.
This RAM disk can then be mounted as the root file system and programs can be run from it.

initrd обеспечивает возможность загрузить ram диск загрузчиком. Этот ram диск может тогда быть смонтирован как корневая файловая система и программы могут быть запущены оттуда.

Никаким int 13h биос-а ядро не пользуется никогда. Для начальной загрузки существуют загрузчики. Для чего используют initrd дистрибутивостроители - это одно, в авторском варианте initrd используется за загрузки корневой фс, и это именно initrd и ничто другое. Еще вопросы ?
Спуститься к концу Подняться к началу
repairman (Guest)
Добавлено 16.01.2009 21:03 Редактировалось 16.01.2009 21:03 Сообщение: 49
repairman (Guest)

Понятно... Спор двух самоуверенных, напыщенных профанов... Оба нефига не знают и гонят пургу...

Хотите узнать подробности про загрузку initrd bootloader'ом, или ну его нафиг ? Готов поставлять англоязычные цитаты с фрагментами кода тоннами...

Хм.... а нафига оно нам ? "Истина где-то рядом..."

p.s. довольно точный перевод... Не желаете подработать техническим переводом ???

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно repairman 16.01.2009 г. в 21:33:57
Спуститься к концу Подняться к началу
sasamy (Guest)
Добавлено 16.01.2009 21:36 Редактировалось 16.01.2009 21:36 Сообщение: 50
sasamy (Guest)

Цитата
Хотите узнать подробности про загрузку initrd bootlader'ом, или ну его нафиг ? Готов поставлять англоязычные цитаты с фрагментами кода тоннами

Я это и так вижу в исходниках u-boot. Фрагмент авторского конфига:
Код
#define CONFIG_BOOTCOMMAND "run boot_df"

#define CONFIG_EXTRA_ENV_SETTINGS
"tftp_update=tftpboot 20400000 zlinux; cp.b 20400000 c0038000 170000; tftpbo
cp.b 20400000 c01a8000 277fff"
"tftp_boot=tftpboot 20400000 zlinux; tftpboot 21100000 rootfs; bootm 2040000
"boot_df=cp.b c0038000 20400000 170000; cp.b c01a8000 21100000 277fff; bootm
"ipaddr=192.168.0.136"
"netmask=255.255.255.0"
"ethaddr=00:1f:f2:00:00:00"
"serverip=192.168.0.2"


Обращу внимание на пару строк
run boot_df где

boot_df=cp.b c0038000 20400000 170000; cp.b c01a8000 21100000 277fff; bootm
где образ нашего initrd копируется в ram:
cp.b c01a8000 21100000 277fff
копируется из dataflash (виртуальный адрес c01a8000 - соответствует смещению 1a8000 в реальной dataflash) начиная с адресф 21100000 в ram, размер 277fff байт.
Теперь смотрим где ядро ищет наш образ initrd (.config ядра)
CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21100000,0x500000 mem=32M console=ttyS0,115200"
какое совпадение :) оказывается тоже по адресу initrd=0x21100000.
Спуститься к концу Подняться к началу
Форум » starterkit.ru » Embedded Linux