Make menuconfig ошибка 2

I use Debian 7.4 Wheezy. I trying to upgrade my kernel, but when I type "make menuconfig" it says: *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig'

I use Debian 7.4 Wheezy. I trying to upgrade my kernel, but when I type «make menuconfig» it says:

 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

I trying to install «libncurses5-dev», but I get the error:

E: Unable to locate package libncurses5-dev

P.S.

I downloaded and installed the packages manually and now everything is okay!
Thanks a lot!!

Veerendra K's user avatar

Veerendra K

2,0756 gold badges30 silver badges60 bronze badges

asked Apr 14, 2014 at 0:36

ValeriRangelov's user avatar

ValeriRangelovValeriRangelov

5732 gold badges7 silver badges18 bronze badges

You should have run (as root)

aptitude update
aptitude search libncurses

that would suggest you the right package name.

Then try

aptitude install libncurses-dev

and

aptitude install kernel-package
aptitude build-dep linux-image linux-image-amd64 

At last, use make-kpkg --initrd binary to compile your kernel. (it will produce *.deb files in the parent directory). You want to configure /etc/kernel-pkg.conf and perhaps /etc/kernel-img.conf

answered Apr 14, 2014 at 5:35

Basile Starynkevitch's user avatar

3

I had the same problem. In my case installation of package libncursesw5-dev solved the issue.

Patrizio Bertoni's user avatar

answered May 16, 2016 at 13:36

gogo's user avatar

make menuconfig needs ncurses libraries try following command to install ncurses library

sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev

answered Apr 14, 2014 at 5:56

Rahul R Dhobi's user avatar

Rahul R DhobiRahul R Dhobi

5,5681 gold badge28 silver badges38 bronze badges

make menuconfig

worked for me after i installed all the libaries, and added myself sudo permission, i was also using this to cross_compile stuff

# Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) NOPASSWD:ALL

%b37399 ALL=(ALL:ALL) NOPASSWD:ALL

answered Jun 17, 2016 at 16:07

ashish's user avatar

ashishashish

3233 silver badges7 bronze badges

For Fedora(Red Hat);

$ make menuconfig
#error encountered :
make[1]: *** [scripts/kconfig/Makefile:210: scripts/kconfig/mconf-cfg] Error 1
make: *** [Makefile:588: menuconfig] Error 2
#resolution : 
$ sudo yum install libncurses-dev

Thanks

answered May 5, 2020 at 19:29

Sarkar_T's user avatar

Sarkar_TSarkar_T

5311 gold badge4 silver badges4 bronze badges

1

Depending on the project the menuconfig could be made with the kconfiglib library:

https://pypi.org/project/kconfiglib/

For these projects it’s required to:

  • Install Python (I tested it with Python2.7, but I think newer Pythons are just fine)
  • Install pip (if it’s not done with Python)
  • And then the pip install kconfiglib

And for some projects, this will fix the error instead of the libcurses package.

Just as example here is one kconfiglib based project which prints the same error, but will not be fixed with libcurse:

https://github.com/polarfire-soc/hart-software-services

answered Jun 8, 2021 at 13:10

Anton Krug's user avatar

Anton KrugAnton Krug

1,5072 gold badges18 silver badges32 bronze badges

ядро с make menuconfig (Debian)

Модераторы: Warderer, Модераторы разделов

godima

Сообщения: 92
ОС: Debian Etch

ядро с make menuconfig

Добрый день всем!
Рискнул открыть тему, так как по поиску не нашел подходящего ответа для себя.
Надеюсь на понимание.
Вчера попытался в первые пересобрать ядро. Нашел статью как это делается, ну и начал, собственно как там написано.
У меня система на 3 DVD, так что с дисков поставил пакет linux-source-2.6.18
в /usr/src/ распаковал его.
Далее автор рекомендует скопировать /boot/config-2.6.18-686 в /usr/src/linux-source-2.6.18/.config , что я и сделал
После этого запустить в /usr/src/linux-source-2.6.18/ make menuconfig
запускаю, что-то начинает на экран выводить, после чего строка — завершение make menuconfig с кодом ошибки 2.
Что делать?
Пробовал запустить make config — нормально заработало, задает вопросы, ну, как и должно быть :)
Только вот конфигурировать в режиме ответов на вопросы, как-то не очень уж нравится…

И еще вопрос — автор статьи, по которой я пробовал собрать свое ядро предлагает скачать пакет kernel-source-2.6.18
на 3 DVD Debian Etch такого пакета нету, но как я понимаю пакет linux-source-2.6.18 как раз содержит исходники ядра, или я не прав, и нужно качать kernel-source-2.6.18 из сети для сборки своего ядра?

Спасибо всем за ответы!

Аватара пользователя

greak

Сообщения: 485
Статус: debian user
ОС: Debian Lenny/Sid

Re: ядро с make menuconfig

Сообщение

