12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // -*- mode:doc; -*-
- // vim: set syntax=asciidoc:
- [[rootfs-custom]]
- === Customizing the generated target filesystem
- Besides changing one or another configuration through +make *config+,
- there are a few ways to customize the resulting target filesystem.
- * Customize the target filesystem directly and rebuild the image. The
- target filesystem is available under +output/target/+. You can
- simply make your changes here and run make afterwards - this will
- rebuild the target filesystem image. This method allows you to do
- anything to the target filesystem, but if you decide to completely
- rebuild your toolchain and tools, these changes will be lost. This
- solution is therefore only useful for quick tests only: _changes do
- not survive the +make clean+ command_. Once you have validated your
- changes, you should make sure that they will persist after a +make
- clean+ by using one of the following methods.
- * Create a filesystem overlay: a tree of files that are copied directly
- over the target filesystem after it has been built. Set
- +BR2_ROOTFS_OVERLAY+ to the top of the tree. +.git+, +.svn+, +.hg+
- directories, +.empty+ files and files ending with +~+ are excluded.
- _Among these first 3 methods, this one should be preferred_.
- * In the Buildroot configuration, you can specify the paths to one or
- more *post-build scripts*. These scripts are called in the given order,
- 'after' Buildroot builds all the selected software, but 'before' the
- rootfs images are assembled. The +BR2_ROOTFS_POST_BUILD_SCRIPT+ allows
- you to specify the location of your post-build scripts. This option can be
- found in the +System configuration+ menu. The destination root
- filesystem folder is given as the first argument to these scripts,
- and these scripts can then be used to remove or modify any file in your
- target filesystem. You should, however, use this feature with care.
- Whenever you find that a certain package generates wrong or unneeded
- files, you should fix that package rather than work around it with some
- post-build cleanup scripts.
- You may also use these variables in your post-build script:
- - +BR2_CONFIG+: the path to the Buildroot .config file
- - +HOST_DIR+, +STAGING_DIR+, +TARGET_DIR+: see
- xref:generic-package-reference[]
- - +BUILD_DIR+: the directory where packages are extracted and built
- - +BINARIES_DIR+: the place where all binary files (aka images) are
- stored
- - +BASE_DIR+: the base output directory
- * Create your own 'target skeleton'. You can start with the default
- skeleton available under +system/skeleton+ and then customize it to
- suit your needs. The +BR2_ROOTFS_SKELETON_CUSTOM+ and
- +BR2_ROOTFS_SKELETON_CUSTOM_PATH+ will allow you to specify the
- location of your custom skeleton. These options can be found in the
- +System configuration+ menu. At build time, the contents of the
- skeleton are copied to output/target before any package
- installation. Note that this method is *not recommended*, as it
- duplicates the entire skeleton, which prevents from taking advantage
- of the fixes or improvements brought to the default Buildroot
- skeleton. The recommended method is to use the _post-build scripts_
- mechanism described in the previous item.
- Note also that you can use the *post-image scripts*
- if you want to perform some specific actions 'after' all
- filesystem images have been created (for example to automatically
- extract your root filesystem tarball in a location exported by your
- NFS server, or to create a special firmware image that bundles your
- root filesystem and kernel image, or any other custom action), you can
- specify a space-separated list of scripts in the
- +BR2_ROOTFS_POST_IMAGE_SCRIPT+ configuration option. This option can be
- found in the +System configuration+ menu as well.
- Each of those scripts will be called with the path to the +images+
- output directory as first argument, and will be executed with the main
- Buildroot source directory as the current directory. Those scripts will
- be executed as the user that executes Buildroot, which should normally
- not be the root user. Therefore, any action requiring root permissions
- in one of these _post-image scripts_ will require special handling
- (usage of fakeroot or sudo), which is left to the script developer.
- Just like for the _post-build scripts_ mentioned above, you also have
- access to the following environment variables from your _post-image
- scripts_: +BR2_CONFIG+, +BUILD_DIR+, +HOST_DIR+, +STAGING_DIR+,
- +TARGET_DIR+, +BINARIES_DIR+ and +BASE_DIR+.
- Additionally, each of the +BR2_ROOTFS_POST_BUILD_SCRIPT+ and
- +BR2_ROOTFS_POST_IMAGE_SCRIPT+ scripts will be passed the arguments
- specified in +BR2_ROOTFS_POST_SCRIPT_ARGS+ (if that is not empty).
- All the scripts will be passed the exact same set of arguments, it
- is not possible to pass different sets of arguments to each script.
|