LINUX.ORG.RU

Своп отключен в ядре

 , ,


1

1

Доброго дня

Изложу проблему. Есть древняя машина x86 на ней установлен Gentoo 2.6 это embeded система необходимая для работы всего одной программы. При этом ОЗУ на борту всего 128 МБ и на данный момент архиважно увеличить это значение. Таких древних карт памяти уже не найти и увеличить объём памяти новой планкой нереально. Но есть FlashCompact на 16 GB со скоростью чтения 50 MB/S. Захотелось странного, увеличить размер ОЗУ за счёт свопа. Выделил ГБ на отдельном разделе проинициализировал а подключить его не могу, при swapon /dev/hdc3 пишет Function not implemented. В интернетах пишут что это значит что своп отключен в ядре на этапе компиляции, опция CONFIG_SWAP. Вот чего меньше всего хочется так это компилировать кастомное ядро с неизвестными мне параметрами.

Вопрос: можно ли включить функцию ядра работы со свопом без перекомпиляции ядра? (установка окружения / подключение модулей и тд.)


Ответ на: комментарий от Dev0

Работать пришлось с тем что было под рукой лайфсиди Gentoo RescueCD. Может версия сорцов не та ну не в ручную же править. Качал с kernel.org

ниже вывод консоли много текста https://yadi.sk/i/H0kfk32J3ME5Y5

Dev0
() автор топика
Ответ на: комментарий от timdorohin

По видимому причина ошибок в первом сообщении

include/linux/compiler.h:40:2: error: #error no compiler-gcc.h file for this gcc version
#error no compiler-gcc.h file for this gcc version
значит надо ещё найти подходящую версию gcc под мою версию ядра.

Dev0
() автор топика
Ответ на: комментарий от Dev0

Поставь старый линь c gcc той версии, что была в системе (если найдешь следы) или с 4.1 (должно сработать) в виртуалку да собирай на ней

timdorohin ★★★★
()
Ответ на: комментарий от timdorohin

Тебе не кажется что проблемы растут как снежный ком?)

Я попробую ещё почитать чужого опыта поискать каким gcc в те времена компиляли.

Dev0
() автор топика
Ответ на: комментарий от splinter

?!?!?!

2006 год же, https://ru.wikipedia.org/wiki/Шаблон:Timeline_Linux_Kernel

Какой к черту 2.95? К тому времени даже гента на 3й ветке уже была, а ядро умело только-только вышедшей 4й собираться.

На, почитай: https://wiki.gentoo.org/wiki/Project:RelEng/LiveCD/2006.0/Press_release

Это кстати и ТС'у важно - очень вероятно что gcc таки 3.4 ему нужен.

timdorohin ★★★★
()
Последнее исправление: timdorohin (всего исправлений: 1)
Ответ на: комментарий от Dev0

У тебя дерево portage стоит того времени, старое? Есть директория «/usr/portage» ? Если стоит, то работай через пакетный менеджер:

emerge -pv gentoo-sources

Посмотри, установлены ли у тебя какие-то исходники ядра.

Попробуй установить пакет gentoo-sources. Вручную скачай где-нибудь старые сорцы и положи их в «/usr/portage/distfiles». Потом бери конфиг, с которым запущено текущее ядро, модифицируй его, и пробуй собрать свежеустановленные старые сорцы ядра.

Возможно, если не установлено дерево portage, то попробуй где-нибудь в сети найти архивы с portage-snapshot того времени.

anonymous
()
Ответ на: комментарий от anonymous

Если есть возможность работать с пакетным менеджером, то это отлично. Заодно посмотри, какой у тебя тулчейн установлен: binutils, glibc, gcc. Можешь ли ты им собрать старое ядро?

anonymous
()

При этом ОЗУ на борту всего 128 МБ
Захотелось странного, увеличить размер ОЗУ за счёт свопа.

Это не странно, это совершенно нормально для древних машин. Ставь vm.swappiness в 100. А вот на счет ядра, лучше поставить новый дистрибутив (если это возможно - есть root), потому-что скорей всего твоя железка уже решето, чуть более чем полностью.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous

Смотри что получается

Загрузить систему можно только на той машине Celeron 600

Сейчас точно не скажу но помоему portage на запущенной системе я видел

Компилить с Celeron 600 при RAM 128 MB реально нереально

О том что там ещё сеть поднять понадобится я даже думать не хочу)

Генту с наскока точно не осилить. Если чтото пошло не так как ожидалось и она начинает задавать вопросы... мы просто друг друга не понимаем.