greak » 04.06.2007 09:25

запускаю, что-то начинает на экран выводить, после чего строка — завершение make menuconfig с кодом ошибки 2.
Что делать?

Что система говорит?

И еще вопрос — автор статьи, по которой я пробовал собрать свое ядро предлагает скачать пакет kernel-source-2.6.18
на 3 DVD Debian Etch такого пакета нету, но как я понимаю пакет linux-source-2.6.18 как раз содержит исходники ядра

Качай лучше с kernel.org уже 2.6.21

godima

Сообщения: 92
ОС: Debian Etch

Re: ядро с make menuconfig

Сообщение

godima » 04.06.2007 09:31

greak писал(а): ↑

04.06.2007 09:25

запускаю, что-то начинает на экран выводить, после чего строка — завершение make menuconfig с кодом ошибки 2.
Что делать?

Что система говорит?

ругается на некоторые файлы — говорит, что не найден файл при попытке #include <abc>
где abc — имя файла, сейчас поточнее сказать не могу — только вечером у компа буду

И еще вопрос — автор статьи, по которой я пробовал собрать свое ядро предлагает скачать пакет kernel-source-2.6.18
на 3 DVD Debian Etch такого пакета нету, но как я понимаю пакет linux-source-2.6.18 как раз содержит исходники ядра

Качай лучше с kernel.org уже 2.6.21

Аватара пользователя

chitatel

Сообщения: 1998

Re: ядро с make menuconfig

Сообщение

chitatel » 04.06.2007 16:19

godima писал(а): ↑

04.06.2007 09:22

запускаю, что-то начинает на экран выводить, после чего строка — завершение make menuconfig с кодом ошибки 2.
Что делать?

Поставьте пакет libncurses5-dev. И посмотрите, что получится. Может быть, ничего и не получится…

как я понимаю пакет linux-source-2.6.18 как раз содержит исходники ядра

Правильно понимаете.

godima

Сообщения: 92
ОС: Debian Etch

Re: ядро с make menuconfig

Сообщение

godima » 07.06.2007 08:09

Извините, что с опозданием, но вот, что выдает make menuconfig:

Код:

debian:/usr/src/linux-source-2.6.18# make menuconfig
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: No such file or directory
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:128: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘use_colors’
scripts/kconfig/lxdialog/dialog.h:129: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘use_shadow’
scripts/kconfig/lxdialog/dialog.h:131: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘attributes’
scripts/kconfig/lxdialog/dialog.h:143: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:146: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:147: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:148: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:149: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:151: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:31: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:59: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:95: error: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c: In function ‘dialog_checklist’:
scripts/kconfig/lxdialog/checklist.c:117: error: ‘WINDOW’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: error: (Each undeclared identifier is reported only once
scripts/kconfig/lxdialog/checklist.c:117: error: for each function it appears in.)
scripts/kconfig/lxdialog/checklist.c:117: error: ‘dialog’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: error: ‘list’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:117: warning: left-hand operand of comma expression has no effect
scripts/kconfig/lxdialog/checklist.c:121: warning: implicit declaration of function ‘endwin’
scripts/kconfig/lxdialog/checklist.c:122: warning: implicit declaration of function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:122: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:122: error: ‘stderr’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:140: error: ‘COLS’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:141: error: ‘LINES’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:143: warning: implicit declaration of function ‘draw_shadow’
scripts/kconfig/lxdialog/checklist.c:143: error: ‘stdscr’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:145: warning: implicit declaration of function ‘newwin’
scripts/kconfig/lxdialog/checklist.c:146: warning: implicit declaration of function ‘keypad’
scripts/kconfig/lxdialog/checklist.c:146: error: ‘TRUE’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:148: warning: implicit declaration of function ‘draw_box’
scripts/kconfig/lxdialog/checklist.c:148: error: ‘attributes’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:149: warning: implicit declaration of function ‘wattrset’
scripts/kconfig/lxdialog/checklist.c:150: warning: implicit declaration of function ‘mvwaddch’
scripts/kconfig/lxdialog/checklist.c:152: warning: implicit declaration of function ‘waddch’
scripts/kconfig/lxdialog/checklist.c:156: warning: implicit declaration of function ‘print_title’
scripts/kconfig/lxdialog/checklist.c:159: warning: implicit declaration of function ‘print_autowrap’
scripts/kconfig/lxdialog/checklist.c:166: warning: implicit declaration of function ‘subwin’
scripts/kconfig/lxdialog/checklist.c:191: warning: implicit declaration of function ‘print_item’
scripts/kconfig/lxdialog/checklist.c:197: warning: implicit declaration of function ‘print_arrows’
scripts/kconfig/lxdialog/checklist.c:200: warning: implicit declaration of function ‘print_buttons’
scripts/kconfig/lxdialog/checklist.c:202: warning: implicit declaration of function ‘wnoutrefresh’
scripts/kconfig/lxdialog/checklist.c:204: warning: implicit declaration of function ‘doupdate’
scripts/kconfig/lxdialog/checklist.c:207: warning: implicit declaration of function ‘wgetch’
scripts/kconfig/lxdialog/checklist.c:214: error: ‘KEY_UP’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:214: error: ‘KEY_DOWN’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:224: error: ‘FALSE’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:225: warning: implicit declaration of function ‘scrollok’
scripts/kconfig/lxdialog/checklist.c:226: warning: implicit declaration of function ‘wscrl’
scripts/kconfig/lxdialog/checklist.c:235: warning: implicit declaration of function ‘wrefresh’
scripts/kconfig/lxdialog/checklist.c:285: warning: incompatible implicit declaration of built-in function ‘fprintf’
scripts/kconfig/lxdialog/checklist.c:286: warning: implicit declaration of function ‘delwin’
scripts/kconfig/lxdialog/checklist.c:290: error: ‘KEY_LEFT’ undeclared (first use in this function)
scripts/kconfig/lxdialog/checklist.c:291: error: ‘KEY_RIGHT’ undeclared (first use in this function)
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] Ошибка 1
make[1]: *** [menuconfig] Ошибка 2
make: *** [menuconfig] Ошибка 2
debian:/usr/src/linux-source-2.6.18#

