- ⏬ Как понизить версию ядра в Linux
- Загрузитесь в старое ядро
- Удалите проблемное ядро
- Как избежать таким проблем в будущем
- Заключение
- Linux и Windows: помощь админам и пользователям
- Администрируем и настраиваем Windows, Linux.
- Как изменить ядро Ubuntu Linux
- Изменение загружаемого по умолчанию ядра в Ubuntu
- Изменение загружаемого по умолчанию ядра в Ubuntu Linux
- Модификация ядра Linux: добавляем новые системные вызовы
⏬ Как понизить версию ядра в Linux
Linux живет и умирает ядром.
Если вы знакомы с тем, как работает GNU / Linux, Linux – это ядро.
Все остальное – это инструменты, которые взаимодействуют с ним.
Эти инструменты позволяют вам фактически выполнять работу, но они не могут ничего сделать без ядра.
Ядро операционной системы похоже на вашу сердечно-сосудистую систему.
Вы склонны забывать об этом, пока что-то пойдет не так.
Когда обновленное ядро не позволит вам использовать ваш компьютер, пришло время понизить версию.
Загрузитесь в старое ядро
Для загрузки в старое ядро вам необходимо перезагрузить компьютер.
Когда компьютер загружает GRUB, вам может потребоваться нажать клавишу, чтобы выбрать нестандартные параметры.
В некоторых системах сразу будут показаны более старые ядра, в то время как в Ubuntu вам нужно будет выбрать «Advanced options for Ubuntu», чтобы найти более старые ядра.
Выбрав старое ядро, вы загрузитесь в свою систему.
Все должно работать как раньше.
Если проблема не устранена, значит она не в ядре.
Удалите проблемное ядро
Если вы загрузились и все работает так, как задумано, скорее всего, проблема в обновленном ядре.
Технически вы можете просто делать это каждый раз, когда загружаете свой компьютер, но имеет смысл удалить проблемное ядро.
Как избежать таким проблем в будущем
Один из самых простых способов избежать такого рода проблем – не принимать обновление сразу .
Это даст вам возможность увидеть, появятся ли какие-либо сообщения от пользователей, имеющих проблемы с новым ядром.
Особенно следует следить за пользователями со схожим оборудованием.
Если вам важна стабильность, вы также можете использовать дистрибутивы LTS.
Эти обновления более редкие, за исключением обновлений безопасности.
Это означает, что вы можете рассчитывать на то, что они будут более стабильными, чем ваш стандартный дистрибутив.
Заключение
Хотя понижение версии является самым простым способом решения проблем, связанных с ядром, это не единственный способ.
Иногда это просто невозможно.
Возможно, ядро обновлений включает аппаратную поддержку, в которой вы отчаянно нуждаетесь, в то время как ошибка связана с оборудованием, которое вы даже не используете.
В этом случае вы должны собрать собственное ядро, а не полагаться на версию, поставляемую вашим дистрибутивом.
Это не совсем просто, но не так сложно, как думают некоторые.
Источник
Linux и Windows: помощь админам и пользователям
Администрируем и настраиваем Windows, Linux.
Как изменить ядро Ubuntu Linux
Изменение ядра не для каждого. Пожалуйста обратите внимание, что если вы попробуете сделать это, вы можете разрушить вашу систему.
Есть масса причин, по которым вы можете захотеть изменить ядро. Вы можете захотеть обрезать ядро, для того чтобы в нем были только необходимые сервисы, особенно если у вас запущен сервер и выделенное устройство. Вы также можете захотеть пропатчить ваше ядро для поддержки оборудования, которое в настоящий момент не поддерживается.
Эта статья не объясняет как патчить ваше ядро, только как изменить текущее. Я попробую объяснить как пропатчить ядро в следующих статьях, и какие практические причины могут быть для этог.
Для начала, вам нужно посмотреть какая версия ядра у вас сейчас. Используйте для этого команду uname :Теперь вам необходимо установить исходные коды Linux для вашего ядра, обратите внимание что у меня ядро 2.6.17-10. Вы можете заменить номер ядра на тот, который используется у вас. Вам также необходимо установить библиотеки и некоторые дополнительные программы, которые помогут вам при компиляции.
Если вам любопытно куда инсталлируются исходные коды ядра, вы можете использовать команду dpkg , которая расскажет вам это. Ниже вывод с моей системы:
Вы можете увидеть что исходники устанавливаются в директории /usr/src в архивированном файле.
Для облегчения дальнейших действий, вы можете перейти в режим root используя команду sudo для открытия нового шелла. Есть другие пути для этого, но я предпочитаю этот путь.
Теперь смените директорию. Заметьте что вам необходимо установить утилиту bunzip если её нет в вашей системе.
Сделайте копию текущей конфигурации ядра перед изменением. Обратите внимание, что символ `находиться под символом тильда
Теперь мы можем запустить утилиту, которая позволит нам изменить ядро:
Сперва, перейдем в меню Load an Alternate Configuration File , и загрузим файл .config (просто нажав enter).
Теперь находясь внутри утилиты, мы можем установить опции для настройки ядра. Навигация очень простая. Я решил выбрать Networking и нажал клавишу Enter для перехода в эту категорию:
Amateur Radio Support ? Зачем мне это? Вы можете видеть символ *, который означает что это есть в ядре.
Нажав клавишу ?, вы перейдете в справку для выбранного элемента:
Итак, я собираюсь отключить это немедленно. Зачем вообще это установлено в моем ядре? Я нажимаю Esc для выхода из окна справки, и потом нажму N для удаления этого элемента из ядра.
Когда вы закончите делать изменения, которые вам нужны, нажмите Exit и сохраните конфигурационный файл.
Теперь конфигурация готова для компиляции. Сперва сделаем очистку, просто для того чтобы убедиться, что все готово к компиляции.
Далее мы действительно компилируем ядро. Это делается чертовски долго, так что пойдите займитесь чем нибудь ещё.
Этот процесс создаст два .deb файла в директории /usr/src . Файл linux-image**** содержит актуальный образ ядра, а другой файл содержит измененный. Имена файлов могут быть отличными в вашей системе.
Пожалуйста обратите внимание что когда вы запустите следующие команды, вы установите новое ядро как ядро по умолчанию. Это может разрушить вашу систему. Если ваша машина не загружается, вы можете нажать Esc и меню загрузки GRUB и выбрать старое ядро. Вы можете заблокировать неверное ядро в /boot/grub/menu.lst и попробовать скомпилировать его заново.
Теперь перегрузите вашу машину. Если все работает, должно загрузиться новое измененное ядро. Проверьте это, испольльзуя uname .
Я планирую написать серию статей о изменении ядра, так что подпишитесь на рассылку для обновлений.
Источник
Изменение загружаемого по умолчанию ядра в Ubuntu
В интернете есть множество разных статей о том как изменить загружаемое по умолчанию ядро в Ubuntu 18.04 и 20.04
В основном все статьи описывают сложный и не удобный способ через указание ID подменю в опции GRUB_DEFAULT файла /etc/default/grub, но есть способ проще.
Исходные данные: ОС Ubuntu 18.04 и 20.04
Задача: Смена ядра по умолчанию в Ubuntu 18.04 и 20.04
По умолчанию если мы обновляем Linux-ядро, то Ubuntu сохраняет предыдущую версию и в случае каких-то проблем с новым ядром мы всегда можем загрузить более старое, но чтобы это сделать нужно попасть в меню загрузчика. Попасть мы туда можем если во время загрузки сервера будем постоянно (часто) нажимать клавишу TAB и меню GRUB будет показано на экране, далее мы идем в пункт «Advanced options for Ubuntu» и выбираем там нужное нам Linux-ядро. Все это хорошо, но нам нужно чтобы предыдущая версия Linux-ядра выбиралась сама и была использована GRUB по умолчанию.
Для достижения нашей цели мы будем редактировать файл /etc/default/grub, поэтому прежде чем его менять Вам нужно понимать что Вы меняете и для чего. Рекомендую для начала ознакомиться с официальной документацией на GRUB в части некоторых основных опций.
Все редактирование будет осуществляться с правами root, так что перейдите в консоль под пользователем root.
Откройте файл /etc/default/grub в привычном Вам редакторе, это может быть vim или например mcedit. Я использую vim.
Ниже представлен файл /etc/default/grub по умолчанию (комментарии удалены):
Добавим перед GRUB_DEFAULT опцию
Опция GRUB_SAVEDEFAULT=true заставляет сохранять выбранную в меню загрузчика запись как запись по умолчанию, но это работает только если GRUB_DEFAULT=saved
Далее изменим GRUB_DEFAULT=0 на
Опция GRUB_DEFAULT может быть числом или специальным типом saved. Число указывает номер элемента в списке меню (возможно указание номера под элемента, например так 1>2), по умолчанию стоит GRUB_DEFAULT=0
Далее изменим GRUB_TIMEOUT_STYLE=hidden на
Опция GRUB_TIMEOUT_STYLE указывает на тип меню выбора во время отчета времени указанном в GRUB_TIMEOUT по истечении которого будет загружена запись по умолчанию. По умолчанию меню загрузчика скрыто, но нам нужно чтобы оно отображалось для выбора ядра.
Далее изменим GRUB_TIMEOUT=0 на
Опция GRUB_TIMEOUT устанавливает таймаут показа меню загрузчика, мы поставили 30 секунд, этого нам хватит чтобы выбрать какое ядро загружать. Вы можете поставить и меньше, например 3 секунды.
Так же я хочу упомянуть про опцию GRUB_DISABLE_SUBMENU, которая в случае указания ‘y’ убирает в меню GRUB иерархию и делает его плоским. Мы не будем использовать эту опцию, но если Вы захотите, то можете это сделать. Опция ниже:
Итого файл /etc/default/grub стал таким (комментарии удалены):
Далее нужно сохранить параметры загрузчика, вызываем команду:
После этого можно перезагрузить сервер и сразу после прохождения процедуры POST мы попадем в меню загрузчика GRUB, см. скриншот ниже:
Ubuntu 20.04 (GRUB)
В нижней части интерфейса GRUB мы видим тикающее время, те самые 30 секунд, а в верхней части в меню выбран первый пункт, чуть ниже присутствует пункт «Advanced options for Ubuntu». Туда то нам и нужно успеть зайти (жмем стрелку вниз и Enter), см. скриншот ниже:
Ubuntu 20.04 (GRUB submenu Advanced)
Мы видим список доступных для загрузки Linux-ядер. Выбираем например ядро 5.4.0-52 и жмем Enter. В этот момент GRUB запомнит Ваш выбор и будет использовать его по умолчанию при следующих загрузках. А нам это и нужно.
После загрузки мы можем проверить, что действительно загрузилось ядро 5.4.0-52 командой uname:
При следующих перезагрузках сервера GRUB выведет нам меню, но по умолчанию будет уже выбран пункт «Advanced options for Ubuntu», а в нем то Linux-ядро, что мы выбрали ранее.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Источник
Изменение загружаемого по умолчанию ядра в Ubuntu Linux
При установке системных обновлений в виртуальной машине с Ubuntu Server 14.04 32-bit я столкнулся с ситуацией, когда вновь установленное в систему ядро Linux не смогло загрузиться. Если система была установлена с загрузчиком GRUB, то в процессе каждой загрузки у нас есть возможность вручную выбрать ядро (предполагается, что при обновлении мы сохранили старое работоспособное ядро), которое будет загружено.
Когда процесс загрузки отобразит меню GRUB, выберем пункт меню Advanced options for Ubuntu
В появившемся списке доступных для загрузки ядер Linux выберем предыдущее ядро, с которым загрузка ВМ проходила успешно до обновления (в моём случае это ядро версии 3.13.0.-24).
Однако при следующей перезагрузке системы без ручного вмешательства в процесс загрузки, загрузчик GRUB всё-равно запустит более новое ядро, так как оно назначено в качестве ядра по умолчанию. Для того, чтобы переопределить загружаемое по умолчанию ядро, запомним позицию нужного нам ядра в списке GRUB (в моём случае это 2 позиция с учётом того, что нумерация идёт с 0). Загрузим систему, вручную выбрав нужное ядро, и отредактируем конфигурационный файл GRUB:
В файле отредактируем строчку, как описано здесь , указав индекс нужных позиций структуры меню GRUB, чтобы добраться до ядра, которое будет загружаться по умолчанию (первая цифра означает позицию меню первого уровня, вторая – второго уровня соответственно):
Сохраним изменения в файле и обновим информацию в самом загрузчике:
Перезагрузим сервер и убедимся в том, что система успешно запускается c нужным нам ядром:
Источник
Модификация ядра Linux: добавляем новые системные вызовы
В этой статье мы научимся изменять ядро Linux, добавим собственные уникальные системные вызовы и в завершении соберем ядро с новой функциональностью.
Прежде чем перейти к модификации ядра, его нужно скачать.
Я буду описывать все свои шаги и рекомендую следовать им в точности, чтобы гарантированно получить такой же результат.
- Скачать ПО для запуска виртуальной машины, например Vimware или VirtualBox.
- Скачать образ Ubuntu 18.04 (http://releases.ubuntu.com/18.04/).
- Настроить виртуальную ОС, используя скачанный образ.
После загрузки Ubuntu открыть терминал и следовать дальнейшим инструкциям:
Установка необходимых компонентов:
Скачивание исходного кода Linux:
Изменение разрешений и переименование каталога:
Настройка сборки ядра:
Установка модулей ядра и образа:
После открытия файла сделайте следующее:
- Установите GRUB_DEFAULT как Ubuntu, with Linux4.15.18-custom ;
- Установите GRUB_TIMEOUT_STYLE как menu ;
- Установите GRUB_TIMEOUT как 5 ;
- В конце добавьте строку: GRUB_DISABLE_SUBMENUE=y .
Для завершения нам понадобится сгенерировать файл конфигурации GRUB и выполнить перезагрузку:
После запуска системы убедитесь, что загрузили кастомное ядро:
Вывод должен быть 4.15.18-custom .
На этом с подготовительной частью мы закончили.
В качестве новой функциональности мы добавим веса процессов.
Как и следует из названия, мы будем присваивать каждому процессу вес, представляющий его значимость.
Нам нужно реализовать поддержку двух поведенческих паттернов:
- При ответвлении дочерний процесс будет получать тот же вес, что и его родитель;
- Процесс init будет иметь вес 0.
Системный вызовы, которые мы собираемся реализовать, смогут:
- Устанавливать вес текущего процесса;
- Получать общий вес текущего процесса рекурсивно.
Первым делом нам потребуется каким-то образом сообщать каждому процессу о том, что у него появился вес.
Для этого откройте
/linux-4.15.18-custom/include/linux/sched.h
и в структуре task_struct добавьте целочисленный атрибут веса.
Теперь нужно сообщить каждому процессу, каков его начальный вес. Для этого в том же каталоге, что и ранее, откройте init_task.h , в нем перейдите к макроопределению INIT_TASK и добавьте в атрибут веса инициализацию.
В последнем блоке мы сообщили каждому процессу, что у него теперь есть новый атрибут веса, и что при каждом создании нового процесса этот атрибут нужно инициализировать как 0 .
В текущем же мы настроим основу для новых системных вызовов.
/linux-4.15.18-custom/arch/x86/entry/syscalls/ и откройте syscall_64.tbl .
Промотайте вниз файла и зарезервируйте номера системных вызовов.
Далее мы создадим сигнатуру системного вызова. В том же каталоге откройте syscalls.h и промотайте вниз файла:
Все настроено. Осталось только реализовать эти системные вызовы.
/linux-4.15.18-custom/kernel и создайте новый файл syscalls_weight.c .
Не забудьте в том же каталоге открыть Makefile и добавить ваш новый файл в процесс сборки:
Откройте созданный syscalls_weight.c , и давайте переходить к реализации.
Сначала добавляем библиотеки:
Саму же реализацию начнем с sys_set_weight .
- current – это указатель на текущую активную задачу;
- При работе с системными вызовами принято возвращать 0 в случае успешного выполнения и отрицательное значение при возникновении ошибки, как мы и прописали (учитывая, что мы не хотим допускать отрицательный вес).
Переходя к реализации следующего системного вызова, мы сначала определяем вспомогательную функцию:
После чего пишем саму реализацию:
Вот и все. Вам осталось только собрать ядро, перезапустить систему и начинать пользоваться новой функциональностью.
Для сборки и перезагрузки выполните следующие команды:
Автор оригинала статьи выражает признательность за ваше внимание и приглашает посетить его блог CodingKaiser, где вы найдете много интересных материалов из мира технологий и разработки.
Источник