kvirtu 315 Опубликовано: 2014-02-26 21:30:57 Share Опубликовано: 2014-02-26 21:30:57 (відредаговано) Всем привет ! Помогите плиз собрать ядро ! Что делал: скачал релиз фри 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 Помогите плиз, заранее спасибо Відредаговано 2014-02-26 21:31:47 kvirtu Ссылка на сообщение Поделиться на других сайтах
Kto To 602 Опубліковано: 2014-02-26 21:50:01 Share Опубліковано: 2014-02-26 21:50:01 Нахрена пересобирать мир если надо пересобрать ядро? Ссылка на сообщение Поделиться на других сайтах
major12 12 Опубліковано: 2014-02-26 21:53:40 Share Опубліковано: 2014-02-26 21:53:40 Варто почистити результати старого білда rm -rf /usr/obj Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2014-02-26 21:56:48 Автор Share Опубліковано: 2014-02-26 21:56:48 Нахрена пересобирать мир если надо пересобрать ядро? гуглил по ошибке, что вываливается при компиляции - пишут что надо перед компиляцией мир пересобирать, хотя я его не обновлял. Исходники ядра ставились из скаченного дистра. Ссылка на сообщение Поделиться на других сайтах
major12 12 Опубліковано: 2014-02-26 21:57:49 Share Опубліковано: 2014-02-26 21:57:49 Нахрена пересобирать мир если надо пересобрать ядро? Щойно замітив що у ТС немає оновлення сорсів - тоді немає змісту ні в build world ні в перекомпіляції штатного ядра (того що GENERIC) Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2014-02-26 21:57:50 Автор Share Опубліковано: 2014-02-26 21:57:50 Варто почистити результати старого білда rm -rf /usr/obj Спасибо, завтра попробую, отпишусь .... Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2014-02-26 21:59:08 Автор Share Опубліковано: 2014-02-26 21:59:08 Нахрена пересобирать мир если надо пересобрать ядро? Щойно замітив що у ТС немає оновлення сорсів - тоді немає змісту ні в build world ні в перекомпіляції штатного ядра (того що GENERIC) пробовал компилить штатое ядро GENERIC - вылазит та же ошибка Ссылка на сообщение Поделиться на других сайтах
kvirtu 315 Опубліковано: 2014-02-26 22:00:31 Автор Share Опубліковано: 2014-02-26 22:00:31 Если дело не в мире, откуда ошибка вылазит ? Ссылка на сообщение Поделиться на других сайтах
muff 115 Опубліковано: 2014-02-26 22:03:03 Share Опубліковано: 2014-02-26 22:03:03 (відредаговано) Мир не нужно пересобирать... Чтобы пересобрать ядро, выполняем следующие комманды: 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 Відредаговано 2014-02-26 22:05:51 muff Ссылка на сообщение Поделиться на других сайтах
Kto To 602 Опубліковано: 2014-02-26 22:34:13 Share Опубліковано: 2014-02-26 22:34:13 сто раз собирал кернел на 9.2 # cd /usr/src/sys/amd64/conf # config MYKERNEL # cd ../compile/MYKERNEL # make cleandepend && make depend && make # make install # shutdown -r now Ссылка на сообщение Поделиться на других сайтах
zaborovsky 359 Опубліковано: 2014-02-26 22:46:08 Share Опубліковано: 2014-02-26 22:46:08 (відредаговано) # 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 когда ваши конфиги могут быть заменены новыми Відредаговано 2014-02-26 23:15:00 andytg Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас