Commit graph

171 commits

Author SHA1 Message Date
Aaron Kling
49c4dd8f86 kernel: Error on duplicate modules
This can happen when an out of tree module target uses a matching module
name from the base kernel. This causes two problems:

1) Depmod gets confused and only pulls symbols from one of the modules
2) Copying the modules to modules_out is not entirely deterministic and
   is based on the first variant to be returned by find, meaning that
   the variant that gets copied to the device could change build to
   build.

To avoid these issues, fail the build if this happens and force the
build target to only generate one copy of each module name.

Change-Id: I2e47ba4e142054feabaa1ab80fbbe0332fd84a62
2024-05-13 20:45:15 +00:00
Aaron Kling
1b0fc0e043 fixup! kernel: Support copying modules to boot ramdisk
Original commit incorrectly added kernel as a dep to the vendor ramdisk
for this path, when instead the dep should be added to the boot ramdisk.

Change-Id: I25a42d403fe2ddb0538b08c2dd8f761eae960810
2024-03-30 06:38:58 +00:00
LuK1337
f3ee86687f
bacon: Depend on $(DEFAULT_GOAL)
This makes sure that $OUT contains images for all partitions.

Test: breakfast tangorpro && m bacon && ls $OUT/vendor_boot.img
Change-Id: Ia59a1fb7d9d1054040453ff2e7954ea6d7c61fde
2024-03-04 16:10:36 +01:00
Aaron Kling
d725e592fe kernel: Support kernel modules via kbuild
TARGET_EXTERNAL_KERNEL_MODULES variable is used for the list of modules,
same as the existing functionality, but is invoked if ':kbuild' is
appended to a module name

Existing external module build calls make in the module directory, which
is a standalone module build. The module makefile may chain to kbuild,
but that depends on the module. This addition invokes the kernel build
system, passing the module directory via the M= param, which is the
kernel standard for building out of tree modules.

Change-Id: I38a582952f79f7155cdbf8a5975cf23074bbdab0
2024-02-07 18:00:28 +00:00
Aaron Kling
2f1c529782 kernel: Support copying modules to boot ramdisk
Android supports loading modules from the boot ramdisk in the case of
vendor ramdisk not existing.

Change-Id: Ide1255b2c37ee262c8a4181d5eb0e380d0488edc
2024-02-07 18:00:28 +00:00
LuK1337
b38fb3a2d2 kernel: Make INTERNAL_VENDOR_RAMDISK_TARGET depend on kernel
This lets us package kernel modules into recovery ramdisk inside
vendor_boot.

Change-Id: I274bc95ce8682e2f13a595174ab279c129866f6a
2023-12-24 21:08:16 +00:00
Bruno Martins
682dd6b689 kernel: Ensure that module load lists are properly formed
Do not allow module load lists to contain unexistent kernel modules
and bail out if that's the case, informing that the list must be
corrected.

The lists can be formed including the full module path and with or
without the file extension, like shown below:

  kernel/drivers/watchdog/softdog.ko
  kernel/net/wireless/cfg80211.ko
  kernel/net/mac80211/mac80211.ko

or simply:

  softdog.ko
  cfg80211.ko
  mac80211.ko

or ultimately:

  softdog
  cfg80211
  mac80211

Either way, the newly generated modules.load file will now only
contain the module name without the extension, which is inline with
modules.alias and modules.blocklist.

Change-Id: I969274f7edf249c98ca241e37b6e41a921d36908
2023-12-14 22:45:39 +00:00
pppig236
f46d0a7a08 kernel: Halt build process if an external module fails to compile
Before:
    mka bootimage
    qcacld failed to compile, but boot.img is generated

After:
    mka bootimage
    qcacld failed to compile and no boot.img is generated

Commit fadfdbf introduced the idea of building external modules,
but it didn't account for the scenario where compilation could fail
while the boot.img is still being built.

Fix this by properly stopping the build process as soon as the external
module fails to compile.

