build-buildroot: add the --no-overlay option

Initial motivation: modprobe. More to come most likely.
This commit is contained in:
Ciro Santilli 六四事件 法轮功
2018-11-06 00:00:00 +00:00
parent 72167f9f68
commit 753cbe68ff
4 changed files with 23 additions and 12 deletions

View File

@@ -3172,9 +3172,7 @@ We are not installing out custom `./build-modules` modules there, because:
* we don't know the right way. Why is there no `install` or `install_modules` target for kernel modules? * we don't know the right way. Why is there no `install` or `install_modules` target for kernel modules?
+ +
This can of course be solved by running Buildroot in verbose mode, and copying whatever it is doing. This can of course be solved by running Buildroot in verbose mode, and copying whatever it is doing, initial exploration at: https://stackoverflow.com/questions/22783793/how-to-install-kernel-modules-from-source-code-error-while-make-process/53169078#53169078
+
See also: https://askubuntu.com/questions/299676/how-to-install-3rd-party-module-so-that-it-is-loaded-on-boot
* we would have to think how to not have to include the kernel modules twice in the root filesystem, but still have <<9p>> working for fast development as described at: <<your-first-kernel-module-hack>> * we would have to think how to not have to include the kernel modules twice in the root filesystem, but still have <<9p>> working for fast development as described at: <<your-first-kernel-module-hack>>
=== kmod === kmod
@@ -11322,17 +11320,15 @@ A custom build script can give you more flexibility: e.g. the package can be mad
Source: link:buildroot_packages/kernel_modules/[] Source: link:buildroot_packages/kernel_modules/[]
An example of how to kernel modules in Buildroot. An example of how to use kernel modules in Buildroot.
Procedure described in detail at: https://stackoverflow.com/questions/40307328/how-to-add-a-linux-kernel-driver-module-as-a-buildroot-package/43874273#43874273
Usage: Usage:
.... ....
rm -rf "$(./getvar out_rootfs_overlay_dir)/lib/modules"
./build-buildroot \ ./build-buildroot \
--build-linux \ --build-linux \
--config 'BR2_PACKAGE_KERNEL_MODULES=y' \ --config 'BR2_PACKAGE_KERNEL_MODULES=y' \
--no-overlay \
-- \ -- \
kernel_modules-reconfigure \ kernel_modules-reconfigure \
; ;
@@ -11346,10 +11342,14 @@ Then test one of the modules with:
Source: link:buildroot_packages/kernel_modules/buildroot_hello.c[] Source: link:buildroot_packages/kernel_modules/buildroot_hello.c[]
The `rm -rf` is required otherwise our `modules.order` generated by `./build-linux` and installed with `BR2_ROOTFS_OVERLAY` overwrites the Buildroot generated one. As you have just seen, this sets up everything so that <<modprobe>> can conrrectly find the module.
`./build-buildroot --build-linux` and `./run --buildroot-linux` are needed because the Buildroot kernel modules must use the Buildroot Linux kernel at build and run time. `./build-buildroot --build-linux` and `./run --buildroot-linux` are needed because the Buildroot kernel modules must use the Buildroot Linux kernel at build and run time.
The `--no-overlay` is required otherwise our `modules.order` generated by `./build-linux` and installed with `BR2_ROOTFS_OVERLAY` overwrites the Buildroot generated one.
Implementattion described at: https://stackoverflow.com/questions/40307328/how-to-add-a-linux-kernel-driver-module-as-a-buildroot-package/43874273#43874273
==== patches directory ==== patches directory
===== patches/global ===== patches/global

View File

@@ -46,6 +46,15 @@ Pass multiple times to use multiple fragment files.
help='''\ help='''\
Don't build the all target which normally gets build by default. Don't build the all target which normally gets build by default.
That target builds the root filesystem and all its dependencies. That target builds the root filesystem and all its dependencies.
'''
)
parser.add_argument(
'--no-overlay', default=self._defaults['no_all'], action='store_true',
help='''\
Don't add our overlay which contains all files we build without going through Buildroot.
This prevents us from overwriting certain Buildroot files. Remember however that you must
still rebuild the Buildroot package that provides those files to actually put the Buildroot
files on the root filesystem.
''' '''
) )
parser.add_argument( parser.add_argument(
@@ -106,9 +115,6 @@ usually extra Buildroot targets.
'BR2_PACKAGE_OVERRIDE_FILE="{}"'.format( 'BR2_PACKAGE_OVERRIDE_FILE="{}"'.format(
self._path_relative_to_buildroot(os.path.join(common.root_dir, 'buildroot_override')) self._path_relative_to_buildroot(os.path.join(common.root_dir, 'buildroot_override'))
), ),
'BR2_ROOTFS_OVERLAY="{}"'.format(
self._path_relative_to_buildroot(common.out_rootfs_overlay_dir),
),
'BR2_ROOTFS_POST_BUILD_SCRIPT="{}"'.format( 'BR2_ROOTFS_POST_BUILD_SCRIPT="{}"'.format(
self._path_relative_to_buildroot(os.path.join(common.root_dir, 'rootfs-post-build-script')) self._path_relative_to_buildroot(os.path.join(common.root_dir, 'rootfs-post-build-script'))
), ),
@@ -116,6 +122,10 @@ usually extra Buildroot targets.
self._path_relative_to_buildroot(os.path.join(common.root_dir, 'user_table')) self._path_relative_to_buildroot(os.path.join(common.root_dir, 'user_table'))
), ),
]) ])
if not args.no_overlay:
configs.append('BR2_ROOTFS_OVERLAY="{}"'.format(
self._path_relative_to_buildroot(common.out_rootfs_overlay_dir)
))
config_fragments = [ config_fragments = [
os.path.join(common.root_dir, 'buildroot_config', 'default') os.path.join(common.root_dir, 'buildroot_config', 'default')
] + args.config_fragment ] + args.config_fragment

View File

@@ -2,4 +2,4 @@ config BR2_PACKAGE_KERNEL_MODULES
bool "kernel_modules" bool "kernel_modules"
depends on BR2_LINUX_KERNEL depends on BR2_LINUX_KERNEL
help help
https://github.com/cirosantilli/linux-kernel-module-cheat#kernel_modules-package See README.adoc

View File

@@ -0,0 +1 @@
https://github.com/cirosantilli/linux-kernel-module-cheat#kernel_modules-package