godima

Сообщения: 92
ОС: Debian Etch

Re: ядро с make menuconfig

Сообщение

godima » 07.06.2007 09:34

greak писал(а): ↑

07.06.2007 08:23

scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: No such file or directory

libncurses5-dev установлен?

возможно, что нет, сечас я не у машины, поэтому не могу сказать

godima

Сообщения: 92
ОС: Debian Etch

Re: ядро с make menuconfig

Сообщение

godima » 07.06.2007 09:42

greak писал(а): ↑

07.06.2007 08:23

scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: No such file or directory

libncurses5-dev установлен?

а про остальные ошибки что-то можете сказать?

Аватара пользователя

Aectann

Бывший модератор
Сообщения: 3491
Статус:
ОС: OS X, GNU_и_не_только/Linux

Re: ядро с make menuconfig

Сообщение

Aectann » 07.06.2007 17:30

godima писал(а): ↑

07.06.2007 09:42

а про остальные ошибки что-то можете сказать?

Ошибки из последнего лога вроде только из-за отстутствия ncurses, так что ставьте ncurses-dev и попробуйте ещё раз menuconfig запустить.

My god… it’s full of stars!…

Аватара пользователя

mczim

Сообщения: 665
ОС: Debian/Ubuntu
Контактная информация:

сборка и конфигурирование ядра linuxДоброго дня, читатели и гости моего сайта. В продолжение прошлого поста о ядре Linux, сегодня хочу рассказать, как собрать и настроить собственное ядро.

Из прошлого поста мы уже знаем, что ядро Linux обладает минимальными возможностями и поддержкой оборудования, но при необходимости мы можем расширить возможности ядра с помощью kernel modules (модулей ядра). Для чего может понадобиться сборка или пересборка собственного ядра? Например для включения/отключения каких-либо новых возможностей, или обновление старого ядра на более новое с поддержкой новых возможностей, или просто для опытов :) как в нашем примере.

Получение исходников ядра и подготовка к конфигурированию

Можно несколькими путями получить исходники:

    1. Получить оригинальные архивы кода с The Linux Kernel Archives, в виде gzip или bzip2 архивов, с помощью команды:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2