Систему для сборки я выбрал Kali понравилась с первого взгляда к тому же родня Debian. Скоро обновы догрузит и начну. Сперва попробовать собрать ядро(любое) впринципе потом с конкретными цифрами. Сорцы есть, конфиг есть осталось значит тулчейн выбрать и правильно настроить окружение для компиляции. Чет не верится мне что под эту компиляцию надо будет конкретную систему ставить, хотя может так было бы проще..

Dev0
() автор топика
Ответ на: комментарий от anonymous_sama

Любое ядро туда скорей всего не подойдёт будут конфликты с драйверами. RAM конечно по хорошему менять надо но она не выпускается уже более +10 лет, ни поменять ни добавить только выкинуть когда сдохнет. Но тогда по цепочке под замену весь блок.

Dev0
() автор топика

А через ld_preload перехватить запрос на размер памяти и выдать свой ответ на него?

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Так мы до ручного управления памятью дойдём)

Dev0
() автор топика
Ответ на: комментарий от Dev0

Чорд!

Рам твоя по-прежнему выпускается и есть на китайских (и не только) барахолках за копеечную цену!

Я-то думал что рам вообще никак, типо она распаяна.

Чего думать-то, иди на барахолку, покупать плашку.

timdorohin ★★★★
()
Ответ на: комментарий от timdorohin

Поздняк! Мне сейчас клавиатура ближе барахолки)

Dev0
() автор топика
Ответ на: комментарий от Dev0

Мне кажется, что если на исходной машине установлено дерево portage, установлен компилятор подходящей версии, а также если есть точный конфиг, с которым было собрано старое ядро, то самый простой способ - действовать из установленной системы.

Если запустить систему, то, как уже ранее говорили, точный конфиг старого ядра можно извлечь из /proc.

Не стоит боятся генту, там все просто и логично.

Для начала устанавливаем исходники ядра:

emerge gentoo-sources

Скорее всего, автоматически оно их скачать не сможет в силу древности, поэтому качаем все файлы, которые требует emerge, вручную и кладем в каталог /usr/portage/distfiles.

Далее смотрим, что лежит в каталоге /usr/src.

У нас там должны появится свежеустановленные исходники /usr/src/linux-2.6.*, а также символьная ссылка на них: /usr/src/linux. Если шо, делаем символьную ссылку вручную.

Берем точный конфиг, с которым было собрано старое ядро (вы же его заполучили, да?), и копируем в следующее место: /usr/src/linux/.config

Теперь приступаем к конфигурации ядра:

cd /usr/src/linux
make menuconfig

Включаем то, что вам нужно (то, что касается поддержки swap).

Теперь собираем:

make
make modules_install

Заменяем старый бинарник ядра на загрузочном разделе /boot на новый бинарник. (названия бинарников должны совпадать, чтобы с загрузчиком не было проблем)

Все, перезагружаемся.

ИМХО, лучше всего в данном случае подойдет уже установленная родная система:

-Там уже готово родное старое окружение.

-Установлено дерево портеж

-Установлен старый тулчейн

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

-Устанавливаем старые ядерные исходники

-Собираем старое ядро с этим слегка модифицированным конфигом

-...

-?

-профит!!111

Ну да, на таком слабом железе сборка ядра может занять часа 2-3. Но можно и подождать.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Благодарю за столь подробную инструкцию, именно так я и представлял себе этот процесс. Но Генту всёже я оставлю на отпуск, времени на изучение уже не осталось.

Просмотрел ещё раз папки той системы. Я ошибался, ни сорцов ни портежей нет. Сделал cp в работающей системе себе на память.

Следы тулчейнов:

usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6
usr/lib/binutils/i686-pc-linux-gnu/2.15.92.0.2
usr/lib/glib/include/glibconfig.h
usr/lib/glib-2.0/include/glibconfig.h

В /usr нет папки src но есть ссылка с таким именем и указывает она

file:///media/root/9f2936c3-c489-4560-bfba-ee6de632a4cc/usr/src
Получается всё что нужно для сборки лежало на установочной флешке с которой систему ставили. Получить установочную флешку пока невозможно.

P.S. Торжественный пуск компиляции откладывается, походу после обоновления иксы слетели.

Dev0
() автор топика
Ответ на: комментарий от Deleted

Новое ядро linux-4.12.9 выпало через 20 минут. Ни одной ошибки. https://hastebin.com/luluzukere

С 2.6.12.5 куча ошибок останавливается. Буду разбираться с окружением gcc..

Dev0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.