Перейти до

FreeBSD 9.2 . Сборка ядра. HELP


Рекомендованные сообщения

Всем привет !

Помогите плиз собрать ядро !

Что делал: скачал релиз фри 9.2-i386 , установил , обновил порты:

1 portsnap fetch

2 portsnap extract

3 portsnap update

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

# cd /usr/src
# make buildworld
# make buildkernel
# make installkernel
# shutdown -r now

и в singel user

# mount -a -t ufs
# mergemaster -p
# cd /usr/src
# make installworld
# mergemaster
# reboot

 

Далее пробую собирать ядро:

# make buildkernel KERNCONF=mykernel

и получаю ошибку:

 

WARNING: kern_lock.c: enum pmc_event has too many values: 1601 > 1023

WARNING: kern_pmc.c: enum pmc_event has too many values: 1601 > 1023

WARNING: kern_rwlock.c: enum pmc_event has too many values: 1601 > 1023

WARNING: kern_sx.c: enum pmc_event has too many values: 1601 > 1023

ERROR: ctfconvert: rc = 2 No entry found [dwarf_next_cu_header(57)]

cc1: warnings being treated as errors

/usr/src/sys/modules/ctl/../../cam/ctl/ctl_frontend_cam_sim.c: In function 'cfcs_datamove':

/usr/src/sys/modules/ctl/../../cam/ctl/ctl_frontend_cam_sim.c:429: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

/usr/src/sys/modules/ctl/../../cam/ctl/ctl_frontend_cam_sim.c:458: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

*** [ctl_frontend_cam_sim.o] Error code 1

1 error

*** [all] Error code 2

1 error

*** [modules-all] Error code 2

1 error

*** [buildkernel] Error code 2

1 error

*** [buildkernel] Err

 

Помогите плиз, заранее спасибо

Відредаговано kvirtu
Ссылка на сообщение
Поделиться на других сайтах

Нахрена пересобирать мир если надо пересобрать ядро?

гуглил по ошибке, что вываливается при компиляции - пишут что надо перед компиляцией мир пересобирать, хотя я его не обновлял.

Исходники ядра  ставились из скаченного дистра.

Ссылка на сообщение
Поделиться на других сайтах

Нахрена пересобирать мир если надо пересобрать ядро?

 

Щойно замітив що у ТС немає оновлення сорсів - тоді немає змісту ні в build world ні в перекомпіляції штатного ядра (того що GENERIC)

Ссылка на сообщение
Поделиться на других сайтах

 

Нахрена пересобирать мир если надо пересобрать ядро?

 

Щойно замітив що у ТС немає оновлення сорсів - тоді немає змісту ні в build world ні в перекомпіляції штатного ядра (того що GENERIC)

 

пробовал компилить штатое ядро GENERIC - вылазит та же ошибка

Ссылка на сообщение
Поделиться на других сайтах

Мир не нужно пересобирать... Чтобы пересобрать ядро, выполняем следующие комманды:

cd /usr/src
make kernel KERNCONF=you_kernel_name_here

Соответственно, вместо you_kernel_name_here - имя ядра. 

Еще загвоздка может быть в сырцах... Откуда src брали? Сразу устанавливали, или качали (а то речь шла только о загрузке портов).

Src  обновляем через SVN. В девятке нейтивной поддержки svn еще нету, поэтому необходимо установить соответствующий порт, и с его помощью выкачать сырци. Только версию укажите 9.2.

 

P.S. На всякий случай, перед обновлением выполните команды:

rm -R /usr/src
rm -R /var/db/sup/src-all
Відредаговано muff
Ссылка на сообщение
Поделиться на других сайтах

# make buildworld

# make buildkernel

# make installkernel

 

 

Далее пробую собирать ядро:

# make buildkernel KERNCONF=mykernel

и получаю ошибку:

У вас взаимоисключающие параграфы -- вы его уже пересобрали и установили командами make buildkernel && make installkernel

с дефотной конфигурацией generic при этом вы его зачем-то пытаетесь пересобрать снова, не задав новую конфигурацию для ядра

 

где у вас файл конфигурации ядра с именем mykernel?

 

 

гуглите и воздастся.

 

 

 

Обновление исходных текстов через svn ( subversion )

Svn не входит в стандартную поставку операционной системы FreeBSD, ее нужно установить дополнительно. В портах FreeBSD, кроме обычной subversion существует еще и специализированный вариант subversion-freebsd, для обновления исходников нас интересует именно он.

freebsd /# cd /usr/portsfreebsd /# make -C devel/subversion-freebsd install clean

Для синхронизации через svn можно использовать HTTP или SVN сервер:

freebsd /# svn checkout http://svn.freebsd.org/base/releng/10/ /usr/src # через HTTP

или соответственно

freebsd /# svn checkout svn://svn.freebsd.org/base/releng/10/ /usr/src # через SVN

После завершения, снова глянем версию:

freebsd /# grep -A 2 'TYPE="' /usr/src/sys/conf/newvers.sh

TYPE="FreeBSD"

REVISION="10"