cp linux-2.6.36.1.tar.bz2 /usr/src/
  1. Получить исходники из репозиториев дистрибутивов (например: Debian, Ubuntu, CentOS i386) в виде бинарного пакета deb или rpm (src.rpm) с патчами от производителя дистрибутива. Например:
     kernel-server:/tmp/123# apt-cache search source | grep linux
    ketchup - update utility for linux-kernel sources
    linux-patch-grsecurity2 - grsecurity kernel patch - new major upstream version
    linux-wlan-ng-source - linux-wlan-ng driver
    linuxdoc-tools - convert LinuxDoc SGML source into other formats
    linux-patch-lustre - Linux kernel patch for the Lustre Filesystem
    libcorelinux-dev - Foundation Classes, Design Patterns, IPC and Threads
    libcorelinux-doc - Foundation Classes, Design Patterns, IPC and Threads
    libcorelinux-examples - Foundation Classes, Design Patterns, IPC and Threads
    libcorelinuxc2a - Foundation Classes, Design Patterns, IPC and Threads
    linux-patch-openswan - IPSEC Linux kernel support for Openswan
    selinux-policy-src - Source of the SELinux reference policy for customization
    user-mode-linux-doc - User-mode Linux (Documentation)
    linux-patch-xenomai - Linux kernel patches for Xenomai
    linux-patch-debian-2.6.26 - Debian patches to version 2.6.26 of the Linux kernel
    linux-source-2.6.26 - Linux kernel source for version 2.6.26 with Debian patches
    linux-tree-2.6.26 - Linux kernel source tree for building Debian kernel images
    Print-server:~# apt-get install linux-source-2.6.26
    Чтение списков пакетов... Готово
    Построение дерева зависимостей
    Чтение информации о состоянии... Готово
    Будут установлены следующие дополнительные пакеты:
      binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make
    Предлагаемые пакеты:
      binutils-doc bzip2-doc cpp-doc gcc-4.3-locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib
      libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc libncurses-dev ncurses-dev kernel-package libqt3-mt-dev make-doc
    НОВЫЕ пакеты, которые будут установлены:
      binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make
    обновлено 0, установлено 13 новых пакетов, для удаления отмечено 0 пакетов, и 5 пакетов не обновлено.
    Необходимо скачать 50,2MB/63,2MB архивов.
    После данной операции, объём занятого дискового пространства возрастёт на 89,4MB.
    Хотите продолжить [Д/н]? y
    Получено:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 [769kB]
    Получено:2 http://ftp.debian.org lenny/main linux-source-2.6.26 2.6.26-26 [49,5MB]
    Получено 50,2MБ за 1min49s (460kБ/c)
    Выбор ранее не выбранного пакета binutils.
    (Чтение базы данных... на данный момент установлено 16621 файлов и каталогов.)
    Распаковывается пакет binutils (из файла .../binutils_2.18.1~cvs20080103-7_i386.deb)...
    Выбор ранее не выбранного пакета bzip2.
    .....
    Распаковывается пакет make (из файла .../archives/make_3.81-5_i386.deb)...
    Обрабатываются триггеры для man-db ...
    Настраивается пакет binutils (2.18.1~cvs20080103-7) ...
    .....
    Настраивается пакет linux-source-2.6.26 (2.6.26-26) ...
    Настраивается пакет make (3.81-5) ...
    kernel-server:~# ls /usr/src/
    linux-source-2.6.26.tar.bz2

Хочу отметить, что имя архива с исходниками или пакета, имеет примерно следующий вид: linux-source-2.6.26 либо kernel-source-2.6.18. Из листинга второго примера, видно что при установке исходников из репозитория, apt нам предлагает установить и остальные сопутствующие пакеты, без которых ядро собрать не получиться.

Итак. После получения исходников одним из вышеуказанных путей (копировании архива (в первом случае) и установки пакета (во втором случае)), мы получаем в каталоге /usr/src/ — архив с именем, аналогичным linux-source-2.6.26.tar.bz2. Далее нам необходимо распаковать дынный архив командой: tar -xjf linux<version>.tar.bz2. В результате, получаем дерево каталогов исходников ядра, расположенные в каталоге /usr/src/linux-2.6.36.1/. Так же рекомендуется создать символьную ссылку /usr/src/linux на вышеуказанный каталог:

kernel-server:~# cd /usr/src/
kernel-server:/usr/src# ln -s linux-2.6.36.1 linux
kernel-server:/usr/src# ls -l lin*
lrwxrwxrwx  1 root src        14 Дек  3 16:31 linux -> linux-2.6.36.1
-rw-r--r--  1 root src  70236745 Дек  3 15:57 linux-2.6.36.1.tar.bz2

Прежде чем приступать к попытке сборки и конфигурированию, необходимо просмотреть файл Changes, расположенный в каталоге Documentation. Он, среди прочего, содержит список пакетов, необходимых для сборки ядра, с указанием номеров версий. Убедитесь, что эти пакеты установлены (если установка исходников производилась с помощью пакетного менеджера, то скорее всего нужные пакеты уже установлены).

В распакованном дереве подкаталогов содержится файл Makefile. make-файл содержит различные цели сборки для конфигурирования опций ядра, сборки ядра и его модулей, установки модулей и сборки пакетов RPM или deb. Наиболее свежие версии исходников ядра позволяют использовать make help для получения краткой справки для каждой цели. В более старых системах было необходимо обращаться к документации или просматривать make-файл. Ниже показана часть вывода make help:

kernel-server:/usr/src/linux-2.6.36.1# make help
Cleaning targets:
clean           - Remove most generated files but keep the config and
enough build support to build external modules
mrproper        - Remove all generated files + config + various backup files
distclean       - mrproper + remove editor backup and patch files

Configuration targets:
config          - Update current config utilising a line-oriented program
nconfig         - Update current config utilising a ncurses menu based program
menuconfig      - Update current config utilising a menu based program
xconfig         - Update current config utilising a QT based front-end
gconfig         - Update current config utilising a GTK based front-end
oldconfig       - Update current config utilising a provided .config as base
.......

Далее, если по каким либо причинам на ядро необходимо наложить патч, то его следует скачать заранее и положить в каталог /usr/src. Если патчить ядро не нужно, можно смело переходить к конфигурированию. Патчится ядро следующим образом:

kernel-server:/usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 #или
Print-server:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1

Конфигурирование

Текущая конфигурация ядра хранится в файле .config. Данный файл формируется при помощи одной из конфигурационных целей (цель — это, говоря простым языком, команда выполняемая в виде make цель):

config

Цель config использует интерфейс командной строки для получения ответов многие на вопросы, касающиеся создания или обновления файла .config. Имхо, по сравнению с целями использующими меню — очень неудобная штука.

cloneconfig

Копирование настроек текущего ядра в файл .config. Данная цель устарела и в новых ядрах заменена oldconfig. (удобно для добавления новых функция текущего ядра)

menuconfig

Цель menuconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла .config. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Этот подход заменил старую цель config. Выполняется в окне терминала удаленно или локально.

nconfig

Цель nconfig использует программу с меню-интерфейсом, построенную на базе ncurses, для создания или обновления файла .config. Данная версия основана на menuconfig, но имеет более современный внешний вид. Добавлена после релиза Linux-ядра 2.6.35. Вы должны только ответить на вопросы для элементов, которые хотите изменить. Выполняется в окне терминала удаленно или локально.

xconfig

Цель xconfig использует систему графического меню, основанную на QT front-end, используемом в KDE desktop.

gconfig

Цель gconfig использует систему графического меню, основанную на GTK front-end, используемом в GNOME desktop.

oldconfig

Цель oldconfig позволяет создать конфигурацию с использованием существующего файла .config, созданного ранее или взятого из другой системы. Например,  вы можете скопировать конфигурационный файл для вашей системы из /lib/modules/$(uname -r)/build/.config в /usr/src/linux. Сделав это, можно использовать одну из целей меню конфигурации, чтобы при необходимости внести изменения. Так же при выполнении данной команды, если в новом ядре добавлено много новых возможностей — будет задано много вопросов по настройке новых параметров. (удобно для добавления новых функция текущего ядра)

Повторяю, что список всех целей команд можно увидеть, введя make help. Итак, начнем конфигурирование. Самая удобная для консоли, имхо — make menuconfig.

После запуска команды, у меня вывалилось страшное сообщение:

kernel-server:/usr/src/linux-2.6.36.1# make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***
make[1]: *** [scripts/kconfig/dochecklxdialog] Ошибка 1
make: *** [menuconfig] Ошибка 2

Чего-то не хватает, подумал Штирлиц (С)… Наверно пакета,содержащего имя ncurses и раз уж это libraries, то скорее всего, пакет начинается на lib. Я полез в репозиторий:

kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib
libcunit1-ncurses-dev - Unit Testing Library for C (ncurses) -- development files
libcunit1-ncurses - Unit Testing Library for C (ncurses)
libncurses-gst - Ncurses bindings for GNU Smalltalk
libkaya-ncurses-dev - Ncurses binding for kaya
libkaya-ncursesw-dev - Ncurses binding for kaya
libcurses-perl - Curses interface for Perl
libcurses-widgets-perl - Curses widget interface for Perl
libruby-extras - a bundle of additional libraries for Ruby
libruby1.8-extras - a bundle of additional libraries for Ruby 1.8
libtexttools-dev - Ada and C++ library for writing console applications
libtexttools2.0.5 - Ada and C++ library for writing console applications
libncurses-ruby1.8 - ruby Extension for the ncurses C library
libncurses-ruby1.9 - ruby Extension for the ncurses C library
libncurses-ruby - ruby Extension for the ncurses C library
lib64ncurses5-dev - developer's libraries for ncurses (64-bit)
lib64ncurses5 - shared libraries for terminal handling (64-bit)
libncurses5-dbg - debugging/profiling libraries for ncurses
libncurses5-dev - developer's libraries and docs for ncurses
libncursesw5-dbg - debugging/profiling libraries for ncurses
libncursesw5-dev - developer's libraries for ncursesw
libcurses-ocaml-dev - OCaml bindings for the ncurses library
libcurses-ocaml - OCaml bindings for the ncurses library
libggi-target-terminfo - General Graphics Interface TermInfo display target
libncurses5 - разделяемые библиотеки для управления терминалом
libncursesw5 - библиотеки для управления терминалом (поддержка двухбайтовых символов)

Эта строка: libncurses5-dev — developer’s libraries and docs for ncurses мне показалась нужной. Давайте установим:

kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
НОВЫЕ пакеты, которые будут установлены:
 libncurses5-dev
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 5 пакетов не обновлено.
Необходимо скачать 1546kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 6599kB.
Получено:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 [1546kB]
Получено 1546kБ за 4s (344kБ/c)
Выбор ранее не выбранного пакета libncurses5-dev.
(Чтение базы данных... на данный момент установлено 18098 файлов и каталогов.)
Распаковывается пакет libncurses5-dev (из файла .../libncurses5-dev_5.7+20081213-1_i386.deb)...
Обрабатываются триггеры для man-db ...
Настраивается пакет libncurses5-dev (5.7+20081213-1) ...