Change-Id: Ifed28825f8e4b78d304fe62a47908e208edfb886
2023-10-29 14:27:00 +00:00
Bruno Martins
e655a1e696 kernel: Replace BOARD_SYSTEM_KERNEL_MODULES with SYSTEM_KERNEL_MODULES
Commit 47931c1 introduced GKI modules handling with the assumption
that using BOARD_SYSTEM_KERNEL_MODULES would still work in Android 14,
but turns out that it conflicts with build/make/core rules.

Change-Id: I9167940c08b8420be254c52698f1faa2e3e7f793
2023-10-28 12:37:43 +01:00
basamaryan
db93a8d621 kernel: Rename mkdtboimg.py
* Changed in https://android-review.googlesource.com/q/topic:%22colefaust_rename_mkdtboimg%22

Change-Id: Idd2ade7035c79207321ecbc70d6a4ddf9f4ed600
2023-10-20 09:55:48 +01:00
Tim Zimmermann
84b975ca23
kernel: Use correct variable name for vendor_kernel_boot modules
* This was missed in bdfc913935
* Aligns the variable name for vendor_kernel_boot modules with AOSP

Change-Id: I8d59f7b5d62e29a0484ca36fadcb74acab4f1859
2023-10-16 16:17:09 +03:00
Bruno Martins
231338af58 kernel: Use pahole from Google prebuilts
This fixes the following warnings:

  13:04:54 Disallowed PATH tool "pahole" used: []string{"pahole", "--version"}
  13:04:54 See https://android.googlesource.com/platform/build/+/master/Changes.md#PATH_Tools for more information.
  "pahole" is not allowed to be used. See https://android.googlesource.com/platform/build/+/master/Changes.md#PATH_Tools for more information.
  /home/bgcngm/android/lineage/kernel/oneplus/sm8550/scripts/pahole-flags.sh: 12: [: Illegal number:
  /home/bgcngm/android/lineage/kernel/oneplus/sm8550/scripts/pahole-flags.sh: 16: [: Illegal number:
  /home/bgcngm/android/lineage/kernel/oneplus/sm8550/scripts/pahole-flags.sh: 20: [: Illegal number:

Change-Id: Ice2a3753301a7b7782037fd35544e2831b258650
2023-09-19 16:17:27 +01:00
SGCMarkus
2a0d417971 kernel: Allow to limit the used .dtb files for the final DTB image
On some devices too many .dtb files are generated. Instead of taking
all of them, allow to only take selected .dtb files for the final
DTB image.

Example: Motorola Edge 40 Pro (rtwo, sm8550) generates the following:
obj/DTB_OBJ/out/kaka-rumi.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-evb1-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-evt1-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-na-vzw-evt2-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-prc-dvt1b-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-prc-pvt-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base-kalama-rtwo-row-dvt1b-overlay.dtb
obj/DTB_OBJ/out/kalama-rtwo-base.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-evb1-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-evt1-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-na-vzw-evt2-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-prc-dvt1b-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-prc-pvt-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base-kalama-rtwo-row-dvt1b-overlay.dtb
obj/DTB_OBJ/out/kalama-v2-rtwo-base.dtb

with only kalama-rtwo-base.dtb and kalama-v2-rtwo-base.dtb needed.
Disabling compilation of the other kalama.dtb isn't possible, as this
would also disable the compilation of the needed .dtbo files.
Because they are earlier in alphabetical order, and the matching
board ids, the bootloader ends up selecting those, instead of the
correct ones. This results in USB (and possible other things) to
not work.

Change-Id: I486b6ec538a3e4906b5b8aa5ecb355b480b60de7
2023-09-17 17:53:24 +00:00
Bruno Martins
3056928d1c kernel: Include DTBOs from OEM/ODM folder in base DTB
It can be the case where OEM/ODM decided to put the main DTBOs
outside vendor/qcom (e.g. vendor/oplus). Support such usecase
by generically allowing all .dtbo files found in all first-level
subdirs to be moved to base DTB folder.

Change-Id: I154d401b560535d1fa8cd7ed4965dd34a4cf75f2
2023-09-17 17:53:24 +00:00
Bruno Martins
47931c121e kernel: Handle GKI modules
All devices lauching with Android 13 (and above) must include
a system_dlkm partition, where GKI modules should reside.

Android 13 build system only supports providing prebuilt modules,
by pointing BOARD_SYSTEM_DLKM_SRC to the modules source folder.
Google will introduce BOARD_SYSTEM_KERNEL_MODULES for Android 14,
so take a step forward and use that macro to exclude the listed
modules from the usual vendor DLKM partition and place them into
the GKI module partition.

Note that the GKI modules are placed into lib/modules/androidX-Y.Z,
as defined by Google and observed in system_dlkm_modprobe script.

Change-Id: I2b1644479788cb5c9568cac738202b1d55fc28d7
2023-09-17 17:53:24 +00:00
Aaron Kling
3ade73b639 kernel: Support copying modules to recovery
Change-Id: Iac275cfbea368d47f9cc8e756649ab094d9c57c5
2023-08-28 16:23:03 +00:00
Aaron Kling
0d1608e30f
kernel: Support Qualcomm merge_dtbs script
Script from clo kernel/build at kernel.lnx.5.10.r1-rel

Change-Id: Ia90975c895644b86d9f861ddd5a18b7cf6ce1470
2023-08-28 19:15:02 +03:00
dianlujitao
62c1374385 kernel: Check HIP support of clang before disabling it
Old clang releases don't support --hip-path, so passing this flag will
break the build.

Change-Id: If36defb0e74893581849700fb67e6aa4617908a8
2023-03-02 20:43:04 +08:00
dianlujitao
ef68678120 kernel: Force disable LLVM HIP
Gets rid of the following from clang -v:

```
Found HIP installation: /opt/rocm, version 5.4.22804
```

Change-Id: Ic58b3fb2dd67d345372bec7f5d2cf023ed2fb34d
2023-03-01 23:07:23 +08:00
Alessandro Astone
ba14020f85 kernel: Force disable LLVM CUDA
The kernel tries to define the LINUX_COMPILER macro from the output
of `$(CC) -v | grep ' version '`, but in clang that might produce
more than one line containing ' version ' when CUDA is installed:

```
Android (8490178, based on r450784d) clang version 14.0.6
Found CUDA installation: /usr/local/cuda, version 11.0
```

That causes the macro to expand into multiple lines, upsetting the
compiler that cannot find the ending double quote.

In upstream linux this is fixed from v5.8

Change-Id: Icde4253e989df1cbbefc0ce98f437d16822fc93b
2023-01-22 19:51:39 +01:00
Michael Bestas
41abb0b970
kernel: Allow devices to opt-in for full LLVM build
android11-5.4 kernel can fully compile with LLVM with a few cherrypicks
from android12-5.4 and android12-5.10

Change-Id: Ib71935d284ad78f1c23d039c15bfc5e0314a19eb
2022-11-14 19:20:23 +02:00
Michael Bestas
bdfc913935
kernel: Support copying modules to vendor_kernel_boot
Test: Build gs201 with source built kernel/modules, boot.
Change-Id: Ie66400ddd44cfd249e1b4710f4d1c4efa32389a4
2022-11-04 02:12:55 +02:00
Michael Bestas
be4730a53e
kernel: Remove TARGET_KERNEL_MODULES error
This has been an error for 3 years now, plus it has not been functional
for even more years.

Change-Id: I8b12e8d08847ba119d2904f90766105367025d9c
2022-11-01 17:15:13 +02:00
Michael Bestas
2adf74c191
kernel: Only add GCC to PATH when using GNU binutils
Change-Id: Ia842ed409145a81a92077dde5d6e9749a057f047
2022-11-01 17:15:13 +02:00
Michael Bestas
19c16dff32
kernel: Override LD_LIBRARY_PATH only on <5.10
5.10 doesn't need LD_LIBRARY_PATH set

Change-Id: I5f6e732610f947d50b47e238d6a42365396b18ad
2022-11-01 15:55:19 +02:00
Michael Bestas
69e7a49d95
kernel: Fix clang version override
Change-Id: I18fceeeeab5426f55a73d0cb8d72abd5f40c67ec
2022-11-01 15:55:18 +02:00
Aaron Kling
50de801adf kernel: Add support for custom dtbimage generation rules
Change-Id: I79d67f9f40ef3f0970d0e29393d00600b57e337b
2022-10-18 00:59:46 +02:00
Tim Zimmermann
bcfa69d705 kernel: Support building dtbimage with mkdtboimg.py config
Change-Id: Ic0efbf0308e334c1cfe0df0493caa71afe27a621
2022-10-02 17:45:12 +02:00
Michael Bestas
0d450dd954
kernel: Changes for 5.10 build without GCC
Change-Id: Id6e09467937e60e6b00a30a246ba0a4a8d71687b
2022-10-01 00:46:45 +03:00
Michael Bestas
8ab31cfc01
kernel: add pahole dependency
This is needed for 5.10+ T kernel build.

Change-Id: I0729af39cad5509ea3bc8629fdf1176156be6c08
2022-09-28 22:03:50 +03:00
Luca Stefani
a1af8cb166 kernel: Allow passing empty DTB to mkbootimg via board-flag
* Boot Image header v2 demands a DTB be passed by default.
* We don't /need/ one at all, as we have and use a dedicated
  DTB partition.
* Signing hates trying to find dtb.img anywhere for some magical
  reason, so cheat and introduce a flag to include a blank one.

Change-Id: I889ce3815476a55829870b30de1b9210283a79ae
(cherry picked from commit fa16b42ddd1eb341f201b8d810c717ea12afe1cb)
2022-09-15 23:02:14 +02:00
Michael Bestas
18dd1748df
kernel: Changes for LLVM binutils
* Remove KERNEL_LD from kernel.mk, we simply set LD in BoardConfigKernel
* Add llvm-ar in path allowlist (used by LTO)

Change-Id: I76addb6f9d8d413edb1832dba23082ffb6d5ebc3
2022-09-08 04:39:49 +03:00
Michael Bestas
5dfc89a4db
kernel: Always build dtb targets before dtbo.img
Fixes:
error: unable to open output file
'arch/arm64/boot/dts/google/devices/bluejay/google-base/.gs101-b0.dtb.dts.tmp':
'No such file or directory'

Change-Id: I457062e46062fb3553421d196b432de7d06a49ad
2022-08-13 15:16:31 +03:00
Michael Bestas
319d4c4e9a
kernel: Add support for vendor_boot image header version 4
vendor_boot v4 supports packaging multiple "fragmented" vendor ramdisks.
A secondary can be used to store the kernel modules instead of storing
them in the "normal" vendor_ramdisk.

Test: Create a vendor_boot with source built kernel/modules,
      gs101 still boots.
Change-Id: Ic295ccf201c2593e08b9559ae28f80c70a7eb341
2022-08-13 03:02:44 +03:00
Neel Chauhan
fadfdbf4f5
kernel.mk: Allow building external kernel modules
Here, we introduce the TARGET_EXTERNAL_KERNEL_MODULES variable
for the list of external modules.

Change-Id: I1f8b7a48e66bb0c9efbc396692e5a7159f0b835c
2022-08-11 18:34:23 +03:00
Michael Bestas
98447383e4
kernel: Allow overriding dtb target
On some devices we might want to build just the *.dtb files
that we actually need instead of the every dtb that exists.

Change-Id: Id7a152499d4ee1dd08f79d34cc34bfe959313515
2022-08-11 18:34:23 +03:00
Michael Bestas
12b812b4c9
kernel: Allow overriding dtbo target name
gs101 kernel uses google/dtbo.img target for dtbo.img

Change-Id: Ib03f35c0035f56d303771de9399bcce3d02c0775
2022-08-11 18:34:23 +03:00
Alexander Koskovich
a78681c09c
kernel: Move TARGET_KERNEL_ADDITIONAL_FLAGS to kernel task
* Currently, because DTC_EXT make flag is in the
   kernel task the only way to override it is to
   have TARGET_KERNEL_ADDITIONAL_FLAGS come after.

Change-Id: If62ed979581dc07eafd4628ce2b2d799388d3704
2022-06-24 14:23:06 +03:00
Alexander Koskovich
911b7c47b3
kernel: Switch to AOSP DTC instead of using scripts/dtc
Change-Id: I8faf295dfb84ab7481b80d5b7d2add8ed8ddf6d9
2022-06-24 14:23:05 +03:00
Michael Bestas
87c0acd05e Revert "kernel: Remove unneeded MKDTIMG dependency"
This reverts commit caa3bddf00.

Reason for revert: Breaks pixel dtbo.img build, since kernel depends on
mkdtimg. Add it back so it gets compiled and kernel can pick it up.

Change-Id: I2b9fd0b2b35e0cf2f908516b10f65399780d5c30
2022-06-20 11:51:56 +02:00
Michael Bestas
caa3bddf00 kernel: Remove unneeded MKDTIMG dependency
Change-Id: Icc1923e922adb50b02252883aa6814101837adfc
2022-06-18 10:26:14 +02:00
dianlujitao
709371be5e kernel: Ensure dtb(o) always get rebuilt
* AOSP build system is not aware of dtb(o) source update, and thus
   won't rebuild the images, results in outdated artifact.
 * Convert DTB(O)_OUT to make targets and make the images depend on them
   to address the issue. This makes AOSP build system be aware of
   their timestamp changes and re-execute recipes depending on them.
   Finally, it's up to kernel's build system to decide actions to take.

Test: m dtb(o)image and observe dtb(o).img get rebuilt
Change-Id: I197e7d2d3e013ded0e555fc22bb6a1200d40df9c
2022-06-18 10:26:14 +02:00
dianlujitao
9955cd657b kernel: Avoid unnecessary savedefconfig
Change-Id: I5400e549a6574208d67c5d107ca56eee402fa7f2
2022-06-18 10:26:14 +02:00
dianlujitao
8c6398e9fd kernel: Clean up kernel copy recipes
ACP and ALL_PREBUILT are dropped years ago and thus have become no-ops.

Change-Id: Ic317cb4a4fa406cce0dc86555fb8da34d21fb2bf
2022-06-18 10:26:14 +02:00
Alexander Koskovich
3bab7d780e lineage: build: Wipe DTB/O OBJs before build
* They can linger and cause problems, e.g. mismatching
   kernel and DTBs.

Change-Id: I4adafe140093ff675fc3f55e3233a754d44d5656
2022-05-31 01:37:14 +02:00
Bruno Martins
bf9c45fa42 kernel: Document TARGET_KERNEL_RECOVERY_CONFIG usage
Change-Id: Idefd38dae5e8beac7d7de797f3f792fea25dacef
2022-04-09 14:46:47 +02:00
Bruno Martins
f5023f46f9 kernel: Fix building recovery images
Commit 8ac7d31 introduced this issue.

Test: run `m recoveryimage` and verify that recovery
image is now built.

Change-Id: Iffdd8112db2ba1baff28db7ee4c340dbb5ebd917
2022-04-09 14:46:47 +02:00
Bruno Martins
03f2b69dc7 kernel: Fix kernel rebuilding
Commit 8ac7d31 introduced this issue.

Test: run `m installclean && m bootimage` and observe that
kernel image is built.

Change-Id: I41eb7cd2e5108bae8f4c40c0f9a300a8a3cc95a7
2022-04-09 12:58:09 +02:00
Sebastiano Barezzi
8ac7d31285 build: tasks: kernel: Rework kernel fragments handling
* Since some time you can specify multiple configs when you prepare .config and they'll get merged to main one
* To use it inline:
TARGET_KERNEL_CONFIG := main_defconfig fragment1.config fragment2.config ...
* TARGET_KERNEL_ADDITIONAL_CONFIG has been nuked since it's superseed by this new logic
* kernelsavedefconfig will only use the base defconfig

Change-Id: I479c762a9235ed0ef6fcdc79b53e084d5e2d78a6
2022-04-04 03:54:39 +02:00
Michael Bestas
518ab667f2 build: Fix kernelsavedefconfig target
Change-Id: Ie3d9a187693f2435f2555658c833de666848e48e
2022-03-15 17:21:22 +01:00