BRANCH="RELEASE"

Все как надо.

В дальнейшем, для синхронизации, достаточно сделать:

freebsd /# svn update /usr/src/

Можно приступать к сборке.

 

Обновление мира и ядра

Чистим на всякий случай директорию /usr/obj:

freebsd /# rm -rf /usr/obj

 

или как рекомендует хендбук:

freebsd /# cd /usr/obj

freebsd /# chflags -R noschg *

freebsd /# rm -rf *

freebsd /# cd /usr/src

freebsd /# make cleandir # хендбук рекомендует выполнять эту команду дважды (!)

freebsd /# make cleandir

 

Идем дерево исходных текстов:

freebsd /# cd /usr/src

 

Мир в контексте операционной системы FreeBSD, это все, что не ядро. Ключ -j команды make позволяет запустить процесс в несколько потоков, ключ -s уменьшает количество информации выводимой на экран в процессе сборки. Команда time просто считает время. затраченное на выполнение следующей за ней команды, чисто для интереса). Запускаем сборку мира и ждем.

freebsd /usr/src# time make -s -j4 buildworld

 

Если все прошло успешно, получаем:

--------------------------------------------------------------

>>> World build completed on Tue Jun 21 06:43:20 UTC 2014

--------------------------------------------------------------

4014.258u 2388.551s 1:01:03.06 174.7% 5955+2033k 14136+6961io 18494pf+0w

Все это делалось на виртуалке — заняло чвс.

Теперь собираем ядро. В параметре KERNCONF, указывается название нашего ядра, если таковое имеется, если данная опция не установлена, будет собрано ядро GENERIC, используемое системой FreeBSD по умолчанию.

В данном случае я собираю свое ядро:

freebsd /usr/src# make -j4 -s buildkernel KERNCONF=GENERIC

 

На ядро конечно времени ушло куда меньше нежели на мир:

--------------------------------------------------------------

>>> Kernel build for GARROTTE completed on Tue Jun 21 07:31:49 UTC 2014

--------------------------------------------------------------

910.735u 430.353s 14:05.53 158.6% 5824+1908k 630+6573io 8pf+0w

Устанавливаем только что скомпилированное ядро:

freebsd /usr/src# make -s installkernel KERNCONF=GENERIC

 

При установке нового ядра происходит слудующее: новое ядро копируется в папку /boot/kernel, текущее перемещается в /boot/kernel.old. В случае, если с новым ядром система не завелась, есть возможность загрузить предыдущую версию из командной строки загручика.

Теперь нужно сделать перезагрузку в однопользовательский режим. Делаем либо reboot, а затем на экране загрузчика выбираем Single user mode, цифра 4 в окне загрузчика, либо используем команду shutdown now, переводящую машину в режим single user.

В процессе загрузки, будет выдан запрос, ввести полный путь к системной оболочке, тут можно просто нажать Enter, согласившись с предложенным /bin/sh.

Если использовали shutdown now, разделы будут смонтированы как нужно, при использовании reboot, будут смонтированы 2 раздела, devfs и корневой раздел, при этом корневой будет смонтирован в режиме read only, то есть только чтение.

Если делали reboot, поступаем следующим образом:

# mount -u / # Перемонтируем корневой раздел в режим чтение/запись

# mount -a # Монтируем все что прописано в /etc/fstab

 

теперь выполняем команду

freebsd /# mergemaster -p

 

Тут нужно быть внимательным смотреть, что mergemaster предлагает сделать с тем или иным конфигом, и выбирать устраивающий вас вариант действий.

  • d - оставить старый вариант файла, удалив новый;
  • i - установить новый, удалив старый;
  • m - построчное сравнение старого и нового файла;
  • v - сравнить файлы еще раз.
При выборе построчного сравнения. на экран быдут выведены обе версии файла, слева — содержимое старого файла, справа — нового. Возможные варианты действий:
  • l - использовать вариант слева, то есть старый;
  • r - использовать вариант справа, то есть новый;
Имейте в виду, тупая установка свежих версий конфигов, не всегда является тем, что вам нужно, поскольку в процессе работы вы могли настраивать какие-то конфиги под свои нужды и выбрав установку новой версии файла, все сделанные изменения в старом файле будут утеряны.

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

freebsd /# make installworld

Процесс не многим дольше установки ядра, после окончания делаем reboot и проверяем что получилось:

freebsd /# uname -r

10-RELEASE

 

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

freebsd /# cd /usr/src && make check-old

freebsd /# yes | make delete-old

freebsd /# yes | make delete-old-libs

 

чистим за собой /usr/obj

freebsd /# cd /usr/obj && chflags -R noschg * && rm -rf *

 

 

 

 

с командами

make delete-old && make delete-old-libs надо осторожнее, ибо если со старыми либами что-то уже собрано, например, какой-то WM (например, кеды или гном), то он перестанет работать и тоже потребует пересборки из исходников.

И то же самое с ключами mergemaster -p когда ваши конфиги могут быть заменены новыми

 

 

Відредаговано andytg
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...