Мое ядро FreeBSD

статей в инете завались как хочешь так ядро и собирай, я напишу чем пользуюсь я и почему так, кто не согласен пишем ниже:)

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).

Комментарии: