diff --git a/gsi/build_with_kernel/download_kernels_prebults.sh b/gsi/build_with_kernel/download_kernels_prebults.sh new file mode 100755 index 000000000..fca4322a8 --- /dev/null +++ b/gsi/build_with_kernel/download_kernels_prebults.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +if [ -z "${ANDROID_BUILD_TOP}" ]; then + WD="$(pwd)" +else + WD="${ANDROID_BUILD_TOP}" +fi +if [ -z "${OUT_DIR}" ]; then + OUT_DIR="${WD}/out" +fi + +function download_project() { + local branch=$1 + local target=$2 + shift 2 + local file_list=("$@") + + local bid_file="${WD}/prebuilts/build-artifacts3/aosp_kernel-common-${branch}/${target}/bid" + local bid=$(<$bid_file) + local download_url="https://ci.android.com/builds/submitted/${bid}/${target}/latest/raw" + local dist_base="${OUT_DIR}/prebuilt_cached/artifacts/common-${branch//./_}-${target}" + + mkdir -p "$dist_base" + for f in "${file_list[@]}"; do + wget "${download_url}/${f}" -O "${dist_base}/${f}" + done +} + +function download-android12-5.10-kernel_aarch64() { + local file_list=( + "BUILD_INFO" + "Image" + "Image.lz4" + "System.map" + "vmlinux" + "vmlinux.symvers" + "modules.builtin" + "modules.builtin.modinfo" + ) + + download_project "android12-5.10" "kernel_aarch64" "${file_list[@]}" +} + +function download-android12-5.10-kernel_debug_aarch64() { + local file_list=( + "BUILD_INFO" + "Image" + "Image.lz4" + "System.map" + "vmlinux" + "vmlinux.symvers" + "modules.builtin" + "modules.builtin.modinfo" + ) + + download_project "android12-5.10" "kernel_debug_aarch64" "${file_list[@]}" +} + +function download-android12-5.10-kernel_x86_64() { + local file_list=( + "BUILD_INFO" + "bzImage" + "System.map" + "vmlinux" + "vmlinux.symvers" + "modules.builtin" + "modules.builtin.modinfo" + ) + + download_project "android12-5.10" "kernel_x86_64" "${file_list[@]}" +} + +function download-android12-5.10-kernel_debug_x86_64() { + local file_list=( + "BUILD_INFO" + "bzImage" + "System.map" + "vmlinux" + "vmlinux.symvers" + "modules.builtin" + "modules.builtin.modinfo" + ) + + download_project "android12-5.10" "kernel_debug_x86_64" "${file_list[@]}" +} + +function download-android12-5.10-kernel_virt_aarch64() { + local file_list=( + "BUILD_INFO" + "initramfs.img" + ) + + download_project "android12-5.10" "kernel_virt_aarch64" "${file_list[@]}" +} + +function download-android12-5.10-kernel_virt_x86_64() { + local file_list=( + "BUILD_INFO" + "initramfs.img" + ) + + download_project "android12-5.10" "kernel_virt_x86_64" "${file_list[@]}" +} + +download-android12-5.10-kernel_aarch64 +download-android12-5.10-kernel_debug_aarch64 +download-android12-5.10-kernel_x86_64 +download-android12-5.10-kernel_debug_x86_64 +download-android12-5.10-kernel_virt_aarch64 +download-android12-5.10-kernel_virt_x86_64 diff --git a/gsi/build_with_kernel/kernel_info_to_dist.sh b/gsi/build_with_kernel/kernel_info_to_dist.sh new file mode 100755 index 000000000..76848b7e7 --- /dev/null +++ b/gsi/build_with_kernel/kernel_info_to_dist.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +KERNEL_INFO_FILES=( + "System.map" + "vmlinux" + "vmlinux.symvers" + "modules.builtin" + "modules.builtin.modinfo" +) + +function download_kernel_info_files { + local bid=$1 + local kernel_target=$2 + local output_folder=$3 + + local url_base="https://ci.android.com/builds/submitted/${bid}/${kernel_target}/latest" + local url_list="${url_base}/list.json" + local list_json="$(curl -sfL "$url_list")" + # do nothing and return if cannot get the file list + [[ -z "$list_json" ]] && return + + # Pick manifest.xml if the file is not ready + local artifact_manifest="manifest_${bid}.xml" + local output_manifest="${output_folder}/manifest.xml" + if [[ ! -f "$output_manifest" ]]; then + echo "Pick ${artifact_manifest} to ${output_manifest}..." + curl -sfL "${url_base}/raw/${artifact_manifest}" -o "$output_manifest" + fi + + # Pick kernel binaries + for f in "${KERNEL_INFO_FILES[@]}"; do + # The URL request always return 200 even the file does not exist, + # so we check it in the file list. Skip the file if it does not exist. + [[ "$list_json" =~ "\"name\":\"${f}\"" ]] || continue + + local output="${output_folder}/$(basename "$f")" + + echo "Pick ${output}..." + curl -sfL "${url_base}/raw/${f}" -o "$output" + done +} + +function download_all_kernel_info_files { + local kernel_target=$1 + local folder_pattern=$2 + + for folder in $(find "${DIST_DIR}/kernel" -type d -regex ".*/${folder_pattern}"); do + local prebuilt_info="${folder}/prebuilt-info.txt" + local bid=$(cat "$prebuilt_info" | sed -rn 's/.*"kernel-build-id"\s*:\s*([0-9]+).*/\1/p') + download_kernel_info_files "$bid" "$kernel_target" "$folder" + done +} + + +if [[ -z "${DIST_DIR}" ]]; then + echo "DIST_DIR must be defined." 1>&2 + exit 1 +fi + +ARCH=$1 + +download_all_kernel_info_files "kernel_${ARCH}" '[0-9]+.[0-9]+' +download_all_kernel_info_files "kernel_debug_${ARCH}" '[0-9]+.[0-9]+-debug' diff --git a/gsi/build_with_kernel/repack_kernels.sh b/gsi/build_with_kernel/repack_kernels.sh new file mode 100755 index 000000000..46ad3ce24 --- /dev/null +++ b/gsi/build_with_kernel/repack_kernels.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +source development/gsi/build_with_kernel/repack_kernels_common.sh + +set -e + +prepare_kernel_image \ + "artifacts/common-android12-5_10-kernel_aarch64" \ + "5.10" \ + "arm64" + +prepare_kernel_image \ + "artifacts/common-android12-5_10-kernel_debug_aarch64" \ + "5.10" \ + "arm64" \ + "debug" + +prepare_kernel_modules \ + "artifacts/common-android12-5_10-kernel_virt_aarch64" \ + "5.10" \ + "arm64" \ diff --git a/gsi/build_with_kernel/repack_kernels_common.sh b/gsi/build_with_kernel/repack_kernels_common.sh new file mode 100755 index 000000000..c18e4b345 --- /dev/null +++ b/gsi/build_with_kernel/repack_kernels_common.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -z "${ANDROID_BUILD_TOP}" ]; then + WD="$(pwd)" +else + WD="${ANDROID_BUILD_TOP}" +fi +if [ -z "${OUT_DIR}" ]; then + OUT_DIR="${WD}/out" +fi + +if [[ -z "${DIST_DIR}" ]]; then + echo "DIST_DIR must be defined." 1>&2 + exit 1 +fi + +GZIP="gzip" +LZ4="${WD}/prebuilts/misc/linux-x86/lz4/lz4" + + +function prepare_kernel_image() +{ + local prebuilt_path=$1 + local kernel_version=$2 + local arch=$3 + local build_variant=$4 + + local prebuilts_root="out/prebuilt_cached/${prebuilt_path}" + local out_root="${OUT_DIR}/target/kernel/${kernel_version}/${arch}" + local dist_root="${DIST_DIR}/kernel/${kernel_version}" + local postfix="" + if [[ "$build_variant" == "debug" ]]; then + dist_root="${dist_root}-debug" + postfix="-allsyms" + fi + + mkdir -p "${out_root}" + if [[ "$arch" == "x86_64" ]]; then + cp "${prebuilts_root}/bzImage" "${out_root}/kernel-${kernel_version}${postfix}" + else + # Pack all compress format for kernel images + cp "${prebuilts_root}/Image" "${out_root}/kernel-${kernel_version}${postfix}" + cp "${prebuilts_root}/Image.lz4" "${out_root}/kernel-${kernel_version}-lz4${postfix}" + "$GZIP" -nc \ + "${prebuilts_root}/Image">"${out_root}/kernel-${kernel_version}-gz${postfix}" + fi + + # Prepare the dist folder + mkdir -p "${dist_root}" + + # Prepare prebuilt-info.txt + BID=$(cat "${prebuilts_root}/BUILD_INFO" | sed -n 's/^.*"bid":\s*"\(.*\)".*$/\1/p') + cat > "${dist_root}/prebuilt-info.txt" <