rootfs

Russian
Pavel
2009-05-22
2013-04-15
  • Pavel
    Pavel
    2009-05-22

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

     
  • MinimumLaw
    MinimumLaw
    2010-02-18

    Ну, для начала, все зависит от того, что Вы в конечном итоге хотите.
    А хотят люди разного. Для начала неплохо иметь "стандартный набор разработчика" - т.е. linux хост-компьютер связанный сетью и последовательным портом с модулем.
    Далее, разобраться с загрузчиком. От него сейчас требуется по сути только одно - загрузить ядро из сети и передать на него управление. Диалог с большинством загрузчиков осуществляется через последовательный порт. Я намеренно не уточняю U-Boot или E-Boot или еще что-то. На данный момент это не важно. Результат который хочется увидеть надпись Starting kernel…
    Следующий этап - добиться нормальной прогрузки ядра. Для этого его нужно правильно сконфигурировать на работу с консолью на последовательном порту. Результат к которому стремимся - kernel pannic! Can't mount root или как-то так.
    Если это есть, то дольше даем ядру файловую систему. Для отладки идеально root на NFS. Конфигурируем Linux на хост-компьютере на расшарку папки, в которой лежит будущая файловая система. Теперь ядро загрузившись будет кричать Panic! Can't execute init! Переходим к следующему шагу.
    А следующий шаг - это bysybox. Но надо понимать, что busybox - всего-лишь комплект утилит. Т.е. сборка его не избавит Вас от процедуры создания сценария загрузки. Но пока, это можно отложить. Пока надо создать необходимые файлы в каталоге /dev (/dev/console, /dev/null и т.п.) и сказать ядру init=/bin/sh (если этого не сделать, то при загрузке мы увидим Panic: attempt to kill init). Если все хорошо, то у нас (наконец-то) есть приглашение системы (уже залогиненное), при чем достаточно рабочее. Т.е. ls будет работать.
    А вот далее мы конфигурируем init. Пишем inittab, загрузочные скрипты и что там нам еще нужно. Добавляем софт по вкусу. В итоге мы имеем вполне себе рабочую систему, обладающую одним недостатком - для ее работы наобходим хост-компьютер. Это наш отладочный стенд.
    И вот, наконец-то, суть Вашего вопроса - как обойтись одной железкой.
    А вот тут надо вернуться к загрузчику. Ибо из всех вариантов лично мне приглянулся U-Boot, поэтому разбор с остальными я оставлю Вам в качестве домашнего задания. А вот про U-Boot могу написать. Итак, приступим…
    Прежде всего встраиваемые системы не есть аналог настольных, так что пихать ядро на корневую файловую систему… Лично я разделил их. На встроенной флеши лежат отдельные разделы для ядра и rootfs. Во-первых это позволит разместить код ядра непосредственно во флеше и поэкономить оперативку /а конкурент в лице виндовс так не умеет/ собрав XIP ядро, а во вторых если ядро монолит (а на встраиваемых оно как правило такое) то его можно менять отдельно от файловой системы. Загрузчик же позволяет менять параметры передаваемые ядру - а значит управлять размещением корневой файловой системы. Хотите копируйте с хоста на SD/MMC и говорите что рут теперь там, хотите берите squashfs-tools и пишите рут на флешку модуля. Собственно, если вкратце, то все…
    Подводных камней и граблей по пути раскидано море, но на то оно и OpenSource. Увы, сделать все это за Вас по интернету я не смогу…