diff --git a/en_US.ISO8859-1/books/arch-handbook/book.sgml b/en_US.ISO8859-1/books/arch-handbook/book.sgml index c2d91f80a6..6f625557bd 100644 --- a/en_US.ISO8859-1/books/arch-handbook/book.sgml +++ b/en_US.ISO8859-1/books/arch-handbook/book.sgml @@ -1,310 +1,311 @@ %bookinfo; %man; %chapters; %authors %mailing-lists; ]> FreeBSD Developers' Handbook The FreeBSD Documentation Project August 2000 2000 2001 The FreeBSD Documentation Project &bookinfo.legalnotice; Welcome to the Developers' 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 &a.doc;. The latest version of this document is always available from the FreeBSD World Wide Web server. It may also be downloaded in a variety of formats and compression options from the FreeBSD FTP server or one of the numerous mirror sites. Basics &chap.introduction; &chap.tools; &chap.secure; Interprocess Communication * Signals Signals, pipes, semaphores, message queues, shared memory, ports, sockets, doors &chap.sockets; &chap.ipv6; Kernel * History of the Unix Kernel Some history of the Unix/BSD kernel, system calls, how do processes work, blocking, scheduling, threads (kernel), context switching, signals, interrupts, modules, etc. &chap.locking; &chap.kobj; + &chap.sysinit; &chap.vm; &chap.dma; &chap.kerneldebug; * UFS UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata, soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs, caching * AFS AFS, NFS, SANs etc] * Syscons Syscons, tty, PCVT, serial console, screen savers, etc * Compatibility Layers * Linux Linux, SVR4, etc Device Drivers &chap.driverbasics; &chap.isa; &chap.pci; &chap.scsi; &chap.usb; * NewBus This chapter will talk about the FreeBSD NewBus architecture. * Sound subsystem OSS, waveforms, etc Architectures &chap.x86; * Alpha Talk about the architectural specifics of FreeBSD/alpha. Explanation of allignment errors, how to fix, how to ignore. Example assembly language code for FreeBSD/alpha. * IA-64 Talk about the architectural specifics of FreeBSD/ia64. Appendices Dave A Patterson John L Hennessy 1998Morgan Kaufmann Publishers, Inc. 1-55860-428-6 Morgan Kaufmann Publishers, Inc. Computer Organization and Design The Hardware / Software Interface 1-2 W. Richard Stevens 1993Addison Wesley Longman, Inc. 0-201-56317-7 Addison Wesley Longman, Inc. Advanced Programming in the Unix Environment 1-2 Marshall Kirk McKusick Keith Bostic Michael J Karels John S Quarterman 1996Addison-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 Aleph One Phrack 49; "Smashing the Stack for Fun and Profit" Chrispin Cowan Calton Pu Dave Maier StackGuard; Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks Todd Miller Theo de Raadt strlcpy and strlcat -- consistent, safe string copy and concatenation. &chap.index; diff --git a/en_US.ISO8859-1/books/arch-handbook/chapters.ent b/en_US.ISO8859-1/books/arch-handbook/chapters.ent index 2430788825..1ef9ebe938 100644 --- a/en_US.ISO8859-1/books/arch-handbook/chapters.ent +++ b/en_US.ISO8859-1/books/arch-handbook/chapters.ent @@ -1,64 +1,65 @@ + diff --git a/en_US.ISO8859-1/books/arch-handbook/sysinit/chapter.sgml b/en_US.ISO8859-1/books/arch-handbook/sysinit/chapter.sgml new file mode 100644 index 0000000000..468e739d12 --- /dev/null +++ b/en_US.ISO8859-1/books/arch-handbook/sysinit/chapter.sgml @@ -0,0 +1,161 @@ + + + + The Sysinit Framework + + Sysinit is the framework for a generic call sort and dispatch + mechanisim. FreeBSD currently uses it for the dynamic + initialization of the kernel. Sysinit allows FreeBSD's kernel + subsystems to be reordered, and added, removed, and replaced at + kernel link time when the kernel or one of its modules is loaded + without having to edit a staticly ordered initilization routing + and recompile the kernel. This system also allows kernel modules, + currently called KLD's, to be seperatly + compiled, linked, and initilized at boot time and loaded even + later while the system is already running. This is accomplished + using the kernel linker and linker + sets. + + + Terminology + + + + Linker Set + + A linker technique in which the linker gathers + staticly declared data throughout a program's source files + into a single contagiously addressable unit of + data. + + + + + + + Sysinit Operation + + Sysinit relies on the ability of the linker to take static + data declared at multiple locations throughout a program's + source and group it together as a single contagious chunk of + data. This linker technique is called a linker + set. Sysinit uses two linker sets to maintain two data + sets containing each consumer's call order, function, and a + pointer to the data to pass to taht function. + + Sysinit uses two priorites when ordering the functions for + execution. The first priority is a subsystem ID giving an + overall order Sysinit's dispatch of funtions. Current predeclard + ID's are in <sys/kernel.h> in the enum + list sysinit_sub_id. The second priority used + is an element order within the subsystem. Current predeclard + subsystem element orders are in + <sys/kernel.h> in the enum list + sysinit_elem_order. + + There are currently two uses for Sysinit. Function dispatch + at system startup and kernel module loads, and function dispatch + at system shutdown and kernel module unload. + + + + + Using Sysinit + + + Interface + + + Headers + + <sys/kernel.h> + + + + Macros + + SYSINIT(uniquifier, subsystem, order, func, ident) + SYSUNINIT(uniquifier, subsystem, order, func, ident) + + + + + Startup + + The SYSINIT() macro creates the + necessary sysinit data in Sysinit's startup data set for + Sysinit to sort and dispatch a function at system startup and + module load. SYSINIT() takes a uniquifier + that Sysinit uses identify the particular function dispatch + data, the subsystem order, the subsystem element order, the + function to call, and the data to pass the fuction. All + functions must take a constant pointer argument. + + + For example: + + #include <sys/kernel.h> + +void foo_null(void *unused) +{ + foo_doo(); +} +SYSINIT(foo_null, SI_SUB_FOO, SI_ORDER_FOO, NULL); + +struct foo foo_voodoo = { + FOO_VOODOO; +} + +void foo_arg(void *vdata) +{ + struct foo *foo = (struct foo *)vdata; + foo_data(foo); +} +SYSINIT(foo_arg, SI_SUB_FOO, SI_ORDER_FOO, foo_voodoo); + + + + + Shutdown + + The SYSUNINIT() macro behaves similarly + to the SYSINIT() macro except that it adds + the Sysinit data to Sysinit's shutdown data set. + + For example: + + #include <sys/kernel.h> + +void foo_cleanup(void *unused) +{ + foo_kill(); +} +SYSUNINIT(foo_cleanup, SI_SUB_FOO, SI_ORDER_FOO, NULL); + +struct foo_stack foo_stack = { + FOO_STACK_VOODOO; +} + +void foo_flush(void *vdata) +{ +} +SYSUNINIT(foo_flush, SI_SUB_FOO, SI_ORDER_FOO, foo_stack); + + + + + + diff --git a/en_US.ISO8859-1/books/developers-handbook/book.sgml b/en_US.ISO8859-1/books/developers-handbook/book.sgml index c2d91f80a6..6f625557bd 100644 --- a/en_US.ISO8859-1/books/developers-handbook/book.sgml +++ b/en_US.ISO8859-1/books/developers-handbook/book.sgml @@ -1,310 +1,311 @@ %bookinfo; %man; %chapters; %authors %mailing-lists; ]> FreeBSD Developers' Handbook The FreeBSD Documentation Project August 2000 2000 2001 The FreeBSD Documentation Project &bookinfo.legalnotice; Welcome to the Developers' 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 &a.doc;. The latest version of this document is always available from the FreeBSD World Wide Web server. It may also be downloaded in a variety of formats and compression options from the FreeBSD FTP server or one of the numerous mirror sites. Basics &chap.introduction; &chap.tools; &chap.secure; Interprocess Communication * Signals Signals, pipes, semaphores, message queues, shared memory, ports, sockets, doors &chap.sockets; &chap.ipv6; Kernel * History of the Unix Kernel Some history of the Unix/BSD kernel, system calls, how do processes work, blocking, scheduling, threads (kernel), context switching, signals, interrupts, modules, etc. &chap.locking; &chap.kobj; + &chap.sysinit; &chap.vm; &chap.dma; &chap.kerneldebug; * UFS UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata, soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs, caching * AFS AFS, NFS, SANs etc] * Syscons Syscons, tty, PCVT, serial console, screen savers, etc * Compatibility Layers * Linux Linux, SVR4, etc Device Drivers &chap.driverbasics; &chap.isa; &chap.pci; &chap.scsi; &chap.usb; * NewBus This chapter will talk about the FreeBSD NewBus architecture. * Sound subsystem OSS, waveforms, etc Architectures &chap.x86; * Alpha Talk about the architectural specifics of FreeBSD/alpha. Explanation of allignment errors, how to fix, how to ignore. Example assembly language code for FreeBSD/alpha. * IA-64 Talk about the architectural specifics of FreeBSD/ia64. Appendices Dave A Patterson John L Hennessy 1998Morgan Kaufmann Publishers, Inc. 1-55860-428-6 Morgan Kaufmann Publishers, Inc. Computer Organization and Design The Hardware / Software Interface 1-2 W. Richard Stevens 1993Addison Wesley Longman, Inc. 0-201-56317-7 Addison Wesley Longman, Inc. Advanced Programming in the Unix Environment 1-2 Marshall Kirk McKusick Keith Bostic Michael J Karels John S Quarterman 1996Addison-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 Aleph One Phrack 49; "Smashing the Stack for Fun and Profit" Chrispin Cowan Calton Pu Dave Maier StackGuard; Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks Todd Miller Theo de Raadt strlcpy and strlcat -- consistent, safe string copy and concatenation. &chap.index; diff --git a/en_US.ISO8859-1/books/developers-handbook/chapters.ent b/en_US.ISO8859-1/books/developers-handbook/chapters.ent index 2430788825..1ef9ebe938 100644 --- a/en_US.ISO8859-1/books/developers-handbook/chapters.ent +++ b/en_US.ISO8859-1/books/developers-handbook/chapters.ent @@ -1,64 +1,65 @@ + diff --git a/en_US.ISO8859-1/books/developers-handbook/sysinit/chapter.sgml b/en_US.ISO8859-1/books/developers-handbook/sysinit/chapter.sgml new file mode 100644 index 0000000000..468e739d12 --- /dev/null +++ b/en_US.ISO8859-1/books/developers-handbook/sysinit/chapter.sgml @@ -0,0 +1,161 @@ + + + + The Sysinit Framework + + Sysinit is the framework for a generic call sort and dispatch + mechanisim. FreeBSD currently uses it for the dynamic + initialization of the kernel. Sysinit allows FreeBSD's kernel + subsystems to be reordered, and added, removed, and replaced at + kernel link time when the kernel or one of its modules is loaded + without having to edit a staticly ordered initilization routing + and recompile the kernel. This system also allows kernel modules, + currently called KLD's, to be seperatly + compiled, linked, and initilized at boot time and loaded even + later while the system is already running. This is accomplished + using the kernel linker and linker + sets. + + + Terminology + + + + Linker Set + + A linker technique in which the linker gathers + staticly declared data throughout a program's source files + into a single contagiously addressable unit of + data. + + + + + + + Sysinit Operation + + Sysinit relies on the ability of the linker to take static + data declared at multiple locations throughout a program's + source and group it together as a single contagious chunk of + data. This linker technique is called a linker + set. Sysinit uses two linker sets to maintain two data + sets containing each consumer's call order, function, and a + pointer to the data to pass to taht function. + + Sysinit uses two priorites when ordering the functions for + execution. The first priority is a subsystem ID giving an + overall order Sysinit's dispatch of funtions. Current predeclard + ID's are in <sys/kernel.h> in the enum + list sysinit_sub_id. The second priority used + is an element order within the subsystem. Current predeclard + subsystem element orders are in + <sys/kernel.h> in the enum list + sysinit_elem_order. + + There are currently two uses for Sysinit. Function dispatch + at system startup and kernel module loads, and function dispatch + at system shutdown and kernel module unload. + + + + + Using Sysinit + + + Interface + + + Headers + + <sys/kernel.h> + + + + Macros + + SYSINIT(uniquifier, subsystem, order, func, ident) + SYSUNINIT(uniquifier, subsystem, order, func, ident) + + + + + Startup + + The SYSINIT() macro creates the + necessary sysinit data in Sysinit's startup data set for + Sysinit to sort and dispatch a function at system startup and + module load. SYSINIT() takes a uniquifier + that Sysinit uses identify the particular function dispatch + data, the subsystem order, the subsystem element order, the + function to call, and the data to pass the fuction. All + functions must take a constant pointer argument. + + + For example: + + #include <sys/kernel.h> + +void foo_null(void *unused) +{ + foo_doo(); +} +SYSINIT(foo_null, SI_SUB_FOO, SI_ORDER_FOO, NULL); + +struct foo foo_voodoo = { + FOO_VOODOO; +} + +void foo_arg(void *vdata) +{ + struct foo *foo = (struct foo *)vdata; + foo_data(foo); +} +SYSINIT(foo_arg, SI_SUB_FOO, SI_ORDER_FOO, foo_voodoo); + + + + + Shutdown + + The SYSUNINIT() macro behaves similarly + to the SYSINIT() macro except that it adds + the Sysinit data to Sysinit's shutdown data set. + + For example: + + #include <sys/kernel.h> + +void foo_cleanup(void *unused) +{ + foo_kill(); +} +SYSUNINIT(foo_cleanup, SI_SUB_FOO, SI_ORDER_FOO, NULL); + +struct foo_stack foo_stack = { + FOO_STACK_VOODOO; +} + +void foo_flush(void *vdata) +{ +} +SYSUNINIT(foo_flush, SI_SUB_FOO, SI_ORDER_FOO, foo_stack); + + + + + +