There is bunch of kernel config options that are not propagated
correctly to the kernel configuration after fragments are merged
and processed by Kconfig. Current Buildroot tools are not good at
discovering these - while we cleaned up most inconsistencies by using
linux-diff-config and output from the merge_config.sh script, there
are still options that were removed or get a different value than
intended because of dependencies, etc.
This commit adds a Python script that is using Kconfiglib to parse
current kernel's Kconfig files and the generated .config and compare
the requested values from individual kernel config fragments. The
script can be used manually by running `make linux-check-dotconfig`
from the buildroot directory (with path to BR2_EXTERNAL directory set)
and it's called also from the CI, where it generates Github Workflow
warning annotations when some of the values are not present or when set
incorrectly.
The kconfiglib.py is checked-in to the repo as well, because the library
is currently abandoned on PyPI and packaged version has a bug that causes
errors parsing Kconfigs in newer Linux versions, fixed in outstanding
pull request ulfalizer/Kconfiglib#119 - so version from this PR is used
here.
If pypi/support#2526 is ever resolved, we could remove it from our repo
and use pip for installing the package as a requirement during build
of the build container.
- Reorganized variable definitions for clarity and consistency.
- Encapsulated SWU file creation logic into 'create_swu_file' function for better modularity and readability.
- Implemented 'cleanup' function to handle temporary file cleanup, enhancing script robustness.
- Utilized bash array for 'SWUPDATE_FILES' to improve handling of multiple file entries.
- Simplified error handling with 'set -e' and streamlined script exit using 'trap' for cleanup operations.
- Cleaned up directory changing commands by redirecting 'pushd' and 'popd' output to '/dev/null'.
- Encapsulated functionality into functions for better script organization.
- Introduced 'write_os_release' and 'write_machine_info' functions for creating os-release and machine-info files.
- Streamlined Raspberry Pi specific file handling with 'handle_raspberry_pi' function.
- Consolidated script execution within a 'main' function for clearer flow and execution order.
- Improved readability with consistent formatting and added inline comments for clarity.
- Enhanced robustness with comprehensive error checking and streamlined command execution.
- RPI5 not supported yet.
- Streamlined variable declarations for improved readability.
- Added error checking to ensure successful retrieval of the image digest.
- Encapsulated core functionality into 'fetch_and_copy_image' function for better script structure.
- Introduced a 'lock_file' variable to clarify the file locking mechanism.
- Combined 'set' options into a single line and added 'pipefail' for robust error handling.
- Refined comments and structured the script into clearly defined sections.