Доброго времени суток, ЛОР.
Хотелка
Во время загрузки производить некоторые операции с разделами системы, запускать некоторые программы предпроверки и время initramfs очень подходящее.
Окружение
raspberry pi3b+, armhf raspbian.
initramfs
Просто закинул и пролинковал busybox, расставил порядок папок. Собрал в нужный(cpio -> gz) архив.
Работает
Загружаюсь в initramfs, выполняется мой init, прокидываю себя на консоль(busybox sh). Если нужно - могу продолжить загрузку.
Проблема 1
Не могу запустить программу написанную на С++. Программа, пока что, простая(Драсьте, мир), статическая линковка, кросскомпиляция на месте. В самой системе на малине работает, в initramfs(запуская из init скрипта) пишет, мол, не найдено(Хоть она точно есть и через ls видно):
/init: line 54: /bin/hello_try: not found
Как мне запустить собственную программу в initramfs?
Проблема 2
Сеть не подхватывает ип и шлюз. Тобишь, в /etc/network/interfaces задан eth0 интерфейс как dhcp, ifup -a отрабатывает(получает ип по арпу) и всё. Интерфейс остаётся без ип’а, шлюз не выставлен, роутинга нет. Как победить?
Приложения
Решение
Проблема 1
Я не досмотрел и собирал статически только libc и libstd++(флаги линковки для gcc: -static-libgcc -static-libstdc++). Поставив один флаг линковки -static всё собралось статически, заработало. Да, есть варнинги, но это другая история.
Проблема 2
Пересобрал образ через buildroot с нужными пакетами внутри(в том числе dhcpcd) - вуаля - работает и определяется сама сеть.