Готово, пробуем make menuconfig:

menuconfigУра! Мы видим заветное меню конфигурирования ядра. Ниже показаны различные опции, позволяющие включать компоненты в ядро или создавать модули. Когда опция подсвечена, при помощи клавиши пробела можно перемещаться между возможными вариантами для данного компонента. Чтобы активировать опцию, нажмите y, чтобы отключить — n, чтобы создать, если это возможно, модуль, нажмите m. Выход из меню: Esc Esc.

  • [*] Компонент будет включен в ядро.
  • [ ] Компонент не будет включен в ядро.
  • [M] Компонент будет оформлен в виде модуля.
  • < > Компонент не будет включен в ядро, но может быть оформлен в виде модуля.

Ниже приведу описание основных разделов конфигурирования сменю (со временем будет пополняться):

Раздел Пареметр Описание
General setup   Этот раздел позволяет добавить идентификационную строку к вашему ядру, а также ряд атрибутов, которые не имеют отношения к каким-либо разделам, но тем не менее должны быть описаны.
Enable loadable module support   Этот раздел содержит опции, определяющие, будет ли ваше ядро поддерживать модули и будут ли они подгружаться и выгружаться автоматически. Опцию «Enable loadable module support» следует включить.
Processor type and features   Этот раздел содержит специфичные для данного типа процессора конфигурационные опции. Здесь вы можете выбрать процессор и семейство процессора, которые будут поддерживаться вашим ядром. Вы можете включать или отключать поддержку ядром различных возможностей, предоставляемых данным процессором. Убедитесь, что вы включили поддержку многопроцессорных систем (symmetric multi-processing support), если в вашем системе установлено более одного процессора или процессор поддерживает технологию hyperthreading. Кроме того, для получения большей производительности графической подсистемы в системах с AGP или PCI видеокартами следует включить поддержку MTRR.
Power management options   В этом разделе помещены опции, касающиеся управления питанием. Особенно они важны для ноутбуков. Кроме контроля состояния питания, вы сможете найти там средства для контроля и мониторинга таких параметров как температура или состояние охлаждающего вентилятора.
Bus options (PCI etc.)   Этот раздел содержит опции для компьютерных шин, поддерживаемых вашей системой, таких как PCI, PCI Express и PC Card. Здесь вы можете включить поддержку файловой системы /proc/pci, которой можно пользоваться вместе с обычно используемой командой lspci.
Executable file formats / Emulations   Этот раздел содержит опции, касающиеся поддержки различных форматов бинарных файлов. Следует включить поддержку «ELF binary». Кроме того, можно включить поддержку DOS binaries для запуска их под DOSEMU, также как и других поддерживаемых соответствующими wrapper’ами бинарных файлов, таких как Java™, Python, Emacs-Lisp и т.д. Наконец, для 64-битных систем, поддерживающих 32-битную эмуляцию, вы, возможно, захотите включить поддержку 32-битных приложений.
Networking   Секция, касающаяся настроек сети, довольно велика. Здесь вы можете включить базовую поддержку сокетов, сетей TCP/IP, фильтрацию, маршрутизацию и bridging сетевых пакетов, а также поддержку различных протоколов, таких как IPV6, IPX, Appletalk и X.25. Кроме того, вы можете включить поддержку wireless, infrared и amateur radio.
Device drivers   Этот раздел также очень велик. Здесь вы можете включить поддержку большого числа аппаратных устройств, включая IDE/ATAPI или SCSI диски, или flash-диски. Включите DMA для ваших IDE устройств; иначе они будут работать в более медленной PIO-моде. Если вы хотите иметь поддержку multiple devices, таких как RAID или LVM, соответствующие опции также надо включить. Здесь вы также можете включить поддержку параллельного порта для работы с принтером через этот интерфейс. Здесь происходит конфигурирование широкого набора поддерживаемых сетевых устройств для различных сетевых протоколов, которые мы конфигурировали ранее. Кроме того, здесь вы найдете опции поддержки устройств аудио- и видео-захвата, устройств USB и IEEE 1384 (Firewire), а также различного рода устройств аппаратного мониторинга. В разделе управления символьными устройствами (Character Devices) вы, возможно, захотите включить поддержку печати через параллельный порт и поддержку direct rendering.
Firmware drivers   Этот раздел содержит несколько опций, относящихся к установке и обновлению BIOS, таких как использование функций Dell System Management на некоторых системах производства компании Dell.
File systems   Этот раздел предназначен для конфигурирования файловых систем, поддержку которых вы хотите иметь в вашем ядре, скомпилированных в виде модулей или нет. Также вы сможете найти здесь файловые системы для съемных дисковых устройств (дискеты, CD и DVD устройства), а также сетевых файловых систем, таких как NFS, SMB или CIFS. Поддержка различных типов разделов и национальных кодировок Native Language Support также располагаются в этом разделе.
Kernel hacking   Этот раздел позволяет включать режим отладки ядра и выбирать, какие дополнительные функции будут включены.
Security options   Этот раздел предназначен для конфигурирования опций защиты, а также включения и конфигурирования SELinux (Security Enhanced Linux).
Cryptographic options   В это разделе можно сконфигурировать поддержку различных алгоритмов шифрования, таких как MD4, DES и SHA256.
Library routines   Здесь вы можете указать ряд алгоритмов вычисления контрольных сумм (CRC), которые будут включены в ядро или собраны как модули.

