статей в инете завались как хочешь так ядро и собирай, я напишу чем пользуюсь я и почему так, кто не согласен пишем ниже:)
1. Копируем наше хорошее ядро, вдруг че..(да я в курсе что при инстале старое переместиться в kernel.old)
# cp -R kernel/ kernel.good/
2. Собираем инфу: что у нас на маме за контролеры и что за железо
# cat /var/run/dmesg.boot Смотрите какие контролеры, что нам пригодиться # pciconf -lv
3. Проверяем на месте ли исходные коды
# ls /sys
3.0 Если их там не оказалось, забираем или с диска или с инета:
3.0а С диска
mount /cdrom cd /cdrom ls ; должны увидеть папочки на диске cd src/ ./install.sh all cd /usr/src/ umount /cdrom
3.0b Если же у нас случайно есть инет, а диска нет то(в моем случае Фря 8.3):
cd /usr/ports/devel/subversion make config-recursive svn checkout http://svn.freebsd.org/base/releng/8.3/ /usr/src grep -A 2 'TYPE="' /usr/src/sys/conf/newvers.sh Должно показать что-то типа такого TYPE="FreeBSD" REVISION="8.3" BRANCH="RELEASE-p4"
Если захотим обновить еще когда либо исходные коды то:
svn update /usr/src/
Нам нужен еще и впн, пппое сервер со сжатием и шифрованием MPPE, то
3.1 тянем http://mavhome.dp.ua/MPPC/mppc-1.0.tgz
wget http://mavhome.dp.ua/MPPC/mppc-1.0.tgz
3.2 Распаковываем в /usr/src/sys/net
cd /usr/src/sys/net tar -xvf /usr/home/username/mppc-1.0.tgz
4. Копируем конфиг дженерика(его перепишемс и будет у нас свое ядро)
Кусочек теории
Конфигурационные файлы можно найти в каталоге /sys/”arch”/conf. В каталоге находятся несколько файлов, из которых наиболее важными являются :
DEFAULTS Это список параметров и устройств, поддержка которых включена по умолчанию для данной архитектуры.
GENERIC Этот файл содержит конфигурацию стандартного ядра.
GENERIC.hints Это файл с указаниями, который впоследствии устанавливается как /boot/device.hints. В данном файле содержится конфигурационная информация, необходимая для настройки устаревших аппаратных устройств.
MAC Этот конфигурационный файл ядра обеспечивает поддержку обязательного контроля доступа (Mandatory Access Controls) – системы многоуровневого управления доступом, используемой в средах с высокой степенью защиты. Этот конфигурационный файл требуется только в случае использования MAC.
NOTES Это комплексная конфигурация ядра для заданной аппаратной архитектуры, включены все особенности, характерные для той или иной платформы. Платформонезависимые особенности можно найти в файле /usr/src/sys/conf/NOTES.
# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL
5. Смотрим из чего наше ядро состоит и попутно правим дженерик
Параметры ядра:
cpu Данная метка указывает, какие типы процессоров поддерживаются ядром. Конфигурация ядра для аппаратной платформы amd64/EM64T включает в себя единственную запись с указанием типа процессора.
ident содержит имя ядра, произвольная строка
makeoptions Данная строка содержит инструкции для программного обеспечения, выполняющего сборку ядра. Наиболее распространенный параметр – DEBUG=-g, который сообщает компилятору о необходимости включения в ядро отладочной информации.
options Записи этого типа описывают функции ядра, которые непосредственно не связаны с аппаратным обеспечением. Сюда входят файловые системы, сетевые протоколы и отладчики, встроенные в ядро.
devices Записи этого типа описывают устройства или драйверы устройств, они содержат инструкции, которые описывают, как ядро должно взаимодействовать с определенными устройствами.
Ядро которое будет поддерживать пеньки первые нам не нужно поэтому оставляем:
cpu I686_CPU ident MYKERNEL # опции отладки ядра (в жизни, вероятно не пригодится, но если поймаете глюк # и захотите сообщить об этом разработчикам - то пригодится) makeoptions DEBUG=-g #4Crypt_and_compress options NETGRAPH_MPPC_ENCRYPTION options NETGRAPH_MPPC_COMPRESSION #4PF: device pf device pflog device pfsync options ALTQ options ALTQ_CBQ options ALTQ_RED options ALTQ_RIO options ALTQ_HFSC options ALTQ_CDNR options ALTQ_PRIQ options ALTQ_NOPCC options ALTQ_DEBUG #4MPD options NETGRAPH options NETGRAPH_ETHER options NETGRAPH_SOCKET options NETGRAPH_TEE options NETGRAPH_BPF options NETGRAPH_IFACE options NETGRAPH_KSOCKET options NETGRAPH_PPP options NETGRAPH_PPTPGRE options NETGRAPH_TCPMSS options NETGRAPH_VJC #polling НЕ делайте это, сейчас 2012год!! #options DEVICE_POLLING #options HZ=1000 # или 2000 или 4000 чем больше тем шустрее буит ходить траф #Multiple routing tables options ROUTETABLES=3 # # Определяет количество дескрипторов в системе # (0 - значит определяет "автопилот" :))) maxusers 0 # ULE планировщик(распределяет потоки) options SCHED_ULE # Возможность вытеснения (preemption) повышает эффективность FreeBSD # в многозадачном режиме. options PREEMPTION # InterNETworking IPv4 options INET # IPv6 communications protocols IPv6 options INET6 # без этого ипв6 не пашет options SCTP # файловая система FreeBSD options FFS # Этот параметр включает в ядре технологию Soft Updates, которая повышает # скорость записи на диски. Несмотря на то, что эта технология включена # в ядре, она должна быть включена для отдельных дисков. options SOFTUPDATES # позволяют определять подробные права доступа к файлам options UFS_ACL # обеспечивает поддержку индексирования каталогов, что повышает скорость # работы с каталогами, содержащими тысячи файлов. options UFS_DIRHASH # включает gjournal-based UFS журналирование options UFS_GJOURNAL # можем сделать корнем / мемори диск options MD_ROOT # Этот параметр (и все остальные параметры, оканчивающиеся на _R00T) # позволяет использовать в качестве дискового устройства для корневого раздела # другие файловые системы, отличные от FFS. Инсталлятор использует в качестве # корневой файловой системы устройство памяти (MD). Если вы используете # бездисковые системы, вам потребуется поддержка NFS в качестве корневого # раздела. Если вы устанавливаете FreeBSD на стандартный компьютер - # с жестким диском и клавиатурой, то все эти параметры вам не потребуются. #options NFSCLIENT # Network Filesystem Client #options NFSSERVER # Network Filesystem Server # Эти два параметра обеспечивают поддержку сетевой файловой системы (NFS). # Параметр NFSCLIENT позволит монтировать разделы, которые обслуживаются # другим компьютером в сети, а параметр NFSSERVER позволит обеспечить доступ # к своим разделам для других компьютеров. # Network Lock Manager #options NFSLOCKD # NFS usable as /, requires NFSCLIENT #options NFS_ROOT # MSDOS Filesystem поддержка фат разделов options MSDOSFS # ISO 9660 Filesystem поддержка разделов CD options CD9660 # Process filesystem (requires PSEUDOFS) файловая система процессов options PROCFS # Pseudo-filesystem framework options PSEUDOFS # GUID Partition Tables. options GEOM_PART_GPT # Provides labelization options GEOM_LABEL #совместимость со старыми версиями # BSD 4.3 TTY compat (sgtty) [KEEP IT!!] options COMPAT_43TTY options COMPAT_FREEBSD4 options COMPAT_FREEBSD5 options COMPAT_FREEBSD6 options COMPAT_FREEBSD7 # Delay (in ms) before probing SCSI # Задержка при загрузке для того, чтобы SCSI-контроллер успел # обнаружить все подключенные к нему устройства. #options SCSI_DELAY=5000 #options KTRACE # ktrace(1) support options STACK # stack(9) support # Эти параметры обеспечивают поддержку разделяемой памяти и межпроцессных # взаимодействий в стиле System V. На эту возможность опираются многие # программы управления базами данных. #Этот параметр предоставляет поддержку разделяемой памяти System V. #Наиболее распространенное применение этого — расширение XSHM в X, которое #многие приложения, интенсивно работающие с графикой, будут автоматически #использовать для повышения скорости работы. Если вы используете X, эта опция #будет необходима. options SYSVSHM # SYSV-style shared memory # Поддержка сообщений System V. Этот параметр добавляет в ядро # всего лишь несколько сотен байт. options SYSVMSG # SYSV-style message queues # Поддержка семафоров System V. Не настолько часто используемая # возможность, но в ядро добавляет всего несколько сотен байт. options SYSVSEM # SYSV-style semaphores options P1003_1B_SEMAPHORES # POSIX-style semaphores # Расширения реального времени, добавленные 1993 POSIX®. # Определенные приложения из коллекции используют их, например StarOffice™. options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. #options KBD_INSTALL_CDEV # inst a CDEV entry in /dev для клав USB-овых options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4) options AUDIT # Security event auditing options MAC # TrustedBSD MAC Framework options FLOWTABLE # per-cpu routing cache #options KDTRACE_HOOKS # Kernel DTrace hooks options INCLUDE_CONFIG_FILE # Include this file in kernel # параметры для отладки options KDB # Kernel debugger related code options KDB_TRACE # Print a stack trace for a panic # To make an SMP kernel, the next two lines are needed options SMP # Symmetric MultiProcessor Kernel device apic # I/O APIC (i386 only) # активируют симметричную многопроцессорную обработку (Symmetric # Multiprocessing, SMP) в ядрах, предназначенных для работы в архитектуре i386: # Параметр SMP предписывает ядру производить планирование работы процессов # на нескольких CPU, а параметр apic обеспечивает поддержку ввода/вывода для # ядер SMP. FreeBSD распространяется с поддержкой SMP, вкл по умолчанию. # Устройство apic разрешает использование набора I/O APIC для распределения прерываний. Оно может быть использовано как с однопроцессорными, так и с многопроцессорными ядрами (для последних наличие apic является обязательным). # CPU frequency control device cpufreq # Bus support. device acpi device eisa device pci # Убирать их следует в том случае, если в системе действительно нет таких шин. # Велико количество систем «без поддержки традиционных устройств» (legacy-free), # в которых шина ISA скрыта где-то внутри. # Floppy drives #device fdc # ATA and ATAPI devices device ata device atadisk # ATA disk drives device ataraid # ATA RAID drives device atapicd # ATAPI CDROM drives #device atapifd # ATAPI floppy drives #device atapist # ATAPI tape drives options ATA_STATIC_ID # Static device numbering # В статическом режиме контролер рассматривается как железяка соответственно # мы имеем 2 канала по 2 устройства 0-1 и 2-3 соответственно PrMaster PrSlave # и SecMaster SecSlave для фрюхи ad0 ad1 ad2 ad3. и если переставить винт с # PriMaster на SecMaster то тома на нем из ad0 станут ad2. # Если выключить ATA_STATIC_ID, то получаем динамическую нумерацию не по # каналам и устройствам, а по устройствам, т. е. винтам. Проще сказать так, # если у нас стоял один винт PriMaster и мы выключили эту опцию, то после # запуска нового ядра номер разделов не изменится. Теперь если переключить, # кабелем или перемычками, винт на место любого другого, например SecSlave, # он всеравно останется ad0! Он один в машине ;) # Соответственно добавив второй винт, система будет определять их старшинство # по порядку подключения # Например мы включим 2 винта на PriSlave и SecMaster # Получим PriSlave - ad0 и SecMaster - ad1. # SCSI Controllers (закоментил весь раздел) #device ahb # EISA AHA1742 family #device ahc # AHA2940 and onboard AIC7xxx devices #options AHC_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~128k to driver. #device ahd # AHA39320/29320 and onboard AIC79xx devices #options AHD_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~215k to driver. #Строки вида *_REG_PRETTY_PRINT включают режим отладки для соответствующих драйверов. # SCSI peripherals оставил ибо нужно для USB) device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE) # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller device atkbd # AT keyboard device psm # PS/2 mouse device kbdmux # keyboard multiplexer device vga # VGA video card driver device splash # Splash screen and screen saver support # syscons is the default console driver, resembling an SCO console # системная консоль - без этого пункта всё работает, но на # локальном мониторе ничего не показывает :)) device sc device agp # support several AGP chipsets # Power management support (see NOTES for more options) #device apm # Add suspend/resume support for the i8254. device pmtimer # PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support на всяк случай #device cbb # cardbus (yenta) bridge #device pccard # PC Card (16-bit) bus #device cardbus # CardBus (32-bit) bus # Serial (COM) ports device uart # Generic UART driver # Parallel port device ppc # Интерфейс параллельного порта на ISA. device ppbus # Parallel port bus (required) device lpt # Printer #device plip # TCP/IP over parallel #device ppi # ввода/вывод общего назначения (''geek port'') + IEEE1284 ввод/вывод. #device vpo # Драйвер привода Iomega Zip. Требует наличия scbus и da. # PCI Ethernet NICs. Оставил только одну:) device em # Intel PRO/1000 Gigabit Ethernet Family # Pseudo devices. # Это петлевой интерфейс, позволяющий системе взаимодействовать с самой # собой через сетевые сокеты, с использованием сетевых протоколов. device loop # Network loopback # Это устройство обеспечивает генерацию псевдослучайных чисел, необходимых в # операциях шифрования и таких важных программах, как игры. FreeBSD # обеспечивает поддержку разнообразных источников случайных чисел, и все они # объединяются в виде устройств псевдослучайных чисел # /dev/random /dev/urandom. device random # обладает массой особенностей, характерных для устройств, и потому FreeBSD # представляет его как устройство. Оставьте эту строку! device ether # Ethernet support device vlan # 802.1Q VLAN support # логический пакетный канал (logicalpacket tunnel). Используется различными # программами для обмена пакетами с ядром. Такое псевдоустройство необходимо # для поддержки РРР средствами, не входящими в ядро (userland PPP), - # обычными коммутируемыми соединениями. device tun # Packet tunnel. # это псевдотерминал. Когда вы подключаетесь к системе по протоколам telnet или # SSH, FreeBSD должна иметь возможность отслеживать терминальные сеансы, # выводить символы на экран и читать ввод с клавиатуры. Система обслуживает # удаленное соединение как обычный физический монитор и клавиатуру. # Псевдотерминал - это псевдоустройство, напоминающее терминал, # связанное с соединением. device pty # BSD-style compatibility pseudo ttys # позволяет хранить файлы в памяти. Это очень удобно для организации очень # быстрых хранилищ временных данных. Для большинства (но не для всех) # серверов Интернета диски в памяти - это просто непродуктивное # растрачивание оперативной памяти. Кроме того, диски в памяти могут # использоваться для монтирования и доступа к образам дисков. device md # Memory "disks" device gif # IPv6 and IPv4 tunneling device faith # IPv6-to-IPv4 relaying (translation) device firmware # firmware assist module # The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that 'bpf' is required for DHCP. device bpf # Berkeley packet filter # USB support все что мне потребовалось options USB_DEBUG # enable debug msgs device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device uhid # "Human Interface Devices" device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse #device urio # Diamond Rio 500 MP3 player # USB Serial devices device u3g # USB-based 3G modems (Option, Huawei, Sierra)
6. Переходим к сорцам
# cd /usr/src
7. Собираем ядро
# make buildkernel KERNCONF=MYKERNEL
8. Ставим ядро
# make installkernel KERNCONF=MYKERNEL
9. Перезагрузка
reboot
10. Если собирали удаленно то ждем, или делаем одноразовую загрузку нового ядра
App0.Дополнение о железе
Если у вас имеется аппаратное устройство, которое не поддерживается ядром GENERIC, загляните в файл NOTES. Некоторые из перечисленных в этом файле особенностей имеют неясное назначение, но если у вас имеется определенное Включения, исключения и расширения ядра устройство, то вы сможете разобраться, какая запись ему соответствует.
Механизм конфигурирования ядра FreeBSD обладает двумя интересными возможностями, которые способны упростить обслуживание ядра: ключевые слова с префиксом nо и включения. Возможность подключения позволяет добавить отдельный файл в конфигурацию ядра. Например, если имеется конфигурация ядра, которая описана как «GENERIC с парой дополнительных настроек», к ней можно было бы подключить конфигурацию GENERIC с помощью оператора include: include GENERIC Так, например, если необходимо собрать ядро, которое обладает функциональностью GENERIC, но кроме того поддерживает микропроцессор Soekris, можно было бы создать конфигурацию, составленную из следующих строк:
ident MYKERNEL
include GENERIC
options CPU_SOEKRIS
также можно использовать
nodevice
nooption
App1. Одноразовая загрузка нового ядра:
1. Копируем собраное ядро в тестовую папку хорошее ядро в папку ядра
# mv /boot/kernel /boot/kernel.test # mkdir /boot/kernel # cp /boot/kernel.good/* /boot/kernel/
2. При след запуске единожды будет загружено тестовое, если понравилось делаем его основным
nextboot -k kernel.test
3. Если все прошло гладко
# mv /boot/kernel /boot/kernel.previous # mv /boot/kernel.test /boot/kernel
Если нет просите обслуживающий персонал выключить и включить:)
App2.ПРОБЛЕМЫ:
Когда система извергает страшное проклятие: «lock order reversals» (аннулирован запрос на блокировку), Основные источники проблем – это ACPI, РАЕ(не отключается), SMP и аннулирование запроса на блокировку.
http://ipv4.sources.zabbadoz.net/freebsd/lor.html
hint. apic. 0. disabled=1. отключение в уже собраном ядре
kern. smp. disabled=1 отключение в уже собраном ядре
hint. acpi. 0. disabled=1 отключение в уже собраном ядре
App3.ОТЛАДКА при панике
1.Ядро должно быть с
makeoptions DEBUG=-g
options KDB
options KDB_TRACE
options DDB # отказ от автоматической перезагрузки
2.Получение обратной трассировки
cd /boot/kernel.panicked/
# kgdb kernel.symbols /var/crash/vmcore.0
Backtrace
3.Повтор паники в однопользовательском режиме
mount -аr
# /etc/rc.d/dumpon start
App4. LOADER
Если же чтото напутали, и сервак не стартует, то с помощью лоадера мы можем загрузить старое ядро
lsdev — список устройств доступных для загрузки
show — значение переменных загрузки из конф файла
set — изменение параметра загрузки
lsmod — модули и ядро загруженные в память
unload — полностью выгрузить из памяти ядро и модули
boot – продолжить загрузку
Загрузка альтернативного ядра
unload
load /boot/kernel.good/kernel
load /boot/kernel.good/acpi.ko все остальное по желанию
boot
App5. Модули ядра
kldstat список загруженых модулей
kldload загрузка модуля
kldload wlan_wep или kldload /boot/kernel/wlan_wep.ko
kldunload выгрузка модуля
kldunload wlan_wep.ko
прописав в /boot/kernel/loader.conf нужный модуль, он будет автоматически загружаться при запуски системы
procfs_load="YES"
App6. Выборочная пересборка модулей
По умолчанию, при построении ядра, все модули ядра так же будут пересобраны. Если вы хотите обновить ядро быстрее или построить только определённые модули, то вам нужно отредактировать файл /etc/make.conf перед началом процесса сборки ядра:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
Эта переменная устанавливает список модулей, которые нужно построить вместо построения всех модулей.
WITHOUT_MODULES = linux acpi sound ntfs
В этой переменной перечисляются основные модули, которые необходимо исключить из процесса сборки. За другими переменными, которые вы можете посчитать полезными в процессе сборки ядра, обращайтесь к странице справочника make.conf(5).