mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-28 05:36:32 +00:00
docs/manual: add documentation for linux-ext and linux-tools.
[Thomas: misc improvements.] Signed-off-by: Romain Naour <romain.naour@openwide.fr> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
parent
1326e76185
commit
509a8368c3
@ -128,6 +128,7 @@ configure the build of the kernel module:
|
|||||||
* +FOO_MODULE_MAKE_OPTS+ may be set to contain extra variable definitions
|
* +FOO_MODULE_MAKE_OPTS+ may be set to contain extra variable definitions
|
||||||
to pass to the Linux buildsystem.
|
to pass to the Linux buildsystem.
|
||||||
|
|
||||||
|
[[kernel-variables]]
|
||||||
You may also reference (but you may *not* set!) those variables:
|
You may also reference (but you may *not* set!) those variables:
|
||||||
|
|
||||||
* +LINUX_DIR+ contains the path to where the Linux kernel has been
|
* +LINUX_DIR+ contains the path to where the Linux kernel has been
|
||||||
|
149
docs/manual/adding-packages-linux-kernel-spec-infra.txt
Normal file
149
docs/manual/adding-packages-linux-kernel-spec-infra.txt
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
// -*- mode:doc; -*-
|
||||||
|
// vim: set syntax=asciidoc:
|
||||||
|
|
||||||
|
[[linux-kernel-specific-infra]]
|
||||||
|
=== Infrastructure specific to the Linux kernel package
|
||||||
|
|
||||||
|
The Linux kernel package can use some specific infrastructures based on package
|
||||||
|
hooks for building Linux kernel tools or/and building Linux kernel extensions.
|
||||||
|
|
||||||
|
[[linux-kernel-tools]]
|
||||||
|
==== linux-kernel-tools
|
||||||
|
|
||||||
|
Buildroot offers a helper infrastructure to build some userspace tools
|
||||||
|
for the target available within the Linux kernel sources. Since their
|
||||||
|
source code is part of the kernel source code, it is not very
|
||||||
|
practical to use separate packages for them as they often need to be
|
||||||
|
built with the same kernel version as the kernel being used on the
|
||||||
|
target. The small Linux kernel tools infrastructure is a simplified
|
||||||
|
packaging mechanism based on the generic package infrastructure to
|
||||||
|
help building those tools.
|
||||||
|
|
||||||
|
Let's look at an example of a Linux tool. For a new Linux tool named
|
||||||
|
+foo+, create a new menu entry in the existing
|
||||||
|
+linux/Config.tools.in+. This file will contain the option
|
||||||
|
descriptions related to each kernel tool that will be used and
|
||||||
|
displayed in the configuration tool. It would basically look like:
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
01: config BR2_LINUX_KERNEL_TOOL_FOO
|
||||||
|
02: bool "foo"
|
||||||
|
03: help
|
||||||
|
04: This is a comment that explains what foo kernel tool is.
|
||||||
|
05:
|
||||||
|
06: http://foosoftware.org/foo/
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
The name of the option starts with the prefix +BR2_LINUX_KERNEL_TOOL_+,
|
||||||
|
followed by the uppercase name of the tool (like is done for packages).
|
||||||
|
|
||||||
|
Then for each linux tool, add a new +.mk+ file named +linux/linux-tool-foo.mk+.
|
||||||
|
It would basically look like:
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
01: ################################################################################
|
||||||
|
02: #
|
||||||
|
03: # foo
|
||||||
|
04: #
|
||||||
|
05: ################################################################################
|
||||||
|
06:
|
||||||
|
07: LINUX_TOOLS += foo
|
||||||
|
08:
|
||||||
|
09: FOO_DEPENDENCIES = libbbb
|
||||||
|
10:
|
||||||
|
11: define FOO_BUILD_CMDS
|
||||||
|
12: $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tools foo
|
||||||
|
13: endef
|
||||||
|
14:
|
||||||
|
15: define FOO_INSTALL_STAGING_CMDS
|
||||||
|
16: $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tools \
|
||||||
|
17: DESTDIR=$(STAGING_DIR) \
|
||||||
|
18: foo_install
|
||||||
|
19: endef
|
||||||
|
20:
|
||||||
|
21: define FOO_INSTALL_TARGET_CMDS
|
||||||
|
22: $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/tools \
|
||||||
|
23: DESTDIR=$(@D) \
|
||||||
|
24: foo_install
|
||||||
|
25: endef
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
On line 7, we register the Linux tool +foo+ to the list of available
|
||||||
|
Linux tools.
|
||||||
|
|
||||||
|
On line 9, we specify the list of dependencies this tool relies on. These
|
||||||
|
dependencies are added to the Linux package dependencies list only when the
|
||||||
|
+foo+ tool is selected.
|
||||||
|
|
||||||
|
The rest of the Makefile, lines 11-25 defines what should be done at the
|
||||||
|
different steps of the Linux tool build process like for a
|
||||||
|
xref:generic-package-tutorial[+generic package+]. They will actually be
|
||||||
|
used only when the +foo+ tool is selected. The only supported commands are
|
||||||
|
+_BUILD_CMDS+, +_INSTALL_STAGING_CMDS+ and +_INSTALL_TARGET_CMDS+.
|
||||||
|
|
||||||
|
.Note
|
||||||
|
One *must not* call +$(eval $(generic-package))+ or any other
|
||||||
|
package infrastructure! Linux tools are not packages by themselves,
|
||||||
|
they are part of the +linux+ package.
|
||||||
|
|
||||||
|
[[linux-kernel-ext]]
|
||||||
|
==== linux-kernel-extensions
|
||||||
|
|
||||||
|
Some packages provide new features that require the Linux kernel tree
|
||||||
|
to be modified. This can be in the form of patches to be applied on
|
||||||
|
the kernel tree, or in the form of new files to be added to the
|
||||||
|
tree. The Buildroot's Linux kernel extensions infrastructure provides
|
||||||
|
a simple solution to automatically do this, just after the kernel
|
||||||
|
sources are extracted and before the kernel patches are
|
||||||
|
applied. Examples of extensions packaged using this mechanism are the
|
||||||
|
real-time extensions Xenomai and RTAI, as well as the set of
|
||||||
|
out-of-tree LCD screens drivers +fbtft+.
|
||||||
|
|
||||||
|
Let's look at an example on how to add a new Linux extension +foo+.
|
||||||
|
|
||||||
|
First, create the package +foo+ that provides the extension: this
|
||||||
|
package is a standard package; see the previous chapters on how to
|
||||||
|
create such a package. This package is in charge of downloading the
|
||||||
|
sources archive, checking the hash, defining the licence informations
|
||||||
|
and building user space tools if any.
|
||||||
|
|
||||||
|
Then create the 'Linux extension' proper: create a new menu entry in
|
||||||
|
the existing +linux/Config.ext.in+. This file contains the option
|
||||||
|
descriptions related to each kernel extension that will be used and
|
||||||
|
displayed in the configuration tool. It would basically look like:
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
01: config BR2_LINUX_KERNEL_EXT_FOO
|
||||||
|
02: bool "foo"
|
||||||
|
03: help
|
||||||
|
04: This is a comment that explains what foo kernel extension is.
|
||||||
|
05:
|
||||||
|
06: http://foosoftware.org/foo/
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Then for each linux extension, add a new +.mk+ file named
|
||||||
|
+linux/linux-ext-foo.mk+. It should basically contain:
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
01: ################################################################################
|
||||||
|
02: #
|
||||||
|
03: # foo
|
||||||
|
04: #
|
||||||
|
05: ################################################################################
|
||||||
|
06:
|
||||||
|
07: LINUX_EXTENSIONS += foo
|
||||||
|
08:
|
||||||
|
09: define FOO_PREPARE_KERNEL
|
||||||
|
10: $(FOO_DIR)/prepare-kernel-tree.sh --linux-dir=$(@D)
|
||||||
|
11: endef
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
On line 7, we add the Linux extension +foo+ to the list of available
|
||||||
|
Linux extensions.
|
||||||
|
|
||||||
|
On line 9-11, we define what should be done by the extension to modify
|
||||||
|
the Linux kernel tree; this is specific to the linux extension and can
|
||||||
|
use the variables defined by the +foo+ package, like: +$(FOO_DIR)+ or
|
||||||
|
+$(FOO_VERSION)+... as well as all the Linux variables, like:
|
||||||
|
+$(LINUX_VERSION)+ or +$(LINUX_VERSION_PROBED)+, +$(KERNEL_ARCH)+...
|
||||||
|
See the xref:kernel-variables[definition of those kernel variables].
|
@ -33,6 +33,8 @@ include::adding-packages-kernel-module.txt[]
|
|||||||
|
|
||||||
include::adding-packages-asciidoc.txt[]
|
include::adding-packages-asciidoc.txt[]
|
||||||
|
|
||||||
|
include::adding-packages-linux-kernel-spec-infra.txt[]
|
||||||
|
|
||||||
include::adding-packages-hooks.txt[]
|
include::adding-packages-hooks.txt[]
|
||||||
|
|
||||||
include::adding-packages-gettext.txt[]
|
include::adding-packages-gettext.txt[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user