korino писал(а):Здравствуйте. Делаю пересборку ядра. И вот в графе ЦП стоит у меня почему-то HAMMER, что есть архитектура К8. Но у меня стоит Phenom II, - архитектура К10. Где исходя из make.conf значение должно быть как amdfam10. Установка amdfam10 в конфиге ядра выдаёт ошибку. Где ругается именно на неизвестный параметр.
Т.е. Ошибка номер такой-то Неизвестный параметр amdfam10. При попытке сборки ядра.
В итоге вот и не знаю, какой правильный параметр ЦП установить. Затачивать ядро под старую архитектуру как-то глупо, когда есть более новая по сравнению с К8.
Кто знает, подскажите пожалуйста
П.С. На всякий случай добавлю. ЧТо dmseg определяет правильно. При указании в make.conf amdfam10, компилирует порты тоже правильно. ВОпрос состоит именно в избежании заточки ядра под ненужный К8,когда используется К10!
Вы, простите, чего добиваетесь? или хотите добиться?
архитектура К8
архитектура К10
заточки ядра под ненужный К8
...
amdfam10
У Вас, еще раз простите, какая-то каша из отрывочных знаний или представлений.
Вы чего в итоге хотите добиться:
- оптимальной сборки ядра или получить нестабильное и падающее ядро от непонимания разницы
между:
- архитектура;
- модель cpu;
- флаги оптимизации;
- опции компилятора влияющие на упаковку, выравнивание структур, проверку разнообразных warnings & errors
?
арихитектура:
- x86 (подразделяется на несколько видов "микроархитектур" 386, 486, 586, 686)
- x86_64 или amd64 ( кодовое название hammer - база k8, далее k10, core ...)
Обычно флаг -march
cpu:
- процессоры соответствующей архитектуры, в рамках компиляторов имеют некое обобщение и
собственное именование, связанное с поддержкой инструкций и технологий.
Обычно это флаг -mcpu
make.conf:
- CFLAGS - флаги компиляции "C"
- CXXFLAGS - аналогично для крестов
- COPTFLAGS - флаги компиляции ядра, ну
ОЧЕНЬ не рекомендуется использовать разработчиками
прим: В связи с переходом на CLANG/LLVM, указанные флаги и использование cputype очень не рекомендуется,
они отличаются от ранее используемых в gcc и разнообразных описаний в примерах и документации FreeBSD.
прим: В отличие от GCC, коммерческие компиляторы и новые проекты, отличаются большей строгостью проверки
кода и станлартов, и могут вылетать на warnings и errors, которые с легкостью пропускает gcc, выдавая криво, но
работающий код.
Возвращаемся к файлу конфигурации ядра: man 5 config
cpu в ядре, означает архитектуру и имеет заведомо и строго определенные значения:
cpu HAMMER (для всей x64 архитектуры, будь то k8, k10, core)
все - иных значений cpu для amd64 нет и фиолетово какая там модель cpu с поддержкой 64bit
для i386:
поддержка "микроархитектуры" I386_CPU - выброшена из ядра в 2004 и осталась в 4.xx FreeBSD, начиная с 6.x только
вредна архитектурно, почему и выброшена из современной SMP архитектуры OS FreeBSD.
Маленький пример, соберете систему только с "cpu I586_CPU" на-а-а, наверное Pentium II, потом переставите
диск на машину с Pentium 4 и получите облом.
С ЯДРОМ - все.
Сборка системы и портов - флаги CFLAGS и CXXFLAGS, см выше, можно использовать оптимизацию, но архиважного
значения не имеют, а вот испортить жизнь - могут, без знаний и понимания.
Важное:
- для сборки системы лучше использовать /etc/src.conf
- для всего остального /etc/make.conf
прим: опции оптимизации, присутствуют в большинстве портов, в которых она действительно нужна и имеет
место быть, и главное - проверена и основное что используют, это On флаги оптимизации.
CPUTYPE - можно использовать для сборки портов, но как уже было сказано, необходимо понимать
как и для чего и в каком виде, эту опцию использует компилятор:
# less /usr/share/mk/bsd.cpu.mk
так что самое рекомендуемое значение
native или вовсе не использовать.
прим: чтобы лучше представлять использование компилятором CPUTYPE (это НЕ ОДНО И ТО ЖЕ что "cpu в ядре"),
следует почитать документацияю gcc и clang/llvm. Хоть от gcc и ушли, но документация там в этом плане
более прозрачна чем в clang/llvm.
Смотрите crosscompiling (кросскомпиляцию) для изучения -march -mcpu.