---
title: Руководство FreeBSD для разработчиков
authors:
  - author: The FreeBSD Documentation Project
copyright: 1995-2020 The FreeBSD Documentation Project
releaseinfo: "$FreeBSD$" 
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"] 
---

= Руководство FreeBSD для разработчиков
:doctype: book
:toc: macro
:toclevels: 2
:icons: font
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnums:
:sectnumlevels: 6
:partnums:
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:toc-title: Содержание
:table-caption: Таблица
:figure-caption: Рисунок
:example-caption: Пример

ifeval::["{backend}" == "html5"]
include::shared/mirrors.adoc[]
include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/ru/mailing-lists.adoc[]
include::shared/ru/teams.adoc[]
include::shared/ru/urls.adoc[]
:imagesdir: ../../images/books/developers-handbook/
:chapters-path: content/ru/books/developers-handbook/
endif::[]

ifeval::["{backend}" == "pdf"]
include::../../../../shared/mirrors.adoc[]
include::../../../../shared/authors.adoc[]
include::../../../../shared/releases.adoc[]
include::../../../../shared/ru/mailing-lists.adoc[]
include::../../../../shared/ru/teams.adoc[]
include::../../../../shared/ru/urls.adoc[]
:imagesdir: ../../../static/images/books/developers-handbook/
:chapters-path:
endif::[]

ifeval::["{backend}" == "epub3"]
include::../../../../shared/mirrors.adoc[]
include::../../../../shared/authors.adoc[]
include::../../../../shared/releases.adoc[]
include::../../../../shared/ru/mailing-lists.adoc[]
include::../../../../shared/ru/teams.adoc[]
include::../../../../shared/ru/urls.adoc[]
:imagesdir: ../../../static/images/books/developers-handbook/
:chapters-path:
endif::[]

[.abstract-title]
Аннотация

Добро пожаловать в руководство FreeBSD для разработчиков.

'''

toc::[]

[[introduction]]
= Введение 

[[developmentplatform]]
== Разработка во FreeBSD

Здесь необходимо будет обсудить FreeBSD в качестве платформы для разработки, подход к этому BSD, обзор архитектуры, структура /usr/src, история и так далее.

Спасибо вам за выбор FreeBSD в качестве платформы разработки! Надеемся, что она вас не подведет.

[[bsdvision]]
== Парадигма BSD

[[archoverview]]
== Обзор архитектуры

[[sourcelayout]]
== Структура /usr/src

Полный исходный код FreeBSD имеется на нашем общедоступном хранилище CVS. Как правило, исходный код устанавливается в каталог [.filename]#/usr/src#, содержащий следующие подкаталоги.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Каталог
| Описание

|[.filename]#bin/#
|Исходный код файлов из [.filename]#/bin#

|[.filename]#contrib/#
|Исходный код файлов программного обеспечения, которое предоставлено третьими лицами.

|[.filename]#crypto/#
|Исходный код DES

|[.filename]#etc/#
|Исходный код файлов из [.filename]#/etc#

|[.filename]#games/#
|Исходный код файлов из [.filename]#/usr/games#

|[.filename]#gnu/#
|Утилиты, подпадающие под условия GNU Public License

|[.filename]#include/#
|Исходный код файлов из [.filename]#/usr/include#

|[.filename]#kerberosIV/#
|Исходный код Kerbereros версии IV

|[.filename]#kerberos5/#
|Исходный код Kerbereros версии 5

|[.filename]#lib/#
|Исходный код файлов из [.filename]#/usr/lib#

|[.filename]#libexec/#
|Исходный код файлов из [.filename]#/usr/libexec#

|[.filename]#release/#
|Файлы, необходимые для выпуска релиза FreeBSD

|[.filename]#sbin/#
|Исходный код файлов из [.filename]#/sbin#

|[.filename]#secure/#
|Исходный код FreeSec

|[.filename]#share/#
|Исходный код файлов из [.filename]#/sbin#

|[.filename]#sys/#
|Исходные тексты ядра

|[.filename]#tools/#
|Инструментальные средства, использемые для обслуживания и тестирования FreeBSD

|[.filename]#usr.bin/#
|Исходный код файлов из [.filename]#/usr/bin#

|[.filename]#usr.sbin/#
|Исходный код файлов из [.filename]#/usr/sbin#
|===

[[Basics]]
= Основы
include::{chapters-path}secure/chapter.adoc[leveloffset=+1]

[[kernel]]
= Ядро

[[kernelhistory]]
== История ядра Unix

Немного истории о ядре Unix/BSD, системных вызовах, как работают процессы, блокировке, планировке задач, нити (ядра), переключение контекста, сигналы, прерывания, модули и так далее.

[[memory]]
= Память и виртуальная память

[[virtualmemory]]
== Виртуальная память

VM, постраничная подкачка и свопирование, выделение памяти, тестирование ошибок утечки памяти, mmap, vnode и так далее.

[[iosystem]]
= Система ввода/вывода

[[ufs]]
== UFS

UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata, soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs, caching

[[ipc]]
= Межпроцессное взаимодействие

[[signals]]
== Сигналы

Сигналы, конвейеры, семафоры, очереди сообщений, совместно используемая память, сокеты, двери

[[networking]]
= Работа в сети

[[sockets]]
== Сокеты

Сокеты, bpf, IP, TCP, UDP, ICMP, OSI, bridging, firewalling, NAT, коммутация и так далее

[[networkfs]]
= Сетевые файловые системы

[[afs]]
== AFS

AFS, NFS, SANs etc]

[[terminal]]
= Работа с терминалами

[[syscons]]
== Системные консоли

Syscons, tty, PCVT, последовательная консоль, хранители экрана и так далее

[[sound]]
= Звук

[[oss]]
== OSS

OSS, waveforms, etc

[[devicedrivers]]
=  Драйверы устройств

[[usb]]
== Устройства USB

Эта глава расскажет о механизмах, используемых во FreeBSD для написания драйверов для устройств на шине USB.

[[newbus]]
== NewBus

Эта глава расскажет об архитектуре NewBus во FreeBSD.

[[architectures]]
= Аппаратные платформы

[[ia32]]
== IA-32

Рассказ об архитектурных особенностях FreeBSD/x86.

[[alpha]]
== Alpha

Рассказ об архитектурных особенностях FreeBSD/alpha.

Описание ошибок выравнивания, как их исправлять и как игнорировать.

Пример ассемблерного кода для FreeBSD/alpha.

[[ia64]]
== IA-64

Рассказ об архитектурных особенностях FreeBSD/ia64.

[[debuggingpart]]
= Отладка

[[truss]]
== Truss

Различные описания того, как отлаживать отдельные компоненты системы при помощи утилит truss, ktrace, gdb, kgdb, etc

[[compatibility]]
= Обеспечение совместимости

[[linux]]
== Linux

Linux, SVR4 и так далее

// Appendices
[[appendices]]
[bibliography]
= Приложения

[[COD,1]] [1] Dave A Patterson and John L Hennessy. Copyright(R) 1998 Morgan Kaufmann Publishers, Inc. 1-55860-428-6. Morgan Kaufmann Publishers, Inc. Computer Organization and Design. The Hardware / Software Interface. 1-2.

[[APUE, 2]] [2] W. Richard Stevens. Copyright(R) 1993 Addison Wesley Longman, Inc. 0-201-56317-7. Addison Wesley Longman, Inc. Advanced Programming in the Unix Environment. 1-2.

[[DIFOS, 3]] [3] Marshall Kirk McKusick and George Neville-Neil. Copyright(R) 2004 Addison-Wesley. 0-201-70245-2. Addison-Wesley. The Design and Implementation of the FreeBSD Operating System. 1-2.

[[Phrack, 4]] [4] Aleph One. Phrack 49; "Smashing the Stack for Fun and Profit".

[[StackGuard, 5]] [5] Chrispin Cowan, Calton Pu, and Dave Maier. StackGuard; Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks.

[[OpenBSD, 6]] [6] Todd Miller and Theo de Raadt. strlcpy and strlcat -- consistent, safe string copy and concatenation.
