git: b98c929f06 - main - update translation of books/arch-handbook to Russian
Vladlen Popolitov <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.cvs.doc |
|---|---|
| Message-ID | <[email protected]> |
The branch main has been updated by vladlen: URL: https://cgit.FreeBSD.org/doc/commit/?id=b98c929f06d6664e6476d1372e60c797ae6b9339 commit b98c929f06d6664e6476d1372e60c797ae6b9339 Author: Vladlen Popolitov <[email protected]> AuthorDate: 2025-10-14 19:49:26 +0000 Commit: Vladlen Popolitov <[email protected]> CommitDate: 2025-10-14 19:49:26 +0000 update translation of books/arch-handbook to Russian Reviewed by: maxim Differential Revision: https://reviews.freebsd.org/D52026 --- .../content/ru/books/arch-handbook/_index.adoc | 57 + .../content/ru/books/arch-handbook/_index.po | 71 + .../books/arch-handbook/bibliography/_index.adoc | 51 + .../ru/books/arch-handbook/bibliography/_index.po | 45 + .../content/ru/books/arch-handbook/book.adoc | 49 +- .../content/ru/books/arch-handbook/book.po | 71 + .../ru/books/arch-handbook/boot/_index.adoc | 1351 +++ .../content/ru/books/arch-handbook/boot/_index.po | 4415 ++++++++++ .../books/arch-handbook/driverbasics/_index.adoc | 347 + .../ru/books/arch-handbook/driverbasics/_index.po | 867 ++ .../content/ru/books/arch-handbook/isa/_index.adoc | 1121 +++ .../content/ru/books/arch-handbook/isa/_index.po | 4237 ++++++++++ .../ru/books/arch-handbook/jail/_index.adoc | 529 ++ .../content/ru/books/arch-handbook/jail/_index.po | 1452 ++++ .../ru/books/arch-handbook/kobj/_index.adoc | 259 + .../content/ru/books/arch-handbook/kobj/_index.po | 622 ++ .../ru/books/arch-handbook/locking/_index.adoc | 145 + .../ru/books/arch-handbook/locking/_index.po | 390 + .../content/ru/books/arch-handbook/mac/_index.adoc | 5080 ++++++++++++ .../content/ru/books/arch-handbook/mac/_index.po | 8639 ++++++++++++++++++++ .../ru/books/arch-handbook/newbus/_index.adoc | 213 + .../ru/books/arch-handbook/newbus/_index.po | 711 ++ .../content/ru/books/arch-handbook/parti.adoc | 13 + .../content/ru/books/arch-handbook/parti.po | 31 + .../content/ru/books/arch-handbook/partii.adoc | 12 + .../content/ru/books/arch-handbook/partii.po | 31 + .../content/ru/books/arch-handbook/partiii.adoc | 12 + .../content/ru/books/arch-handbook/partiii.po | 31 + .../ru/books/arch-handbook/pccard/_index.adoc | 209 + .../ru/books/arch-handbook/pccard/_index.po | 710 ++ .../content/ru/books/arch-handbook/pci/_index.adoc | 424 + .../content/ru/books/arch-handbook/pci/_index.po | 1071 +++ .../ru/books/arch-handbook/scsi/_index.adoc | 1367 ++++ .../content/ru/books/arch-handbook/scsi/_index.po | 4280 ++++++++++ .../content/ru/books/arch-handbook/smp/_index.adoc | 360 + .../content/ru/books/arch-handbook/smp/_index.po | 1983 +++++ .../ru/books/arch-handbook/sound/_index.adoc | 351 + .../content/ru/books/arch-handbook/sound/_index.po | 1125 +++ .../ru/books/arch-handbook/sysinit/_index.adoc | 165 + .../ru/books/arch-handbook/sysinit/_index.po | 393 + .../content/ru/books/arch-handbook/usb/_index.adoc | 186 + .../content/ru/books/arch-handbook/usb/_index.po | 1200 +++ .../content/ru/books/arch-handbook/vm/_index.adoc | 127 + .../content/ru/books/arch-handbook/vm/_index.po | 551 ++ 44 files changed, 45342 insertions(+), 12 deletions(-) diff --git a/documentation/content/ru/books/arch-handbook/_index.adoc b/documentation/content/ru/books/arch-handbook/_index.adoc new file mode 100644 index 0000000000..7417861a9b --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/_index.adoc @@ -0,0 +1,57 @@ +--- +add_single_page_link: true +authors: + - + author: 'The FreeBSD Documentation Project' +bookOrder: 50 +copyright: '2000-2006, 2012-2023 The FreeBSD Documentation Project' +description: 'ÐÐ»Ñ ÑазÑабоÑÑиков ÑиÑÑем FreeBSD. Ð ÑÑой книге ÑаÑÑмаÑÑиваÑÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑе оÑобенноÑÑи Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð²Ð°Ð¶Ð½ÑÑ Ð¿Ð¾Ð´ÑиÑÑем ÑдÑа FreeBSD' +next: books/arch-handbook/parti +params: + path: /books/arch-handbook/ +showBookMenu: true +tags: ["Arch Handbook", "FreeBSD"] +title: 'Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD' +trademarks: ["freebsd", "apple", "microsoft", "unix", "general"] +weight: 0 +--- + += Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:partnums: +:source-highlighter: rouge +:experimental: +:images-path: books/arch-handbook/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[.abstract-title] +ÐнноÑаÑÐ¸Ñ + +ÐобÑо пожаловаÑÑ Ð² Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD. ÐÑо ÑÑководÑÑво Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ _в ÑÑадии ÑазÑабоÑки_ и ÑоздаÑÑÑÑ ÑÑилиÑми Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑаÑÑников. Ðногие ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð¿Ð¾ÐºÐ° не напиÑанÑ, а ÑÑÑеÑÑвÑÑÑие могÑÑ ÑÑебоваÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе помоÑÑ Ð² ÑабоÑе над ÑÑим пÑоекÑом, напиÑиÑе на ÑлекÑÑоннÑÑ Ð¿Ð¾ÑÑÑ ÑпиÑка ÑаÑÑÑлки {freebsd-doc}. + +ÐкÑÑалÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑого докÑменÑа вÑегда доÑÑÑпна на https://www.FreeBSD.org/[оÑиÑиалÑном веб-ÑеÑвеÑе FreeBSD]. Ðго Ñакже можно загÑÑзиÑÑ Ð² ÑазлиÑнÑÑ ÑоÑмаÑÐ°Ñ Ð¸ Ñ ÑазнÑми ваÑианÑами ÑжаÑÐ¸Ñ Ñ https://download.freebsd.org/doc/[ÑеÑвеÑа загÑÑзок FreeBSD] или одного из многоÑиÑленнÑÑ Ð·ÐµÑкал extref:{handbook}mirrors/[mirror sites, mirrors]. + +''' diff --git a/documentation/content/ru/books/arch-handbook/_index.po b/documentation/content/ru/books/arch-handbook/_index.po new file mode 100644 index 0000000000..980f503404 --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/_index.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <[email protected]>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-10-14 22:43+0300\n" +"PO-Revision-Date: 2025-08-16 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <[email protected]>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/booksarch-handbook_index/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: Yaml Front Matter Hash Value: description +#: documentation/content/en/books/arch-handbook/_index.adoc:1 +#, no-wrap +msgid "For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems" +msgstr "ÐÐ»Ñ ÑазÑабоÑÑиков ÑиÑÑем FreeBSD. Ð ÑÑой книге ÑаÑÑмаÑÑиваÑÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑе оÑобенноÑÑи Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð²Ð°Ð¶Ð½ÑÑ Ð¿Ð¾Ð´ÑиÑÑем ÑдÑа FreeBSD" + +#. type: Title = +#: documentation/content/en/books/arch-handbook/_index.adoc:1 +#: documentation/content/en/books/arch-handbook/_index.adoc:18 +#, no-wrap +msgid "FreeBSD Architecture Handbook" +msgstr "Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD" + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/_index.adoc:51 +msgid "Abstract" +msgstr "ÐнноÑаÑиÑ" + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/_index.adoc:53 +msgid "" +"Welcome to the FreeBSD Architecture Handbook. This manual is a _work in " +"progress_ and is the work of many individuals. Many sections do not yet " +"exist and some of those that do exist need to be updated. If you are " +"interested in helping with this project, send email to the {freebsd-doc}." +msgstr "" +"ÐобÑо пожаловаÑÑ Ð² Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD. ÐÑо ÑÑководÑÑво " +"Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ _в ÑÑадии ÑазÑабоÑки_ и ÑоздаÑÑÑÑ ÑÑилиÑми Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑаÑÑников. " +"Ðногие ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð¿Ð¾ÐºÐ° не напиÑанÑ, а ÑÑÑеÑÑвÑÑÑие могÑÑ ÑÑебоваÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ. " +"ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе помоÑÑ Ð² ÑабоÑе над ÑÑим пÑоекÑом, напиÑиÑе на ÑлекÑÑоннÑÑ " +"поÑÑÑ ÑпиÑка ÑаÑÑÑлки {freebsd-doc}." + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/_index.adoc:55 +msgid "" +"The latest version of this document is always available from the " +"link:https://www.FreeBSD.org/[FreeBSD World Wide Web server]. It may also be " +"downloaded in a variety of formats and compression options from the https://" +"download.freebsd.org/doc/[FreeBSD download server] or one of the numerous " +"extref:{handbook}[mirror sites, mirrors]." +msgstr "" +"ÐкÑÑалÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑого докÑменÑа вÑегда доÑÑÑпна на https://www.FreeBSD.org/" +"[оÑиÑиалÑном веб-ÑеÑвеÑе FreeBSD]. Ðго Ñакже можно загÑÑзиÑÑ Ð² ÑазлиÑнÑÑ " +"ÑоÑмаÑÐ°Ñ Ð¸ Ñ ÑазнÑми ваÑианÑами ÑжаÑÐ¸Ñ Ñ https://download.freebsd.org/doc/" +"[ÑеÑвеÑа загÑÑзок FreeBSD] или одного из многоÑиÑленнÑÑ Ð·ÐµÑкал extref:" +"{handbook}mirrors/[mirror sites, mirrors]." + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/_index.adoc:56 +msgid "'''" +msgstr "'''" diff --git a/documentation/content/ru/books/arch-handbook/bibliography/_index.adoc b/documentation/content/ru/books/arch-handbook/bibliography/_index.adoc new file mode 100644 index 0000000000..96ff388686 --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/bibliography/_index.adoc @@ -0,0 +1,51 @@ +--- +description: 'ÐиблиогÑаÑÐ¸Ñ Ð ÑководÑÑва по аÑÑ Ð¸ÑекÑÑÑе FreeBSD' +params: + path: /books/arch-handbook/bibliography/ +prev: books/arch-handbook/partiii +showBookMenu: true +tags: ["bibliography", "Arch Handbook", "FreeBSD"] +title: ÐиблиогÑаÑÐ¸Ñ +weight: 20 +--- + +[appendix] +[[bibliography]] += ÐиблиогÑаÑÐ¸Ñ +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:sectnumoffset: A +:partnums: +:source-highlighter: rouge +:experimental: +:images-path: books/arch-handbook/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +:imagesdir: ../../../../images/{images-path} +endif::[] +ifndef::book[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +toc::[] +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +toc::[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[1] _Marshall Kirk McKusick, Keith Bostic, Michael J Karels, and John S Quarterman._ Copyright © 1996 Addison-Wesley Publishing Company, Inc.. 0-201-54979-4. Ðздано Addison-Wesley Publishing Company, Inc.. The Design and Implementation of the 4.4 BSD Operating System. 1-2. diff --git a/documentation/content/ru/books/arch-handbook/bibliography/_index.po b/documentation/content/ru/books/arch-handbook/bibliography/_index.po new file mode 100644 index 0000000000..c5253e7d57 --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/bibliography/_index.po @@ -0,0 +1,45 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <[email protected]>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-10-14 22:43+0300\n" +"PO-Revision-Date: 2025-07-12 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <[email protected]>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/booksarch-handbookbibliography_index/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: Yaml Front Matter Hash Value: description +#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:1 +#, no-wrap +msgid "Bibliography of the FreeBSD Architecture Handbook" +msgstr "ÐиблиогÑаÑÐ¸Ñ Ð ÑководÑÑва по аÑÑ Ð¸ÑекÑÑÑе FreeBSD" + +#. type: Title = +#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:1 +#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:14 +#, no-wrap +msgid "Bibliography" +msgstr "ÐиблиогÑаÑиÑ" + +#. type: appendix +#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:51 +msgid "" +"[1] _Marshall Kirk McKusick, Keith Bostic, Michael J Karels, and John S " +"Quarterman._ Copyright © 1996 Addison-Wesley Publishing Company, Inc.. " +"0-201-54979-4. Addison-Wesley Publishing Company, Inc.. The Design and " +"Implementation of the 4.4 BSD Operating System. 1-2." +msgstr "" +"[1] _Marshall Kirk McKusick, Keith Bostic, Michael J Karels, and John S " +"Quarterman._ Copyright © 1996 Addison-Wesley Publishing Company, Inc.. " +"0-201-54979-4. Ðздано Addison-Wesley Publishing Company, Inc.. The Design " +"and Implementation of the 4.4 BSD Operating System. 1-2." diff --git a/documentation/content/ru/books/arch-handbook/book.adoc b/documentation/content/ru/books/arch-handbook/book.adoc index 02d82d2ae2..22f9cfba0b 100644 --- a/documentation/content/ru/books/arch-handbook/book.adoc +++ b/documentation/content/ru/books/arch-handbook/book.adoc @@ -1,14 +1,16 @@ --- -title: FreeBSD Architecture Handbook -authors: - - author: The FreeBSD Documentation Project -copyright: 2000-2006, 2012-2013 The FreeBSD Documentation Project -description: FreeBSD Architecture Handbook -trademarks: ["freebsd", "apple", "microsoft", "unix", "general"] +add_split_page_link: true +authors: + - + author: 'The FreeBSD Documentation Project' +copyright: '2000-2006, 2012-2023 The FreeBSD Documentation Project' +description: 'ÐÐ»Ñ ÑазÑабоÑÑиков ÑиÑÑем FreeBSD. Ð ÑÑой книге ÑаÑÑмаÑÑиваÑÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑе оÑобенноÑÑи Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð²Ð°Ð¶Ð½ÑÑ Ð¿Ð¾Ð´ÑиÑÑем ÑдÑа FreeBSD' tags: ["Arch Handbook", "FreeBSD"] +title: 'Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD' +trademarks: ["freebsd", "apple", "microsoft", "unix", "general"] --- -= FreeBSD Architecture Handbook += Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD :doctype: book :toc: macro :toclevels: 2 @@ -20,7 +22,6 @@ tags: ["Arch Handbook", "FreeBSD"] :experimental: :book: true :pdf: false -:images-path: books/arch-handbook/ ifdef::env-beastie[] ifdef::backend-html5[] @@ -44,15 +45,39 @@ ifndef::env-beastie[] include::../../../../../shared/asciidoctor.adoc[] endif::[] +[.abstract-title] +ÐнноÑаÑÐ¸Ñ + +ÐобÑо пожаловаÑÑ Ð² Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD. ÐÑо ÑÑководÑÑво Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ _в ÑÑадии ÑазÑабоÑки_ и ÑоздаÑÑÑÑ ÑÑилиÑми Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑаÑÑников. Ðногие ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð¿Ð¾ÐºÐ° не напиÑанÑ, а ÑÑÑеÑÑвÑÑÑие могÑÑ ÑÑебоваÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе помоÑÑ Ð² ÑабоÑе над ÑÑим пÑоекÑом, напиÑиÑе на ÑлекÑÑоннÑÑ Ð¿Ð¾ÑÑÑ ÑпиÑка ÑаÑÑÑлки {freebsd-doc}. + +ÐкÑÑалÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑого докÑменÑа вÑегда доÑÑÑпна на https://www.FreeBSD.org/[оÑиÑиалÑном веб-ÑеÑвеÑе FreeBSD]. Ðго Ñакже можно загÑÑзиÑÑ Ð² ÑазлиÑнÑÑ ÑоÑмаÑÐ°Ñ Ð¸ Ñ ÑазнÑми ваÑианÑами ÑжаÑÐ¸Ñ Ñ https://download.freebsd.org/doc/[ÑеÑвеÑа загÑÑзок FreeBSD] или одного из многоÑиÑленнÑÑ Ð·ÐµÑкал extref:{handbook}mirrors/[mirror sites, mirrors]. + ''' toc::[] // Section one - -include::{chapters-path}locking/chapter.adoc[leveloffset=+1] +include::{chapters-path}parti.adoc[] +include::{chapters-path}boot/_index.adoc[leveloffset=+1] +include::{chapters-path}locking/_index.adoc[leveloffset=+1] +include::{chapters-path}kobj/_index.adoc[leveloffset=+1] +include::{chapters-path}jail/_index.adoc[leveloffset=+1] +include::{chapters-path}sysinit/_index.adoc[leveloffset=+1]] +include::{chapters-path}mac/_index.adoc[leveloffset=+1] +include::{chapters-path}vm/_index.adoc[leveloffset=+1] +include::{chapters-path}smp/_index.adoc[leveloffset=+1] // Section two +include::{chapters-path}partii.adoc[] +include::{chapters-path}driverbasics/_index.adoc[leveloffset=+1] +include::{chapters-path}isa/_index.adoc[leveloffset=+1] +include::{chapters-path}pci/_index.adoc[leveloffset=+1] +include::{chapters-path}scsi/_index.adoc[leveloffset=+1] +include::{chapters-path}usb/_index.adoc[leveloffset=+1] +include::{chapters-path}newbus/_index.adoc[leveloffset=+1] +include::{chapters-path}sound/_index.adoc[leveloffset=+1] +include::{chapters-path}pccard/_index.adoc[leveloffset=+1] -include::{chapters-path}driverbasics/chapter.adoc[leveloffset=+1] -include::{chapters-path}sound/chapter.adoc[leveloffset=+1] +// Section three +include::{chapters-path}partiii.adoc[] +include::{chapters-path}bibliography/_index.adoc[leveloffset=+1] diff --git a/documentation/content/ru/books/arch-handbook/book.po b/documentation/content/ru/books/arch-handbook/book.po new file mode 100644 index 0000000000..a099efa2f7 --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/book.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <[email protected]>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-10-14 22:43+0300\n" +"PO-Revision-Date: 2025-08-16 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <[email protected]>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/booksarch-handbookbook/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: Yaml Front Matter Hash Value: description +#: documentation/content/en/books/arch-handbook/book.adoc:1 +#, no-wrap +msgid "For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems" +msgstr "ÐÐ»Ñ ÑазÑабоÑÑиков ÑиÑÑем FreeBSD. Ð ÑÑой книге ÑаÑÑмаÑÑиваÑÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑнÑе оÑобенноÑÑи Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð²Ð°Ð¶Ð½ÑÑ Ð¿Ð¾Ð´ÑиÑÑем ÑдÑа FreeBSD" + +#. type: Title = +#: documentation/content/en/books/arch-handbook/book.adoc:1 +#: documentation/content/en/books/arch-handbook/book.adoc:12 +#, no-wrap +msgid "FreeBSD Architecture Handbook" +msgstr "Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD" + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/book.adoc:49 +msgid "Abstract" +msgstr "ÐнноÑаÑиÑ" + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/book.adoc:51 +msgid "" +"Welcome to the FreeBSD Architecture Handbook. This manual is a _work in " +"progress_ and is the work of many individuals. Many sections do not yet " +"exist and some of those that do exist need to be updated. If you are " +"interested in helping with this project, send email to the {freebsd-doc}." +msgstr "" +"ÐобÑо пожаловаÑÑ Ð² Ð ÑководÑÑво по аÑÑ Ð¸ÑекÑÑÑе FreeBSD. ÐÑо ÑÑководÑÑво " +"Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ _в ÑÑадии ÑазÑабоÑки_ и ÑоздаÑÑÑÑ ÑÑилиÑми Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑаÑÑников. " +"Ðногие ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð¿Ð¾ÐºÐ° не напиÑанÑ, а ÑÑÑеÑÑвÑÑÑие могÑÑ ÑÑебоваÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ. " +"ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе помоÑÑ Ð² ÑабоÑе над ÑÑим пÑоекÑом, напиÑиÑе на ÑлекÑÑоннÑÑ " +"поÑÑÑ ÑпиÑка ÑаÑÑÑлки {freebsd-doc}." + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/book.adoc:53 +msgid "" +"The latest version of this document is always available from the " +"link:https://www.FreeBSD.org/[FreeBSD World Wide Web server]. It may also be " +"downloaded in a variety of formats and compression options from the https://" +"download.freebsd.org/doc/[FreeBSD download server] or one of the numerous " +"extref:{handbook}[mirror sites, mirrors]." +msgstr "" +"ÐкÑÑалÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑого докÑменÑа вÑегда доÑÑÑпна на https://www.FreeBSD.org/" +"[оÑиÑиалÑном веб-ÑеÑвеÑе FreeBSD]. Ðго Ñакже можно загÑÑзиÑÑ Ð² ÑазлиÑнÑÑ " +"ÑоÑмаÑÐ°Ñ Ð¸ Ñ ÑазнÑми ваÑианÑами ÑжаÑÐ¸Ñ Ñ https://download.freebsd.org/doc/" +"[ÑеÑвеÑа загÑÑзок FreeBSD] или одного из многоÑиÑленнÑÑ Ð·ÐµÑкал extref:" +"{handbook}mirrors/[mirror sites, mirrors]." + +#. type: .abstract-title +#: documentation/content/en/books/arch-handbook/book.adoc:55 +msgid "'''" +msgstr "'''" diff --git a/documentation/content/ru/books/arch-handbook/boot/_index.adoc b/documentation/content/ru/books/arch-handbook/boot/_index.adoc new file mode 100644 index 0000000000..5b356b42ac --- /dev/null +++ b/documentation/content/ru/books/arch-handbook/boot/_index.adoc @@ -0,0 +1,1351 @@ +--- +description: 'ÐаÑалÑÐ½Ð°Ñ Ð·Ð°Ð³ÑÑзка и иниÑиализаÑÐ¸Ñ ÑдÑа' +next: books/arch-handbook/locking +params: + path: /books/arch-handbook/boot/ +prev: books/arch-handbook/parti +showBookMenu: true +tags: ["boot", "BIOS", "kernel", "MBR", "FreeBSD"] +title: 'Ðлава 1. ÐаÑалÑÐ½Ð°Ñ Ð·Ð°Ð³ÑÑзка и иниÑиализаÑÐ¸Ñ ÑдÑа' +weight: 2 +--- + +[[boot]] += ÐаÑалÑÐ½Ð°Ñ Ð·Ð°Ð³ÑÑзка и иниÑиализаÑÐ¸Ñ ÑдÑа +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:sectnumoffset: 1 +:partnums: +:source-highlighter: rouge +:experimental: +:images-path: books/arch-handbook/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +:imagesdir: ../../../../images/{images-path} +endif::[] +ifndef::book[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +toc::[] +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +toc::[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[[boot-synopsis]] +== ÐÐ±Ð·Ð¾Ñ + +ÐÑа глава пÑедÑÑавлÑÐµÑ Ñобой Ð¾Ð±Ð·Ð¾Ñ Ð¿ÑоÑеÑÑов загÑÑзки и иниÑиализаÑии ÑиÑÑемÑ, наÑÐ¸Ð½Ð°Ñ Ñ POST в BIOS (микÑопÑогÑамме) и заканÑÐ¸Ð²Ð°Ñ Ñозданием пеÑвого полÑзоваÑелÑÑкого пÑоÑеÑÑа. ÐоÑколÑÐºÑ Ð½Ð°ÑалÑнÑе ÑÑÐ°Ð¿Ñ Ð·Ð°Ð³ÑÑзки ÑиÑÑÐµÐ¼Ñ ÑилÑно завиÑÑÑ Ð¾Ñ Ð°ÑÑ Ð¸ÑекÑÑÑÑ, в каÑеÑÑве пÑимеÑа иÑполÑзÑеÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑа IA-32. Ðднако аÑÑ Ð¸ÑекÑÑÑÑ AMD64 и ARM64 гоÑаздо важнее и инÑеÑеÑнее, и Ð¸Ñ ÑледÑÐµÑ ÑаÑÑмоÑÑеÑÑ Ð² ближайÑем бÑдÑÑем в ÑооÑвеÑÑÑвии Ñ Ñемой ÑÑого докÑмРµÐ½Ñа. + +ÐÑоÑеÑÑ Ð·Ð°Ð³ÑÑзки FreeBSD Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдивиÑелÑно ÑложнÑм. ÐоÑле пеÑедаÑи ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ BIOS Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑполниÑÑ Ð·Ð½Ð°ÑиÑелÑнÑй обÑем низкоÑÑовневой наÑÑÑойки пеÑед загÑÑзкой и вÑполнением ÑдÑа. ÐÑа наÑÑÑойка должна бÑÑÑ Ð²Ñполнена пÑоÑÑÑм и гибким ÑпоÑобом, пÑедоÑÑавлÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑиÑокие возможноÑÑи Ð´Ð»Ñ Ð½Ð°ÑÑÑойки и адапÑаÑии. + +[[boot-overview]] +== ÐÐ±Ð·Ð¾Ñ + +ÐÑоÑеÑÑ Ð·Ð°Ð³ÑÑзки â ÑÑо опеÑаÑиÑ, кÑайне завиÑÐ¸Ð¼Ð°Ñ Ð¾Ñ Ð¾Ð±Ð¾ÑÑдованиÑ. Ðе ÑолÑко Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ аÑÑ Ð¸ÑекÑÑÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа должен бÑÑÑ Ð½Ð°Ð¿Ð¸Ñан код, но Ñакже могÑÑ ÑÑÑеÑÑвоваÑÑ ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð·Ð°Ð³ÑÑзки в ÑÐ°Ð¼ÐºÐ°Ñ Ð¾Ð´Ð½Ð¾Ð¹ аÑÑ Ð¸ÑекÑÑÑÑ. ÐапÑимеÑ, ÑпиÑок Ñайлов в каÑалоге [.filename]#stand# показÑÐ²Ð°ÐµÑ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво кода, завиÑÑÑего Ð¾Ñ Ð°ÑÑ Ð¸ÑекÑÑÑÑ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из поддеÑживаемÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑ ÑÑÑеÑÑвÑÐµÑ Ð¾ÑделÑнÑй каÑалог. FreeBSD поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑандаÑÑ Ð·Ð°Ð³ÑÑзки CS M (Compatibility Support Module). Таким обÑазом, CSM поддеÑживаеÑÑÑ (как Ñ GPT, Ñак и Ñ MBR ÑазмеÑкой), а Ñакже загÑÑзка ÑеÑез UEFI (GP T полноÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ, MBR â в оÑновном). Также поддеÑживаеÑÑÑ Ð·Ð°Ð³ÑÑзка Ñайлов Ñ ext2fs, MSDOS, UFS и ZFS. FreeBSD поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð³ÑÑзоÑного окÑÑÐ¶ÐµÐ½Ð¸Ñ ZFS, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ñновной ÐС пеÑедаваÑÑ Ð´ÐµÑали о Ñом, ÑÑо загÑÑжаÑÑ, вÑÑ Ð¾Ð´ÑÑие за Ñамки пÑоÑÑого Ñаздела, как ÑÑо бÑло возможно Ñанее. Ðднако в наÑи дни UEFI более акÑÑален, Ñем CSM. Ð ÑледÑÑÑем пÑимеÑе показана загÑÑзка компÑÑÑеÑа x86 Ñ Ð¶ÑÑÑкого диÑка Ñ MBR-ÑазмеÑкой, где иÑполÑзÑеÑÑÑ Ð¼ÑлÑÑ Ð¸Ð·Ð°Ð³ÑÑзÑик FreeBSD [.filename]#boot0#, ÑÐ¾Ñ ÑанÑннÑй в Ñамом пеÑвом ÑекÑоÑе. ÐÑÐ¾Ñ Ð·Ð°Ð³ÑÑзоÑнÑй код запÑÑÐºÐ°ÐµÑ ÑÑÑÑ ÑÑапнÑй Ð ¿ÑоÑеÑÑ Ð·Ð°Ð³ÑÑзки FreeBSD. + +ÐлÑÑ Ðº Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ ÑÑого пÑоÑеÑÑа заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо он ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· поÑледоваÑелÑнÑÑ ÑÑадий возÑаÑÑаÑÑей ÑложноÑÑи. ÐÑи ÑÑадии â [.filename]#boot1#, [.filename]#boot2# и [.filename]#loader# (подÑобнее Ñм. man:boot[8]). СиÑÑема загÑÑзки вÑполнÑÐµÑ ÐºÐ°Ð¶Ð´ÑÑ ÑÑÐ°Ð´Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑно. ÐоÑледнÑÑ ÑÑадиÑ, [.filename]#loader#, оÑвеÑÐ°ÐµÑ Ð·Ð° загÑÑÐ·ÐºÑ ÑдÑа FreeBSD. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÐ°Ð´Ð¸Ñ ÑаÑÑмаÑÑиваеÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ . + +ÐÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð²Ñвода, ÑгенеÑиÑованного на ÑазлиÑнÑÑ ÑÑÐ°Ð¿Ð°Ñ Ð·Ð°Ð³ÑÑзки. ФакÑиÑеÑкий вÑвод Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¼Ð°ÑинÑ: + +[.informaltable] +[cols="20%,80%", frame="none"] +|=== + +|*ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ FreeBSD* +|*ÐÑвод (Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ)* + +|`boot0` +a| + +[source,bash] +.... +F1 FreeBSD +F2 BSD +F5 Disk 2 +.... + +|`boot2` footnote:[ÐÑо пÑиглаÑение поÑвиÑÑÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð¶Ð¼ÐµÑ ÐºÐ»Ð°Ð²Ð¸ÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле вÑбоÑа ÐС Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки на ÑÑапе boot0.] +a| + +[source,bash] +.... +>>FreeBSD/x86 BOOT +Default: 0:ad(0p4)/boot/loader +boot: +.... + +|[.filename]#loader# +a| + +[source,bash] +.... +BTX loader 1.00 BTX version is 1.02 +Consoles: internal video/keyboard +BIOS drive C: is disk0 +BIOS 639kB/2096064kB available memory + +FreeBSD/x86 bootstrap loader, Revision 1.1 +Console internal video/keyboard +([email protected], Fri Apr 9 04:04:45 UTC 2021) +Loading /boot/defaults/loader.conf +/boot/kernel/kernel text=0xed9008 data=0x117d28+0x176650 syms=[0x8+0x137988+0x8+0x1515f8] +.... + +|ÑдÑо ÑиÑÑÐµÐ¼Ñ +a| + +[source,bash] +.... +Copyright (c) 1992-2021 The FreeBSD Project. +Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 + The Regents of the University of California. All rights reserved. +FreeBSD is a registered trademark of The FreeBSD Foundation. +FreeBSD 13.0-RELEASE 0 releng/13.0-n244733-ea31abc261f: Fri Apr 9 04:04:45 UTC 2021 + [email protected]:/usr/obj/usr/src/i386.i386/sys/GENERIC i386 +FreeBSD clang version 11.0.1 ([email protected]:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe) +.... + +|=== + +[[boot-bios]] +== BIOS + +ÐÑи вклÑÑении компÑÑÑеÑа ÑегиÑÑÑÑ Ð¿ÑоÑеÑÑоÑа ÑÑÑанавливаÑÑÑÑ Ð² некоÑоÑÑе пÑедопÑеделÑннÑе знаÑениÑ. Ðдин из ÑегиÑÑÑов â ÑÑо ÑегиÑÑÑ _ÑказаÑÐµÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´_, и его знаÑение поÑле вклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑÑко опÑеделено: ÑÑо 32-биÑное знаÑение `0xfffffff0`. РегиÑÑÑ ÑказаÑÐµÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ (Ñакже извеÑÑнÑй как СÑÑÑÑик Ðоманд) ÑказÑÐ²Ð°ÐµÑ Ð½Ð° код, коÑоÑÑй должен бÑÑÑ Ð²Ñполнен пÑоÑеÑÑоÑом. ÐÑÑ Ð¾Ð´Ð¸Ð½ важнÑй ÑегиÑÑÑ â ÑÑо 32-биÑнÑй ÑпÑавлÑÑÑий ÑегиÑÑÑ `cr0`, и его Ð·Ð½Ð°Ñ ÐµÐ½Ð¸Ðµ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле пеÑезагÑÑзки Ñавно `0`. Ðдин из биÑов ``cr0``, Ð±Ð¸Ñ PE (Protection Enabled, ÐаÑиÑа ÐклÑÑена), ÑказÑваеÑ, Ñабо ÑÐ°ÐµÑ Ð»Ð¸ пÑоÑеÑÑÐ¾Ñ Ð² 32-биÑном заÑиÑÑнном Ñежиме или 16-биÑном ÑеалÑном Ñежиме. ÐоÑколÑÐºÑ ÑÑÐ¾Ñ Ð±Ð¸Ñ ÑбÑоÑен пÑи загÑÑзке, пÑоÑеÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÑкаеÑÑÑ Ð² 16-биÑном ÑеалÑном Ñежиме. РеалÑнÑй Ñежим ознаÑаеÑ, ÑÑеди пÑоÑего, ÑÑо линейнÑе и ÑизиÑеÑкие адÑеÑа иденÑиÑнÑ. ÐÑиÑина, по коÑоÑой пÑоÑеÑÑÐ¾Ñ Ð½Ðµ запÑÑкаеÑÑÑ ÑÑÐ°Ð·Ñ Ð² 32-биÑном заÑиÑÑнном Ñежиме, â ÑÑо обÑаÑÐ½Ð°Ñ ÑовмеÑÑимоÑÑÑ. Ð ÑаÑÑноÑÑи, пÑоÑеÑÑ Ð·Ð°Ð³ÑÑзки завиÑÐ¸Ñ Ð¾Ñ ÑÑлÑг, пÑедоÑÑавлÑемÑÑ BIOS, а Ñам BIOS ÑабоÑÐ°ÐµÑ Ð² ÑÑÑаÑевÑем 16-биÑном коде. + +ÐнаÑение `0xfffffff0` немного менÑÑе 4 ÐÐ, поÑÑомÑ, еÑли в маÑине Ð½ÐµÑ 4 ÐÐ ÑизиÑеÑкой памÑÑи, оно не Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ Ð½Ð° дейÑÑвиÑелÑнÑй адÑÐµÑ Ð¿Ð°Ð¼ÑÑи. ÐппаÑаÑное обеÑпеÑение компÑÑÑеÑа пÑеобÑазÑÐµÑ ÑÑÐ¾Ñ Ð°Ð´ÑÐµÑ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½ ÑказÑвал на блок памÑÑи BIOS. + +BIOS (Basic Input Output System) â ÑÑо микÑоÑÑ ÐµÐ¼Ð° на маÑеÑинÑкой плаÑе, коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾ÑноÑиÑелÑно неболÑÑой обÑем памÑÑи ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ (ROM). ÐÑа памÑÑÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ ÑазлиÑнÑе низкоÑÑовневÑе пÑоÑедÑÑÑ, ÑпеÑиÑиÑнÑе Ð´Ð»Ñ Ð¾Ð±Ð¾ÑÑдованиÑ, поÑÑавлÑемого Ñ Ð¼Ð°ÑеÑинÑкой плаÑой. ÐÑоÑеÑÑÐ¾Ñ ÑнаÑала пеÑÐµÑ Ð¾Ð´Ð¸Ñ Ð¿Ð¾ адÑеÑÑ 0xfffffff0, коÑоÑÑй ÑакÑиÑеÑки Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² памÑÑи BIOS. ÐбÑÑно по ÑÑÐ¾Ð¼Ñ Ð°Ð´ÑеÑÑ ÑодеÑжиÑÑÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð° к пÑоÑедÑÑам POST BIOS. + +POST (Power On Self Test) â ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð¿ÑоÑедÑÑ, вклÑÑаÑÑÐ¸Ñ Ð¿ÑовеÑÐºÑ Ð¿Ð°Ð¼ÑÑи, пÑовеÑÐºÑ ÑиÑÑемной ÑÐ¸Ð½Ñ Ð¸ дÑÑгÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑÑ Ð¸Ð½Ð¸ÑиализаÑиÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑеÑÑÐ¾Ñ Ð¼Ð¾Ð³ пÑавилÑно наÑÑÑоиÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑ. ÐажнÑм ÑÑапом на ÑÑой ÑÑадии ÑвлÑеÑÑÑ Ð¾Ð¿Ñеделение загÑÑзоÑного ÑÑÑÑойÑÑва. СовÑеменнÑе ÑеализаÑии BIOS позволÑÑÑ Ð²ÑбиÑаÑÑ Ð·Ð°Ð³ÑÑзоÑное ÑÑÑÑойÑÑво, обеÑпеÑÐ¸Ð²Ð°Ñ Ð·Ð°Ð³ÑÑÐ·ÐºÑ Ñ Ð´Ð¸ÑкеÑÑ, CD-ROM, жеÑÑкого диÑка или дÑÑÐ³Ð¸Ñ ÑÑÑÑойÑÑв. + +СамÑм поÑледним дейÑÑвием в POST ÑвлÑеÑÑÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ `INT 0x19`. ÐбÑабоÑÑик `INT 0x19` ÑÑиÑÑÐ²Ð°ÐµÑ 512 Ð±Ð°Ð¹Ñ Ð¸Ð· пеÑвого ÑекÑоÑа загÑÑзоÑного ÑÑÑÑойÑÑва в памÑÑÑ Ð¿Ð¾ адÑеÑÑ `0x7c00`. ТеÑмин _пеÑвÑй ÑекÑоÑ_ пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¸Ð· аÑÑ Ð¸ÑекÑÑÑÑ Ð¶ÑÑÑÐºÐ¸Ñ Ð´Ð¸Ñков, где магниÑÐ½Ð°Ñ Ð¿Ð»Ð°ÑÑина Ñазделена на множеÑÑво ÑилиндÑиÑеÑÐºÐ¸Ñ Ð´Ð¾Ñожек. ÐоÑожки нÑмеÑÑÑÑÑÑ, и ÐºÐ°Ð¶Ð´Ð°Ñ Ð´Ð¾Ñожка Ñазделена на неÑколÑко (обÑÑно 64) ÑекÑоÑов. ÐÑмеÑаÑÐ¸Ñ Ð´Ð¾Ñожек наÑинаеÑÑÑ Ñ 0, но нÑмеÑаÑÐ¸Ñ ÑекÑоÑов на ÑинаеÑÑÑ Ñ 1. ÐоÑожка 0 Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð½Ð° внеÑней ÑÑоÑоне магниÑной плаÑÑинÑ, а ÑекÑÐ¾Ñ 1, пеÑвÑй ÑекÑоÑ, Ð¸Ð¼ÐµÐµÑ Ð¾Ñобо е назнаÑение. Ðн Ñакже назÑваеÑÑÑ MBR (Master Boot Record) или ÐÐ»Ð°Ð²Ð½Ð°Ñ ÐагÑÑзоÑÐ½Ð°Ñ ÐапиÑÑ. ÐÑÑалÑнÑе ÑекÑоÑÑ Ð½Ð° пеÑвой доÑожке не иÑполÑзÑÑÑÑÑ. + +ÐÑÐ¾Ñ ÑекÑÐ¾Ñ ÑвлÑеÑÑÑ Ð½Ð°Ñей ÑоÑкой Ð²Ñ Ð¾Ð´Ð° в поÑледоваÑелÑноÑÑÑ Ð·Ð°Ð³ÑÑзки. Ðак Ð¼Ñ Ñвидим, ÑÑÐ¾Ñ ÑекÑÐ¾Ñ ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð°Ñей пÑогÑÐ°Ð¼Ð¼Ñ [.filename]#boot0#. BIOS вÑполнÑÐµÑ Ð¿ÐµÑÐµÑ Ð¾Ð´ по адÑеÑÑ `0x7c00`, и она наÑÐ¸Ð½Ð°ÐµÑ Ð²ÑполнÑÑÑÑÑ. + +[[boot-boot0]] +== ÐÐ»Ð°Ð²Ð½Ð°Ñ Ð·Ð°Ð³ÑÑзоÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ (`boot0`) + +ÐоÑле полÑÑÐµÐ½Ð¸Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ BIOS по адÑеÑÑ Ð¿Ð°Ð¼ÑÑи `0x7c00` наÑÐ¸Ð½Ð°ÐµÑ Ð²ÑполнÑÑÑÑÑ [.filename]#boot0#. ÐÑо пеÑвÑй код, коÑоÑÑй ÑпÑавлÑеÑÑÑ FreeBSD. ÐадаÑа [.filename]#boot0# доволÑно пÑоÑÑа: пÑоÑканиÑоваÑÑ ÑаблиÑÑ Ñазделов и позволиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð²ÑбÑаÑÑ, Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾ Ñаздела загÑÑжаÑÑÑÑ. ТаблиÑа Ñазделов â ÑÑо ÑпеÑиалÑÐ½Ð°Ñ ÑÑандаÑÑÐ½Ð°Ñ ÑÑÑÑкÑÑÑа даннÑÑ , вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð² MBR (а знаÑиÑ, и в [.filename]#boot0#), коÑоÑÐ°Ñ Ð¾Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ ÑеÑÑÑе ÑÑандаÑÑнÑÑ PC-Ñаздела. [.filename]#boot0# Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² Ñайловой ÑиÑÑеме как [.filename]#/boot/boot0#. ÐÑо неболÑÑой Ñайл ÑазмеÑом 512 байÑ, и именно его пÑоÑедÑÑа ÑÑÑановки Fr eeBSD запиÑÑÐ²Ð°ÐµÑ Ð² MBR жÑÑÑкого диÑка, еÑли во вÑÐµÐ¼Ñ ÑÑÑановки бÑла вÑбÑана опÑÐ¸Ñ "bootmanager". ÐейÑÑвиÑелÑно, [.filename]#boot0# _и еÑÑÑ_ MBR. + +Ðак ÑпоминалоÑÑ Ñанее, Ð¼Ñ Ð²ÑзÑваем пÑеÑÑвание BIOS `INT 0x19` Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки MBR ([.filename]#boot0#) в памÑÑÑ Ð¿Ð¾ адÑеÑÑ `0x7c00`. ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл Ð´Ð»Ñ [.filename]#boot0# можно найÑи в [.filename]#stand/i386/boot0/boot0.S# â ÑÑо впеÑаÑлÑÑÑий ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð°, напиÑаннÑй РобеÑÑом ÐоÑдÑе. + +ÐÑÐ¾Ð±Ð°Ñ ÑÑÑÑкÑÑÑа, наÑинаÑÑаÑÑÑ Ñо ÑмеÑÐµÐ½Ð¸Ñ `0x1be` в MBR, назÑваеÑÑÑ _ÑаблиÑей Ñазделов_. Ðна ÑодеÑÐ¶Ð¸Ñ ÑеÑÑÑе запиÑи по 16 Ð±Ð°Ð¹Ñ ÐºÐ°Ð¶Ð´Ð°Ñ, назÑваемÑе _запиÑÑми Ñазделов_, коÑоÑÑе опÑеделÑÑÑ, как ÑазделÑн жÑÑÑкий диÑк, или, в ÑеÑминологии FreeBSD, наÑезан. Ðдин из ÑÑÐ¸Ñ 16 Ð±Ð°Ð¹Ñ ÑказÑваеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ Ñаздел (ÑÑез) загÑÑзоÑнÑм или неÑ. Ровно одна запиÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ñ ÑÑом ÑÑÑановленнÑм Ñлагом, инаÑе код [.filename]#boot0# оÑкажеÑÑÑ Ð¿ÑодолжаÑÑ ÑабоÑÑ. + +ÐапиÑÑ Ð¾ Ñазделе ÑодеÑÐ¶Ð¸Ñ ÑледÑÑÑие полÑ: + +* 1-байÑовÑй Ñип Ñайловой ÑиÑÑÐµÐ¼Ñ +* 1-байÑовÑй Ñлаг загÑÑзки (`bootable`) +* 6-байÑовÑй деÑкÑипÑÐ¾Ñ Ð² ÑоÑмаÑе CHS +* 8-байÑовÑй деÑкÑипÑÐ¾Ñ Ð² ÑоÑмаÑе LBA + +ÐеÑкÑипÑÐ¾Ñ Ð·Ð°Ð¿Ð¸Ñи Ñаздела ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, где именно Ñаздел ÑаÑположен на диÑке. Ðба деÑкÑипÑоÑа, LBA и CHS, опиÑÑваÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ инÑоÑмаÑиÑ, но ÑазнÑми ÑпоÑобами: LBA (Logical Block Addressing) ÑодеÑÐ¶Ð¸Ñ Ð½Ð°ÑалÑнÑй ÑекÑÐ¾Ñ Ñаздела и его длинÑ, Ñогда как CHS (Cylinder Head Sector) ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð¾ÑдинаÑÑ Ð¿ÐµÑвого и поÑледнего ÑекÑоÑов Ñаздела. ТаблиÑа Ñазделов завеÑÑаеÑÑÑ ÑпеÑиалÑной ÑигнаÑÑÑой `0xaa55`. + +MBR должен помеÑаÑÑÑÑ Ð² 512 байÑ, один ÑекÑÐ¾Ñ Ð´Ð¸Ñка. ÐÑа пÑогÑамма иÑполÑзÑÐµÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑе «ÑÑÑки», Ñакие как иÑполÑзование побоÑнÑÑ ÑÑÑекÑов опÑеделÑннÑÑ Ð¸Ð½ÑÑÑÑкÑий и повÑоÑное иÑполÑзование знаÑений ÑегиÑÑÑов из пÑедÑдÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑий, ÑÑÐ¾Ð±Ñ Ð¼Ð°ÐºÑималÑно ÑÑÑекÑивно иÑполÑзоваÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñно возможное колиÑеÑÑво инÑÑÑÑкÑий. Также Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑоблÑдаÑÑ Ð¾ÑÑоÑожноÑÑÑ Ð¿Ñи ÑабоÑе Ñ ÑаблиÑей Ñазделов, коÑоÑÐ°Ñ Ð²ÑÑÑоена в Ñам MBR. Ðо ÑÑим пÑи Ñинам бÑдÑÑе оÑÐµÐ½Ñ Ð²Ð½Ð¸Ð¼Ð°ÑелÑÐ½Ñ Ð¿Ñи изменении [.filename]#boot0.S#. + +ÐбÑаÑиÑе внимание, ÑÑо иÑÑ Ð¾Ð´Ð½Ñй Ñайл [.filename]#boot0.S# аÑÑемблиÑÑеÑÑÑ "как еÑÑÑ": инÑÑÑÑкÑии пеÑеводÑÑÑÑ Ð¾Ð´Ð½Ð° за одной в бинаÑнÑй код без дополниÑелÑной инÑоÑмаÑии (напÑимеÑ, без ÑоÑмаÑа Ñайла ELF). Такой низкоÑÑовневÑй конÑÑÐ¾Ð»Ñ Ð´Ð¾ÑÑигаеÑÑÑ Ð½Ð° ÑÑапе компоновки Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑпеÑиалÑнÑÑ Ñлагов, пеÑедаваемÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÑикÑ. ÐапÑимеÑ, ÑекÑÑÐ¾Ð²Ð°Ñ ÑекÑÐ¸Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑаÑполагаеÑÑÑ Ð¿Ð¾ адÑеÑÑ `0x600`. Ðа пÑакÑике ÑÑо ознаÑаеÑ, ÑÑо [.filename]#boot0# должен бÑÑÑ Ð·Ð°Ð³ÑÑ Ð¶ÐµÐ½ в памÑÑÑ Ð¿Ð¾ адÑеÑÑ `0x600` Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной ÑабоÑÑ. + +СÑÐ¾Ð¸Ñ Ð²Ð·Ð³Ð»ÑнÑÑÑ Ð½Ð° [.filename]#Makefile# Ð´Ð»Ñ [.filename]#boot0# ([.filename]#stand/i386/boot0/Makefile#), Ñак как он опÑеделÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе аÑпекÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ [.filename]#boot0# во вÑÐµÐ¼Ñ Ð²ÑполнениÑ. ÐапÑимеÑ, еÑли Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð°-вÑвода иÑполÑзÑеÑÑÑ ÑеÑминал, подклÑÑÑннÑй к поÑледоваÑелÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾ÑÑÑ (COM1), Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ опÑеделиÑÑ Ð¼Ð°ÐºÑÐ¾Ñ `SIO` (`-DSIO`). `-DPXE` вклÑÑÐ°ÐµÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ ÑеÑез PXE пÑи нажаÑии kbd:[F6]. ÐÑоме Ñого, пÑогÑамма опÑеделÑÐµÑ Ð½Ð°Ð±Ð¾Ñ _Ñлагов_, коÑоÑÑе позволÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно наÑÑÑоиÑÑ ÐµÑ Ð¿Ð¾Ð²Ð µÐ´ÐµÐ½Ð¸Ðµ. ÐÑÑ ÑÑо пÑоиллÑÑÑÑиÑовано в [.filename]#Makefile#. ÐапÑимеÑ, обÑаÑиÑе внимание на диÑекÑÐ¸Ð²Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñика, коÑо ÑÑе пÑедпиÑÑваÑÑ ÐµÐ¼Ñ Ð½Ð°ÑинаÑÑ ÑекÑÐ¸Ñ ÑекÑÑа Ñ Ð°Ð´ÑеÑа `0x600` и ÑоздаваÑÑ Ð²ÑÑ Ð¾Ð´Ð½Ð¾Ð¹ Ñайл "как еÑÑÑ" (ÑдалÑÑ Ð»Ñбое ÑоÑмаÑиÑование Ñайла): + +[.programlisting] +.... + BOOT_BOOT0_ORG?=0x600 + ORG=${BOOT_BOOT0_ORG} +.... + +.[.filename]#stand/i386/boot0/Makefile# [[boot-boot0-makefile-as-is]] +ÐÑиÑÑÑпим к изÑÑÐµÐ½Ð¸Ñ MBR, или [.filename]#boot0#, наÑÐ¸Ð½Ð°Ñ Ñ ÑоÑки Ð²Ñ Ð¾Ð´Ð°. + +[NOTE] +==== +РнекоÑоÑÑе инÑÑÑÑкÑии бÑли внеÑÐµÐ½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð»ÑÑÑего изложениÑ. ÐапÑимеÑ, некоÑоÑÑе макÑоÑÑ ÑаÑкÑÑÑÑ, а некоÑоÑÑе пÑовеÑки макÑоÑов опÑÑенÑ, когда ÑезÑлÑÑÐ°Ñ Ð¿ÑовеÑки извеÑÑен. ÐÑо оÑноÑиÑÑÑ ÐºÐ¾ вÑем пÑиведÑннÑм пÑимеÑам кода. +==== + +[.programlisting] +.... +start: + cld # String ops inc + xorw %ax,%ax # Zero + movw %ax,%es # Address + movw %ax,%ds # data + movw %ax,%ss # Set up + movw $LOAD,%sp # stack +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-entrypoint]] +ÐÑÐ¾Ñ Ð¿ÐµÑвÑй блок кода ÑвлÑеÑÑÑ ÑоÑкой Ð²Ñ Ð¾Ð´Ð° пÑогÑаммÑ. Ðменно ÑÑда BIOS пеÑедаÑÑ ÑпÑавление. СнаÑала он гаÑанÑиÑÑеÑ, ÑÑо ÑÑÑоковÑе опеÑаÑии авÑомаÑиÑеÑки ÑвелиÑиваÑÑ ÑказаÑели опеÑандов (инÑÑÑÑкÑÐ¸Ñ `cld`) footnote:[Ð ÑлÑÑае Ñомнений Ð¼Ñ Ð¾ÑÑÑлаем ÑиÑаÑÐµÐ»Ñ Ðº оÑиÑиалÑнÑм ÑÑководÑÑвам Intel, где опиÑана ÑоÑÐ½Ð°Ñ ÑеманÑика каждой инÑÑÑÑкÑии: .]. ÐаÑем, не Ð´ÐµÐ»Ð°Ñ Ð¿Ñедположений о ÑоÑÑоÑнии ÑегменÑнÑÑ ÑегиÑÑÑов, он Ð¸Ñ Ð¸Ð½Ð¸ÑиализиÑÑеÑ. ÐаконеÑ, он ÑÑÑанавл Ð¸Ð²Ð°ÐµÑ ÑегиÑÑÑ ÑказаÑÐµÐ»Ñ ÑÑека (`%sp`) в ($LOAD = адÑÐµÑ `0x7c00`), ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ ÑабоÑоÑпоÑобнÑй ÑÑек. + +СледÑÑÑий блок оÑвеÑÐ°ÐµÑ Ð·Ð° пеÑемеÑение и поÑледÑÑÑий пеÑÐµÑ Ð¾Ð´ к пеÑемеÑÐµÐ½Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ. + +[.programlisting] +.... + movw %sp,%si # Source + movw $start,%di # Destination + movw $0x100,%cx # Word count + rep # Relocate + movsw # code + movw %di,%bp # Address variables + movb $0x8,%cl # Words to clear + rep # Zero + stosw # them + incb -0xe(%di) # Set the S field to 1 + jmp main-LOAD+ORIGIN # Jump to relocated code +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-relocation]] +Так как [.filename]#boot0# загÑÑжаеÑÑÑ BIOS по адÑеÑÑ `0x7C00`, он копиÑÑÐµÑ ÑÐµÐ±Ñ Ð¿Ð¾ адÑеÑÑ `0x600` и пеÑедаÑÑ ÑпÑавление ÑÑда (напомним, ÑÑо он бÑл Ñлинкован Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ адÑеÑÑ `0x600`). ÐÑÑ Ð¾Ð´Ð½Ñй адÑеÑ, `0x7c00`, копиÑÑеÑÑÑ Ð² ÑегиÑÑÑ `%si`. ÐонеÑнÑй адÑеÑ, `0x600`, â в ÑегиÑÑÑ `%di`. ÐолиÑеÑÑво Ñлов Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑованиÑ, `256` (ÑÐ°Ð·Ð¼ÐµÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ = 512 байÑ), копиÑÑеÑÑÑ Ð² ÑегиÑÑÑ `%cx`. Ðалее инÑÑÑÑкÑÐ¸Ñ `rep` повÑоÑÑÐµÑ ÑледÑÑÑÑÑ Ð·Ð° ней инÑÑÑÑкÑиÑ, Ñо еÑÑÑ `movsw`, колиÑеÑÑво Ñаз, ÑказанР½Ð¾Ðµ в ÑегиÑÑÑе `%cx`. ÐнÑÑÑÑкÑÐ¸Ñ `movsw` копиÑÑÐµÑ Ñлово, на коÑоÑое ÑказÑÐ²Ð°ÐµÑ `%si`, по адÑеÑÑ, на коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ `%d i`. ÐÑо повÑоÑÑеÑÑÑ ÐµÑÑ 255 Ñаз. ÐÑи каждом повÑоÑении оба ÑегиÑÑÑа, иÑÑ Ð¾Ð´Ð½Ñй и конеÑнÑй, `%si` и `%di`, ÑвелиÑиваÑÑÑÑ Ð½Ð° единиÑÑ. Таким обÑазом, по завеÑÑении копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ 256 Ñлов (512 байÑ), `%di` Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение `0x600`+`512`= `0x800`, а `%si` â знаÑение `0x7c00`+`512`= `0x7e00`; Ñаким обÑазом, Ð¼Ñ Ð·Ð°Ð²ÐµÑÑили _пеÑемеÑение_ кода. С моменÑа поÑледнего Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑого докÑменÑа инÑÑÑÑкÑии копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² коде изменилиÑÑ, поÑÑÐ¾Ð¼Ñ Ð²Ð¼ÐµÑÑо movsb и stosb бÑли Ð²Ð²ÐµÐ´ÐµÐ½Ñ movsw и stosw, коÑоÑÑе копР¸ÑÑÑÑ 2 байÑа (1 Ñлово) за Ð¾Ð´Ð½Ñ Ð¸ÑеÑаÑиÑ. + +ÐаÑем ÑегиÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ `%di` копиÑÑеÑÑÑ Ð² `%bp`. `%bp` полÑÑÐ°ÐµÑ Ð·Ð½Ð°Ñение `0x800`. ÐнаÑение `8` копиÑÑеÑÑÑ Ð² `%cl` Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовки новой ÑÑÑоковой опеÑаÑии (как в пÑедÑдÑÑей `movsw`). ТепеÑÑ `stosw` вÑполнÑеÑÑÑ 8 Ñаз. ÐÑа инÑÑÑÑкÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÐµÑ Ð·Ð½Ð°Ñение `0` по адÑеÑÑ, на коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ ÑегиÑÑÑ Ð½Ð°Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ (`%di`, Ñо еÑÑÑ `0x800`), и ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾. ÐÑо повÑоÑÑеÑÑÑ ÐµÑÑ 7 Ñаз, Ñак ÑÑо `%di` в иÑоге полÑÑÐ°ÐµÑ Ð·Ð½Ð°Ñение `0x810`. ФакÑиÑеÑки ÑÑо оÑиÑÐ°ÐµÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ адÑеÑов `0x800`-`0x80f`. Ð ÑÐ¾Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ иÑполÑзÑеÑÑÑ ÐºÐ°Ðº (ÑикÑивнаÑ) ÑаблиÑа Ñазделов Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи MBR обÑаÑно на диÑк. ÐаконеÑ, Ð¿Ð¾Ð»Ñ ÑекÑо Ñа Ð´Ð»Ñ CHS-адÑеÑаÑии ÑÑого ÑикÑивного Ñаздела пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение 1, и вÑполнÑеÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´ к оÑновной ÑÑнкÑии из пеÑемеÑÑнного кода. ÐбÑаÑиÑе внимание, ÑÑо до ÑÑого пеÑÐµÑ Ð¾Ð´Ð° к пеÑемеÑÑÐ½Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ Ð»ÑбÑе ÑÑÑлки на абÑолÑÑнÑе адÑеÑа избегалиÑÑ. + +СледÑÑÑий блок кода пÑовеÑÑеÑ, ÑледÑÐµÑ Ð»Ð¸ иÑполÑзоваÑÑ Ð½Ð¾Ð¼ÐµÑ Ð´Ð¸Ñка, пÑедоÑÑавленнÑй BIOS, или ÑоÑ, ÑÑо Ñ ÑаниÑÑÑ Ð² [.filename]#boot0#. + +[.programlisting] +.... +main: + testb $SETDRV,_FLAGS(%bp) # Set drive number? +#ifndef CHECK_DRIVE /* disable drive checks */ + jz save_curdrive # no, use the default +#else + jnz disable_update # Yes + testb %dl,%dl # Drive number valid? + js save_curdrive # Possibly (0x80 set) +#endif +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-drivenumber]] +ÐÑÐ¾Ñ ÐºÐ¾Ð´ пÑовеÑÑÐµÑ Ð±Ð¸Ñ `SETDRV` (`0x20`) в пеÑеменной _flags_. Ðапомним, ÑÑо ÑегиÑÑÑ `%bp` ÑказÑÐ²Ð°ÐµÑ Ð½Ð° адÑÐµÑ `0x800`, поÑÑÐ¾Ð¼Ñ Ð¿ÑовеÑка вÑполнÑеÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеменной _flags_ по адÑеÑÑ `0x800`-`69`= `0x7bb`. ÐÑо пÑÐ¸Ð¼ÐµÑ Ñипа изменений, коÑоÑÑе можно внеÑÑи в [.filename]#boot0#. Флаг `SETDRV` не ÑÑÑановлен по ÑмолÑаниÑ, но его можно задаÑÑ Ð² [.filename]#Makefile#. ÐÑли он ÑÑÑановлен, иÑполÑзÑеÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð´Ð¸Ñка, ÑÐ¾Ñ ÑанÑннÑй в MBR, вмеÑÑо пÑедоÑÑавленного BIOS. ÐÑ Ð¿Ñедполагаем знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ Ñ Ð¾, ÑÑо BIOS пÑедоÑÑавил коÑÑекÑнÑй Ð½Ð¾Ð¼ÐµÑ Ð´Ð¸Ñка, поÑÑÐ¾Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸Ð¼ к `save_curdrive`. + +СледÑÑÑий блок ÑÐ¾Ñ ÑанÑÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð´Ð¸Ñка, пÑедоÑÑавленнÑй BIOS, и вÑзÑÐ²Ð°ÐµÑ `putn` Ð´Ð»Ñ Ð²Ñвода новой ÑÑÑоки на ÑкÑан. + +[.programlisting] +.... +save_curdrive: + movb %dl, (%bp) # Save drive number + pushw %dx # Also in the stack +#ifdef TEST /* test code, print internal bios drive */ + rolb $1, %dl + movw $drive, %si + call putkey +#endif + callw putn # Print a newline +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-savedrivenumber]] +ÐбÑаÑиÑе внимание, ÑÑо Ð¼Ñ Ð¿Ñедполагаем, ÑÑо `TEST` не опÑеделÑн, поÑÑÐ¾Ð¼Ñ ÑÑловнÑй код в нÑм не ÑобиÑаеÑÑÑ Ð¸ не поÑвиÑÑÑ Ð² наÑем иÑполнÑемом Ñайле [.filename]#boot0#. + +СледÑÑÑий блок ÑеализÑÐµÑ ÑакÑиÑеÑкое ÑканиÑование ÑаблиÑÑ Ñазделов. Ðн вÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° ÑкÑан Ñип Ñаздела Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑеÑÑÑÑÑ Ð·Ð°Ð¿Ð¸Ñей в ÑаблиÑе Ñазделов. ÐаждÑй Ñип ÑÑавниваеÑÑÑ Ñо ÑпиÑком извеÑÑнÑÑ ÑайловÑÑ ÑиÑÑем опеÑаÑионнÑÑ ÑиÑÑем. ÐÑимеÑами ÑаÑпознаваемÑÑ Ñипов Ñазделов ÑвлÑÑÑÑÑ NTFS (Windows(R), ID 0x7), `ext2fs` (Linux(R), ID 0x83) и, конеÑно же, `ffs`/`ufs2` (FreeBSD, ID 0xa5). РеализаÑÐ¸Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно пÑоÑÑа. + +[.programlisting] +.... + movw $(partbl+0x4),%bx # Partition table (+4) + xorw %dx,%dx # Item number + +read_entry: + movb %ch,-0x4(%bx) # Zero active flag (ch == 0) + btw %dx,_FLAGS(%bp) # Entry enabled? + jnc next_entry # No + movb (%bx),%al # Load type + test %al, %al # skip empty partition + jz next_entry + movw $bootable_ids,%di # Lookup tables + movb $(TLEN+1),%cl # Number of entries + repne # Locate + scasb # type + addw $(TLEN-1), %di # Adjust + movb (%di),%cl # Partition + addw %cx,%di # description + callw putx # Display it + +next_entry: + incw %dx # Next item + addb $0x10,%bl # Next entry + jnc read_entry # Till done +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-partition-scan]] +Ðажно оÑмеÑиÑÑ, ÑÑо Ñлаг акÑивноÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи ÑбÑаÑÑваеÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ñле ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ _ни одна_ запиÑÑ Ð¾ Ñазделе не акÑивна в наÑей копии [.filename]#boot0# в памÑÑи. Ðозже Ñлаг акÑивноÑÑи бÑÐ´ÐµÑ ÑÑÑановлен Ð´Ð»Ñ Ð²ÑбÑанного Ñаздела. ÐÑо гаÑанÑиÑÑеÑ, ÑÑо ÑолÑко один акÑивнÑй Ñаздел ÑÑÑеÑÑвÑеÑ, еÑли полÑзоваÑÐµÐ»Ñ ÑеÑÐ¸Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑно на диÑк. + +СледÑÑÑий блок пÑовеÑÑÐµÑ Ð½Ð°Ð»Ð¸Ñие дÑÑÐ³Ð¸Ñ Ð´Ð¸Ñков. ÐÑи запÑÑке BIOS запиÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво диÑков, пÑиÑÑÑÑÑвÑÑÑÐ¸Ñ Ð² компÑÑÑеÑе, по адÑеÑÑ `0x475`. ÐÑли еÑÑÑ Ð´ÑÑгие диÑки, [.filename]#boot0# вÑÐ²Ð¾Ð´Ð¸Ñ ÑекÑÑий диÑк на ÑкÑан. ÐолÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð·Ð¶Ðµ даÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ [.filename]#boot0# пÑоÑканиÑоваÑÑ ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð½Ð° дÑÑгом диÑке. + +[.programlisting] +.... + popw %ax # Drive number + subb $0x80-0x1,%al # Does next + cmpb NHRDRV,%al # drive exist? (from BIOS?) + jb print_drive # Yes + decw %ax # Already drive 0? + jz print_prompt # Yes +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-test-drives]] +ÐÑ Ð¿Ñедполагаем, ÑÑо пÑиÑÑÑÑÑвÑÐµÑ ÑолÑко один диÑк, поÑÑÐ¾Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´ к `print_drive` не вÑполнÑеÑÑÑ. Также Ð¼Ñ Ð¿Ñедполагаем, ÑÑо ниÑего необÑÑного не пÑоизоÑло, поÑÑÐ¾Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸Ð¼ к `print_prompt`. + +СледÑÑÑий блок пÑоÑÑо вÑÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑиглаÑение Ñ Ð¿Ð¾ÑледÑÑÑим ваÑианÑом по ÑмолÑаниÑ: + +[.programlisting] +.... +print_prompt: + movw $prompt,%si # Display + callw putstr # prompt + movb _OPT(%bp),%dl # Display + decw %si # default + callw putkey # key + jmp start_input # Skip beep +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-prompt]] +ÐаконеÑ, вÑполнÑеÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´ к `start_input`, где иÑполÑзÑÑÑÑÑ ÑеÑвиÑÑ BIOS Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка ÑаймеÑа и ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ввода Ñ ÐºÐ»Ð°Ð²Ð¸Ð°ÑÑÑÑ; еÑли ÑÐ°Ð¹Ð¼ÐµÑ Ð¸ÑÑекаеÑ, бÑÐ´ÐµÑ Ð²ÑбÑан ваÑÐ¸Ð°Ð½Ñ Ð¿Ð¾ ÑмолÑаниÑ: + +[.programlisting] +.... +start_input: + xorb %ah,%ah # BIOS: Get + int $0x1a # system time + movw %dx,%di # Ticks when + addw _TICKS(%bp),%di # timeout +read_key: + movb $0x1,%ah # BIOS: Check + int $0x16 # for keypress + jnz got_key # Have input + xorb %ah,%ah # BIOS: int 0x1a, 00 + int $0x1a # get system time + cmpw %di,%dx # Timeout? + jb read_key # No +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-start-input]] +ÐÑеÑÑвание запÑаÑиваеÑÑÑ Ñ Ð½Ð¾Ð¼ÐµÑом `0x1a` и аÑгÑменÑом `0` в ÑегиÑÑÑе `%ah`. BIOS Ð¸Ð¼ÐµÐµÑ Ð¿ÑедопÑеделÑннÑй Ð½Ð°Ð±Ð¾Ñ ÑеÑвиÑов, запÑаÑиваемÑÑ Ð¿ÑиложениÑми как пÑогÑаммно-генеÑиÑÑемÑе пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑеÑез инÑÑÑÑкÑÐ¸Ñ `int`, Ñ Ð¿Ð¾Ð»ÑÑением аÑгÑменÑов в ÑегиÑÑÑÐ°Ñ (в данном ÑлÑÑае, `%ah`). ÐдеÑÑ, в ÑаÑÑноÑÑи, запÑаÑиваеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво Ñиков ÑаÑов Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледней полÑноÑи; ÑÑо знаÑение вÑÑиÑлÑеÑÑÑ BIOS ÑеÑез RTC (Real Time Clock). ÐÑи ÑаÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½Ð°ÑÑÑÐ¾ÐµÐ½Ñ Ð½Ð° ÑабоÑÑ Ñ ÑаÑÑоÑой Ð¾Ñ 2 ÐÑ Ð´Ð¾ 8192 ÐÑ. BIOS ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸Ñ Ð½Ð° 18,2 ÐÑ Ð¿Ñи запÑÑке. Ðогда запÑÐ¾Ñ Ð²Ñполнен, 32-биÑнÑй ÑезÑлÑÑÐ°Ñ Ð ²Ð¾Ð·Ð²ÑаÑаеÑÑÑ BIOS в ÑегиÑÑÑÐ°Ñ `%cx` и `%dx` (младÑие байÑÑ Ð² `%dx`). ÐÑÐ¾Ñ ÑезÑлÑÑÐ°Ñ (ÑаÑÑÑ `%dx`) копиÑÑеÑÑÑ Ð² ÑегиÑÑÑ `%di`, и к `%di` добавлÑеÑÑÑ Ð·Ð½Ð°Ñение пеÑеменной `TICKS`. ÐÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² [.filename]#boot0# по ÑмеÑÐµÐ½Ð¸Ñ `_TICKS` (оÑÑиÑаÑелÑное знаÑение) Ð¾Ñ ÑегиÑÑÑа `%bp` (коÑоÑÑй, напомним, ÑказÑÐ²Ð°ÐµÑ Ð½Ð° `0x800`). ÐнаÑение ÑÑой пеÑеменной по ÑмолÑÐ°Ð½Ð¸Ñ â `0xb6` (182 в деÑÑÑиÑной ÑиÑÑеме). ÐÐ´ÐµÑ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑо [.filename]#boot0# поÑÑоÑнно запÑаÑÐ¸Ð²Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ñ BIOS, и когда зн аÑение, возвÑаÑÑнное в ÑегиÑÑÑе `%dx`, ÑÑановиÑÑÑ Ð±Ð¾Ð»ÑÑе знаÑениÑ, Ñ ÑанÑÑегоÑÑ Ð² `%di`, вÑÐµÐ¼Ñ Ð¸ÑÑÐµÐºÐ°ÐµÑ Ð¸ бÑÐ´ÐµÑ ÑдРµÐ»Ð°Ð½ вÑÐ±Ð¾Ñ Ð¿Ð¾ ÑмолÑаниÑ. ! ÐоÑколÑÐºÑ RTC ÑÐ¸ÐºÐ°ÐµÑ 18,2 Ñаза в ÑекÑндÑ, ÑÑо ÑÑловие вÑполниÑÑÑ ÑеÑез 10 ÑекÑнд (ÑÑо поведение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ Ð² [.filename]#Makefile#). Ðо иÑÑеÑÐµÐ½Ð¸Ñ ÑÑого вÑемени [.filename]#boot0# непÑеÑÑвно опÑаÑÐ¸Ð²Ð°ÐµÑ BIOS на пÑÐµÐ´Ð¼ÐµÑ Ð²Ð²Ð¾Ð´Ð° полÑзоваÑелÑ; ÑÑо делаеÑÑÑ ÑеÑез `int 0x16`, аÑгÑÐ¼ÐµÐ½Ñ `1` в `%ah`. + +ÐÑла нажаÑа клавиÑа или иÑÑекло вÑемÑ, поÑледÑÑÑий код пÑовеÑÑÐµÑ Ð²ÑбоÑ. РзавиÑимоÑÑи Ð¾Ñ Ð²ÑбоÑа, ÑегиÑÑÑ `%si` ÑÑÑанавливаеÑÑÑ Ñак, ÑÑÐ¾Ð±Ñ ÑказÑваÑÑ Ð½Ð° ÑооÑвеÑÑÑвÑÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñаздела в ÑаблиÑе Ñазделов. ÐÑÐ¾Ñ Ð½Ð¾Ð²Ñй вÑÐ±Ð¾Ñ Ð¿ÐµÑеопÑеделÑÐµÑ Ð¿ÑедÑдÑÑий вÑÐ±Ð¾Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐейÑÑвиÑелÑно, он ÑÑановиÑÑÑ Ð½Ð¾Ð²Ñм знаÑением по ÑмолÑаниÑ. ÐаконеÑ, ÑÑÑанавливаеÑÑÑ Ñлаг ACTIVE вÑбÑанного Ñаздела. ÐÑли ÑÑо бÑло ÑазÑеÑено пÑи компилÑÑии, веÑÑÐ¸Ñ [.filename]#boot0# Ð ² памÑÑи Ñ ÑÑими изменÑннÑми знаÑениÑми запиÑÑваеÑÑÑ Ð¾Ð±ÑаÑно в MBR на диÑке. ÐÑ Ð¾ÑÑавлÑем деÑали ÑÑой ÑÐµÐ°Ð»Ð¸Ð·Ð°Ñ Ð¸Ð¸ ÑиÑаÑелÑ. + +ÐÑ Ð·Ð°Ð²ÐµÑÑаем наÑе изÑÑение поÑледним блоком кода из пÑогÑÐ°Ð¼Ð¼Ñ [.filename]#boot0#: + +[.programlisting] +.... + movw $LOAD,%bx # Address for read + movb $0x2,%ah # Read sector + callw intx13 # from disk + jc beep # If error + cmpw $MAGIC,0x1fe(%bx) # Bootable? + jne beep # No + pushw %si # Save ptr to selected part. + callw putn # Leave some space + popw %si # Restore, next stage uses it + jmp *%bx # Invoke bootstrap +.... + +.[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-check-bootable]] +ÐÑпомним, ÑÑо `%si` ÑказÑÐ²Ð°ÐµÑ Ð½Ð° вÑбÑаннÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ñаздела. ÐÑа запиÑÑ ÑообÑÐ°ÐµÑ Ð½Ð°Ð¼, где наÑинаеÑÑÑ Ñаздел на диÑке. ÐÑ Ð¿Ñедполагаем, конеÑно, ÑÑо вÑбÑаннÑй Ñаздел дейÑÑвиÑелÑно ÑвлÑеÑÑÑ ÑÑезом FreeBSD. + +[NOTE] +==== +ÐÑнÑне Ð¼Ñ Ð±Ñдем оÑдаваÑÑ Ð¿ÑедпоÑÑение иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÐµÑ Ð½Ð¸ÑеÑки более ÑоÑного ÑеÑмина "ÑлайÑ" вмеÑÑо "Ñаздел". +==== + +ÐÑÑÐµÑ Ð¿ÐµÑедаÑи ÑÑÑановлен в `0x7c00` (ÑегиÑÑÑ `%bx`), и запÑÐ¾Ñ Ð½Ð° ÑÑение пеÑвого ÑекÑоÑа ÑлайÑа FreeBSD вÑполнÑеÑÑÑ Ð²Ñзовом `intx13`. ÐÑ Ð¿Ñедполагаем, ÑÑо вÑÑ Ð¿ÑоÑло ÑÑпеÑно, поÑÑÐ¾Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´ к `beep` не вÑполнÑеÑÑÑ. Ð ÑаÑÑноÑÑи, новÑй пÑоÑиÑаннÑй ÑекÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ заканÑиваÑÑÑÑ Ð¼Ð°Ð³Ð¸ÑеÑкой поÑледоваÑелÑноÑÑÑÑ `0xaa55`. ÐаконеÑ, знаÑение в `%si` (ÑказаÑÐµÐ»Ñ Ð½Ð° вÑбÑаннÑÑ ÑаблиÑÑ Ñазделов) ÑÐ¾Ñ ÑанÑеÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° ÑледÑÑÑем ÑÑапе, и вÑполнÑеÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´ по адÑеÑÑ `0x7c00`, где наÑинаеÑÑÑ Ð²Ñполнение наÑего ÑледÑÑÑего ÑÑапа (ÑолÑко ÑÑо пÑоÑиÑанного блока). + +[[boot-boot1]] +== ÐÑап `boot1` + +Ðо ÑÐ¸Ñ Ð¿Ð¾Ñ Ð¼Ñ Ð¿ÑоÑли ÑледÑÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ: + +* BIOS вÑполнил пеÑвонаÑалÑнÑÑ Ð¸Ð½Ð¸ÑиализаÑÐ¸Ñ Ð¾Ð±Ð¾ÑÑдованиÑ, вклÑÑÐ°Ñ POST. MBR ([.filename]#boot0#) бÑл загÑÑжен по адÑеÑÑ `0x7c00` из абÑолÑÑного ÑекÑоÑа один Ñ Ð´Ð¸Ñка. УпÑавление вÑполнением бÑло пеÑедано по ÑÑÐ¾Ð¼Ñ Ð°Ð´ÑеÑÑ. +* [.filename]#boot0# пеÑемеÑÑил ÑÐµÐ±Ñ Ð¿Ð¾ адÑеÑÑ, по коÑоÑÐ¾Ð¼Ñ Ð¾Ð½ бÑл Ñкомпонован Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (`0x600`), поÑле Ñего вÑполнил пеÑÐµÑ Ð¾Ð´ Ð´Ð»Ñ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² ÑооÑвеÑÑÑвÑÑÑем меÑÑе. РзавеÑÑение, [.filename]#boot0# загÑÑзил пеÑвÑй ÑекÑÐ¾Ñ Ð´Ð¸Ñка из Ñаздела FreeBSD по адÑеÑÑ `0x7c00`. УпÑавление вÑполнением бÑло пеÑедано по ÑÑÐ¾Ð¼Ñ Ð°Ð´ÑеÑÑ. + +[.filename]#boot1# â ÑÑо ÑледÑÑÑий Ñаг в поÑледоваÑелÑноÑÑи загÑÑзки. ÐÑо пеÑÐ²Ð°Ñ Ð¸Ð· ÑÑÐµÑ ÑÑадий загÑÑзки. ÐбÑаÑиÑе внимание, ÑÑо до ÑÐ¸Ñ Ð¿Ð¾Ñ Ð¼Ñ ÑабоÑали иÑклÑÑиÑелÑно Ñ ÑекÑоÑами диÑка. ÐейÑÑвиÑелÑно, BIOS загÑÑÐ¶Ð°ÐµÑ ÑамÑй пеÑвÑй ÑекÑоÑ, а [.filename]#boot0# загÑÑÐ¶Ð°ÐµÑ Ð¿ÐµÑвÑй ÑекÑÐ¾Ñ Ñаздела FreeBSD. Ðбе загÑÑзки пÑоиÑÑ Ð¾Ð´ÑÑ Ð¿Ð¾ адÑеÑÑ `0x7c00`. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ конÑепÑÑалÑно пÑедÑÑавлÑÑÑ ÑÑи ÑекÑоÑÑ Ð´Ð¸Ñка как ÑодеÑжаÑие ÑÐ°Ð¹Ð»Ñ [.filename]#boot0# и [.filename]#boot1#, ÑооÑвеÑÑÑвенно, но на Ñамом деле ÑÑо не ÑовÑем веÑно Ð´Ð»Ñ [.filename]#boot1#. СÑÑого говоÑÑ, в оÑлиÑие Ð¾Ñ [.filename]#boot0#, [.filename]#boot1# не ÑвлÑеÑÑÑ Ñа ÑÑÑÑ Ð·Ð°Ð³ÑÑзоÑнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² footnote:[Файл /boot/boot1 ÑÑÑеÑÑвÑеÑ, но он не запиÑÑваеÑÑÑ Ð² наÑало Ñаздела FreeBSD. ÐмеÑÑо ÑÑого он обÑединÑеÑÑÑ Ñ boot2, ÑоÑмиÑÑÑ Ñайл boot, коÑоÑÑй запиÑÑваеÑÑÑ Ð² наÑало Ñаздела FreeBSD и ÑÑиÑÑваеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки.]. ÐмеÑÑо ÑÑого, единÑй полноÑеннÑй Ñайл [.filename]#boot# ([.filename]#/boot/boot#) в иÑоге запиÑÑваеÑÑÑ Ð½Ð° диÑк. ÐÑÐ¾Ñ Ñайл пÑедÑÑавлÑÐµÑ Ñобой комбинаÑÐ¸Ñ [.filename]#boot1#, [.filename]#boot2# и `Boot Extender` (или BTX). ÐÑÐ¾Ñ ÐµÐ´Ð¸Ð½Ñй Ñайл пÑевÑÑÐ°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð´Ð½ ого ÑекÑоÑа (болÑÑе 512 байÑ). Ð ÑÑаÑÑÑÑ, [.filename]#boot1# Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ _Ñовно_ пеÑвÑе 512 Ð±Ð°Ð¹Ñ ÑÑого Ñайла, поÑÑомÑ, когда [.f ilename]#boot0# загÑÑÐ¶Ð°ÐµÑ Ð¿ÐµÑвÑ! й ÑекÑÐ¾Ñ Ñаздела FreeBSD (512 байÑ), он ÑакÑиÑеÑки загÑÑÐ¶Ð°ÐµÑ [.filename]#boot1# и пеÑÐµÐ´Ð°ÐµÑ ÐµÐ¼Ñ ÑпÑавление. + +ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа [.filename]#boot1# â загÑÑзиÑÑ ÑледÑÑÑий ÑÑап загÑÑзки. ÐÑÐ¾Ñ ÑледÑÑÑий ÑÑап неÑколÑко Ñложнее. Ðн ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· ÑеÑвеÑа под названием "Boot Extender" (BTX) и клиенÑа под названием [.filename]#boot2#. Ðак Ð¼Ñ Ñвидим, поÑледний ÑÑап загÑÑзки, [.filename]#loader#, Ñакже ÑвлÑеÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñом ÑеÑвеÑа BTX. + +ÐавайÑе ÑепеÑÑ Ð¿Ð¾Ð´Ñобно ÑаÑÑмоÑÑим, ÑÑо именно Ð´ÐµÐ»Ð°ÐµÑ [.filename]#boot1#, наÑинаÑ, как Ð¼Ñ ÑÑо делали Ð´Ð»Ñ [.filename]#boot0#, Ñ ÑоÑки Ð²Ñ Ð¾Ð´Ð°: + +[.programlisting] +.... +start: + jmp main +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-entry]] +ТоÑка Ð²Ñ Ð¾Ð´Ð° `start` пÑоÑÑо пеÑÐµÑ Ð¾Ð´Ð¸Ñ ÑеÑез ÑпеÑиалÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ðº меÑке `main`, коÑоÑаÑ, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, вÑглÑÐ´Ð¸Ñ ÑледÑÑÑим обÑазом: + +[.programlisting] +.... +main: + cld # String ops inc + xor %cx,%cx # Zero + mov %cx,%es # Address + mov %cx,%ds # data + mov %cx,%ss # Set up + mov $start,%sp # stack + mov %sp,%si # Source + mov $MEM_REL,%di # Destination + incb %ch # Word count + rep # Copy + movsw # code +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-main]] +Ðак и [.filename]#boot0#, ÑÑÐ¾Ñ ÐºÐ¾Ð´ пеÑемеÑÐ°ÐµÑ [.filename]#boot1#, на ÑÑÐ¾Ñ Ñаз по адÑеÑÑ `0x700`. Ðднако, в оÑлиÑие Ð¾Ñ [.filename]#boot0#, он не пеÑÐµÑ Ð¾Ð´Ð¸Ñ ÑÑда. [.filename]#boot1# Ñкомпонован Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ адÑеÑÑ `0x7c00`, ÑакÑиÑеÑки Ñам, кÑда он бÑл изнаÑалÑно загÑÑжен. ÐÑиÑина ÑÑого пеÑемеÑÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ ÑаÑÑмоÑÑена далее. + +Ðалее Ð¸Ð´ÐµÑ Ñикл, коÑоÑÑй иÑÐµÑ ÑÐ»Ð°Ð¹Ñ FreeBSD. ХоÑÑ [.filename]#boot0# загÑÑзил [.filename]#boot1# из ÑлайÑа FreeBSD, ÐµÐ¼Ñ Ð½Ðµ бÑла пеÑедана инÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑом footnote:[Ðа Ñамом деле Ð¼Ñ Ð¿ÐµÑедали ÑказаÑÐµÐ»Ñ Ð½Ð° адÑÐµÑ ÑлайÑа в ÑегиÑÑÑе %si. Ðднако boot1 не пÑедполагаеÑ, ÑÑо он бÑл загÑÑжен boot0 (возможно, его загÑÑзил дÑÑгой MBR и не пеÑедал ÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ), поÑÑÐ¾Ð¼Ñ Ð¾Ð½ ниÑего не пÑедполагаеÑ.], поÑÑÐ¾Ð¼Ñ [.filename]#boot1# должен повÑоÑно пÑоÑканиÑоваÑÑ ÑаблиÑÑ Ñазделов, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи наÑало ÑлайÑа FreeBSD. ÐÐ»Ñ ÑÑого он пеÑеÑиÑÑÐ²Ð°ÐµÑ MBR: + +[.programlisting] +.... + mov $part4,%si # Partition + cmpb $0x80,%dl # Hard drive? + jb main.4 # No + movb $0x1,%dh # Block count + callw nread # Read MBR +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-find-freebsd]] +РпÑиведÑнном вÑÑе коде ÑегиÑÑÑ `%dl` ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ загÑÑзоÑном ÑÑÑÑойÑÑве. ÐÑи даннÑе пеÑедаÑÑÑÑ BIOS и ÑÐ¾Ñ ÑанÑÑÑÑÑ MBR. ЧиÑла `0x80` и вÑÑе ÑказÑваÑÑ Ð½Ð° Ñо, ÑÑо Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ дело Ñ Ð¶ÑÑÑким диÑком, поÑÑÐ¾Ð¼Ñ Ð²ÑзÑваеÑÑÑ `nread`, где ÑÑиÑÑваеÑÑÑ MBR. ÐÑгÑменÑÑ Ð´Ð»Ñ `nread` пеÑедаÑÑÑÑ ÑеÑез `%si` и `%dh`. ÐдÑÐµÑ Ð¿Ð°Ð¼ÑÑи по меÑке `part4` копиÑÑеÑÑÑ Ð² `%si`. ÐÑÐ¾Ñ Ð°Ð´ÑÐµÑ Ð¿Ð°Ð¼ÑÑи ÑодеÑÐ¶Ð¸Ñ "ÑалÑÑивÑй Ñаздел", коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзован `nread`. Ðиже пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð´Ð°Ð½Ð½Ñе ÑалÑÑивого Ñ Ð°Ð·Ð´ÐµÐ»Ð°: + +[.programlisting] +.... + part4: + .byte 0x80, 0x00, 0x01, 0x00 + .byte 0xa5, 0xfe, 0xff, 0xff + .byte 0x00, 0x00, 0x00, 0x00 + .byte 0x50, 0xc3, 0x00, 0x00 +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot2-make-fake-partition]] +Ð ÑаÑÑноÑÑи, LBA Ð´Ð»Ñ ÑÑой ÑикÑивной Ñаздела жеÑÑко закодиÑован как нолÑ. ÐÑо иÑполÑзÑеÑÑÑ ÐºÐ°Ðº аÑгÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ BIOS пÑи ÑÑении абÑолÑÑного ÑекÑоÑа один Ñ Ð¶ÐµÑÑкого диÑка. ÐлÑÑеÑнаÑивно, Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð°Ð´ÑеÑаÑÐ¸Ñ CHS. Ð ÑÑом ÑлÑÑае, ÑикÑивнÑй Ñаздел ÑодеÑÐ¶Ð¸Ñ ÑÐ¸Ð»Ð¸Ð½Ð´Ñ 0, Ð³Ð¾Ð»Ð¾Ð²ÐºÑ 0 и ÑекÑÐ¾Ñ 1, ÑÑо ÑквиваленÑно абÑолÑÑÐ½Ð¾Ð¼Ñ ÑекÑоÑÑ Ð¾Ð´Ð¸Ð½. + +ÐÑодолжим, ÑаÑÑмоÑÑев `nread`: + +[.programlisting] +.... +nread: + mov $MEM_BUF,%bx # Transfer buffer + mov 0x8(%si),%ax # Get + mov 0xa(%si),%cx # LBA + push %cs # Read from + callw xread.1 # disk + jnc return # If success, return +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-nread]] +Ðапомним, ÑÑо `%si` ÑказÑÐ²Ð°ÐµÑ Ð½Ð° подделÑнÑй Ñаздел. Слово footnote:[РконÑекÑÑе 16-биÑного ÑеалÑного Ñежима Ñлово â ÑÑо 2 байÑа.] по ÑмеÑÐµÐ½Ð¸Ñ `0x8` копиÑÑеÑÑÑ Ð² ÑегиÑÑÑ `%ax`, а Ñлово по ÑмеÑÐµÐ½Ð¸Ñ `0xa` â в `%cx`. BIOS инÑеÑпÑеÑиÑÑÐµÑ Ð¸Ñ ÐºÐ°Ðº младÑее 4-байÑовое знаÑение, обознаÑаÑÑее LBA Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ (ÑÑаÑÑие ÑеÑÑÑе байÑа пÑедполагаÑÑÑÑ Ð½ÑлевÑми). РегиÑÑÑ `%bx` ÑодеÑÐ¶Ð¸Ñ Ð°Ð´ÑÐµÑ Ð¿Ð°Ð¼ÑÑи, кÑда бÑÐ´ÐµÑ Ð·Ð°Ð³ÑÑжен MBR. ÐнÑÑÑÑкÑиÑ, помеÑаÑÑÐ°Ñ `%cs` в ÑÑек, оÑÐµÐ½Ñ Ð¸Ð½ÑеÑеÑна. Рданном конÑекÑÑе она ниÑего не делаеÑ. Ðднако, как Ð¼Ñ ÑкоÑо Ñвидим, [.filename]#boot2# в ÑоÑеÑании Ñ ÑеÑвеÑом BTX Ñакже иÑполÑÐ ·ÑÐµÑ `xread.1`. ÐÑÐ¾Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ бÑÐ´ÐµÑ ÑаÑÑмоÑÑен в ÑледÑÑÑем Ñазделе. + +Ðод в `xread.1` далее вÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ `read`, коÑоÑÐ°Ñ ÑакÑиÑеÑки обÑаÑаеÑÑÑ Ðº BIOS Ñ Ð·Ð°Ð¿ÑоÑом на ÑÑение ÑекÑоÑа диÑка: + +[.programlisting] +.... +xread.1: + pushl $0x0 # absolute + push %cx # block + push %ax # number + push %es # Address of + push %bx # transfer buffer + xor %ax,%ax # Number of + movb %dh,%al # blocks to + push %ax # transfer + push $0x10 # Size of packet + mov %sp,%bp # Packet pointer + callw read # Read from disk + lea 0x10(%bp),%sp # Clear stack + lret # To far caller +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-xread1]] +ÐбÑаÑиÑе внимание на длиннÑÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑа в конÑе ÑÑого блока. ÐÑа инÑÑÑÑкÑÐ¸Ñ Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ ÑегиÑÑÑ `%cs`, помеÑÑннÑй в ÑÑек `nread`, и возвÑаÑÐ°ÐµÑ ÑпÑавление. РконÑе `nread` Ñакже возвÑаÑÐ°ÐµÑ ÑпÑавление. + +С загÑÑзкой MBR в памÑÑÑ Ð½Ð°ÑинаеÑÑÑ ÑакÑиÑеÑкий Ñикл поиÑка ÑлайÑа FreeBSD: + +[.programlisting] +.... + mov $0x1,%cx # Two passes +main.1: + mov $MEM_BUF+PRT_OFF,%si # Partition table + movb $0x1,%dh # Partition +main.2: + cmpb $PRT_BSD,0x4(%si) # Our partition type? + jne main.3 # No + jcxz main.5 # If second pass + testb $0x80,(%si) # Active? + jnz main.5 # Yes +main.3: + add $0x10,%si # Next entry + incb %dh # Partition + cmpb $0x1+PRT_NUM,%dh # In table? + jb main.2 # Yes + dec %cx # Do two + jcxz main.1 # passes +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-find-part]] +ÐÑли обнаÑÑжен ÑÐ»Ð°Ð¹Ñ FreeBSD, вÑполнение пÑодолжаеÑÑÑ Ð½Ð° меÑке `main.5`. ÐбÑаÑиÑе внимание, ÑÑо пÑи обнаÑÑжении ÑлайÑа FreeBSD `%si` ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑооÑвеÑÑÑвÑÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² ÑаблиÑе Ñазделов, а `%dh` ÑодеÑÐ¶Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ Ñаздела. ÐÑ Ð¿Ñедполагаем, ÑÑо ÑÐ»Ð°Ð¹Ñ FreeBSD найден, поÑÑÐ¾Ð¼Ñ Ð¿Ñодолжаем вÑполнение на меÑке `main.5`: + +[.programlisting] +.... +main.5: + mov %dx,MEM_ARG # Save args + movb $NSECT,%dh # Sector count + callw nread # Read disk + mov $MEM_BTX,%bx # BTX + mov 0xa(%bx),%si # Get BTX length and set + add %bx,%si # %si to start of boot2.bin + mov $MEM_USR+SIZ_PAG*2,%di # Client page 2 + mov $MEM_BTX+(NSECT-1)*SIZ_SEC,%cx # Byte + sub %si,%cx # count + rep # Relocate + movsb # client +.... + +.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-main5]] +Ðапомним, ÑÑо в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑегиÑÑÑ `%si` ÑказÑÐ²Ð°ÐµÑ Ð½Ð° запиÑÑ ÑÑеза FreeBSD в ÑаблиÑе Ñазделов MBR, поÑÑÐ¾Ð¼Ñ Ð²Ñзов `nread` ÑакÑиÑеÑки пÑоÑиÑÐ°ÐµÑ ÑекÑоÑÑ Ð² наÑале ÑÑого Ñаздела. ÐÑгÑменÑ, пеÑеданнÑй в ÑегиÑÑÑе `%dh`, ÑказÑÐ²Ð°ÐµÑ `nread` пÑоÑиÑаÑÑ 16 ÑекÑоÑов диÑка. Ðапомним, ÑÑо пеÑвÑе 512 байÑ, или пеÑвÑй ÑекÑÐ¾Ñ ÑлайÑа FreeBSD, ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿ÑогÑаммой [.filename]#boot1#. Также напомним, ÑÑо Ñайл, запиÑаннÑй в наÑало ÑлайÑа FreeBSD, ÑÑо не [.filename]#/boot/boot1#, а [.filename]#/boot/boot#. ÐÐ°Ð²Ð°Ð¹Ñ Ðµ поÑмоÑÑим на ÑÐ°Ð·Ð¼ÐµÑ ÑÑÐ¸Ñ Ñайлов в Ñайловой ÑиÑÑеме: + *** 44718 LINES SKIPPED ***