Я привел очень краткое описание разделов конфигурирования ядра. Конкретно по выбору настроек, я наверно, сделаю отдельный пост, ибо текущий  вырос до огромных размеров. Самое лучшее описание настроек make menuconfig я нашел тут Gentoo Handbook. От себя скажу, что логичным будет выполнить make oldconfig (тем самым скопировав текущий .config установленной ОС), а потом запустить make menuconfig и отключить все ненужные функции (допустим я отключил поддержку WiFi, ненужных мне файловых систем jfs и т.п.). И в общем, я сторонник такого мнения, что заниматься оптимизацией ядра необходимо в очень крайних случаях, когда производительность ОС упирается в возможности железа. Соответственно, уменьшив размер ядра (отключив ненужные модули, включив их в состав ядра + отключив ненужные возможности), можно прибавить в производительности 1-2%. А на современных серверах, думаю это (переконфигурирование ядра) не особо актуально.

Сборка Ядра

Теперь, когда мы сконфигурировали ядро, мы готовы к его сборке. Если вы не знаете, каково состояние дерева для сборки, прежде чем приступать к конфигурированию нового ядра выполните make clean. Для более полной очистки выполните make mrproper (при этом — make mrproper — будет удален файл .config, а также некоторые другие файлы, используемые в процессе сборки).

В ходе пробы конфигурирования, желательно дать новому ядру специальное название, которое позволит вам легко его идентифицировать. Чтобы сделать это, необходимо установить значение Local version и активировать опцию Automatically append version information to the version string в соответствующей строке раздела General setup.

В принципе, для сборки ядра не требуются полномочия root, несмотря на то, что для установки нового ядра эти полномочия необходимы.

Чтобы начать сборку ядра 2.6, необходимо выполнить make.

Чтобы начать сборку ядра 2.4, необходимо выполнить 3 команды:
make dep
make bzImage
make modules
Первая создает файлы необходимых зависимостей. Вторая собирает ядро. И последняя собирает модули.

Установка нового ядра

После окончания сборки ядра, его необходимо установить. Перед установкой, необходимо выполнить make modules_install для установки модулей ядра в новый подкаталог /lib/modules. После установки модулей, необходимо выполнить make install для установки нового ядра и стартового RAM-диска (initial RAM disk) в каталог /boot и обновления конфигурации загрузчика.

Хочу обратить внимание, что в процессе сборки автоматически создается необходимый стартовый RAM-диск (initial RAM disk или initrd). Если у вас возникнет необходимость создать его вручную, это можно сделать при помощи команды mkinitrd.

После выполнения make install должен обновиться конфигурационный файл загрузчика. Но у меня он почему-то  обновился после команды update-grub.

На этом и закончу. Очень большая статья получилась. В ближайшем будущем постараюсь ее ужать.

Что еще почитать?

1. Gentoo Handbook: http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?full=1#book_part1_chap7
2. Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0: http://linux4u.jinr.ru/docs/add04/kernel-2.6-install-2.0.html
3. The Linux Kernel Module Programming Guide (Программирование ядра Linux): http://linux4u.jinr.ru/docs/add04/lkmpg.html
4. Linux From Scratch: http://linux4u.jinr.ru/docs/add04/LFS-BOOK-5.0-HTML/

Резюме

Подведу маленький итог написанному. Скажу сразу, что загрузиться с переконфигурированного ядра мне удалось раза с пятого:) Посему — пробуйте, экспериментируйте! VirtualBox вам в помощь:)

По моему мнению, указанную в статье процедуру целесообразно выполнять либо при необходимости выиграть несколько мегабайт свободной памяти, либо добавить необходимые модули/драйвера (конечно, можно и другие причины придумать, например для экспериментов :) ). При этом, в первом случае, сборка ядра растягивается на неопределенный промежуток времени и неопределенное количество попыток сборки и перезагрузки для того чтобы получить «идеально» оптимизированное под железо и заточенное под себя ядро. Во втором случае, сборка ядра сводится к нескольким шагам: 1. получение исходников, 2. подготовка ядра к компиляции, 2.1 выполнение make cloneconfig перед make menuconfig для копирования текущих настроек ядра, 3. Выполнение make menuconfig или другой цели для конфигурирования и добавления новых параметров, 4. Компиляция и установка по вышеуказанной инструкции.

Итак, сборка и настройка индивидуального ядра состоит из нескольких этапов: 1. получение исходников ядра, 2. Конфигурирование ядра, 3. Сборка (компиляция) ядра, 4. Установка ядра. первый этап — это команда wget, второй — make menuconfig, третий — make. Вот так :)

Буду рад Вашим комментариям.

upd 2010.01.15: добавил новую цель — make nconfig (спасибо S_paul за коммент)

С Уважением, Mc.Sim!


Теги: bash, dpkg, GRUB, kernel, Linux, команды, основы

Working with a Headless Raspberry PI 4 with an Ubuntu Server 18.04.4 LTS.. I am trying to configure the source kernel. I have installed libncurses-dev, kernel-package, qt4-dev-tools.

When I run ‘make menuconfig’ in the directory /linux-5.7, it shows:

  LEX     scripts/kconfig/lexer.lex.c
/bin/sh: 1: flex: not found
scripts/Makefile.host:9: recipe for target 'scripts/kconfig/lexer.lex.c' failed
make[1]: *** [scripts/kconfig/lexer.lex.c] Error 127
Makefile:588: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2

Lost on what to do, everything I have read hasn’t helped so far. My goal is to start programming device drivers, and to do so I need a configured and built kernel source tree on disk.

asked Jun 1, 2020 at 19:42

Jack's user avatar

0

In the Ubuntu’s Build Your Own Kernel guide it is stated that you have to install following programs :

sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

to be able to compile the kernel from source successfully.

answered Jun 1, 2020 at 19:48

Parsa Mousavi's user avatar

flex is not installed. Install it by

sudo apt install flex

answered Jun 1, 2020 at 19:45

Pilot6's user avatar

Pilot6Pilot6

86.1k89 gold badges196 silver badges303 bronze badges

I’m not sure this will be helpful, but when making kernel modules you can receive this same error if the makefile in use uses the keyword SUBDIRS= which was eliminated after version 5.3 of the kernel. Instances of SUBDIRS= need to be replaced by M=

Again, this is for building modules and drivers, but I would be surprised if building the kernel did not require similar references depending on the tools being used.

answered Jan 18, 2022 at 15:36

Dytraction's user avatar

0

I’m new to Linux, I found some links in Internet to Build and install Kernel(Just want to play :-P). I installed required libraries(ncurses libraries), kernel headers(sudo apt-get install linux-headers-$(uname -r)). I don’t know why I’m getting this error

batman@tx:~/kernel/linux$ sudo make menuconfig
scripts/kconfig/mconf  Kconfig
init/Kconfig:409: unexpected 'endchoice' within menu block
init/Kconfig:1759: unexpected end statement
make[1]: *** [menuconfig] Error 1
make: *** [menuconfig] Error 2

If I run without sudo I’m getting like below

batman@tx:~/kernel/linux$ make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

Ok, I copied config file from /boot/..(which has already configurations by Ubuntu OS), so I want to continue without configuration. Again, I got this

batman@tx:~/kernel/linux$ make -j5 KDEB_PKGVERSION=1.veeru dep-pkg
scripts/kconfig/conf  --silentoldconfig Kconfig
init/Kconfig:409: unexpected 'endchoice' within menu block
init/Kconfig:1759: unexpected end statement
make[2]: *** [silentoldconfig] Error 1
make[1]: *** [silentoldconfig] Error 2
make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'.  Stop.

In another video, they compiled the kernel like this

batman@tx:~/kernel/linux$ fakeroot make-kpkg -j5 --initrd --append-to-version=veeru kernel_image kernel_headers 
exec make kpkg_version=12.036+nmu3 -f /usr/share/kernel-package/ruleset/minimal.mk debian APPEND_TO_VERSION=veeru  INITRD=YES 
====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
This is kernel package version 12.036+nmu3.
test -d debian             || mkdir debian
mkdir: cannot create directory ‘debian’: Permission denied
make: *** [debian/stamp/conf/minimal_debian] Error 1
Failed to create a ./debian directory: No such file or directory at /usr/bin/make-kpkg line 984.

So, why I’m getting these errors, can someone explain that make.. command(I know -j is for jobs). Most of the times I don’t know what I’m doing(What’s happening, why I’m doing like, etc). So, is there any articles for newbies(Had good knowledge on Unix OS) like me for GREAT start to know KERNEL stuff :-)

EDIT:

Distro: Ubuntu 14. I downloaded Kernel from kernel.org(4.2 Release).

Понравилась статья? Поделить с друзьями:
  • Main device init error no description 2
  • Make fewer http requests как исправить вордпресс
  • Main decoder error failed to create audio output
  • Make exe error 126
  • Make error codes