Skip to content

Commit e42f099

Browse files
authored
Add scripts for kernel module aggregation and deployment (#336)
1 parent 7987d4c commit e42f099

7 files changed

Lines changed: 252 additions & 27 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/images
2+
/l4t-gcc
3+
/kernel_mod
4+
/sources_*

apply_patches.sh

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ fi
2222

2323
. scripts/setup-common "$1"
2424

25+
# Determine which sources directory exists (specific version like 6.0 or normalized like 6.x)
26+
if [[ -d "sources_$1" ]]; then
27+
SOURCES_VERSION="$1"
28+
elif [[ -d "sources_$JETPACK_VERSION" ]]; then
29+
SOURCES_VERSION="$JETPACK_VERSION"
30+
else
31+
SOURCES_VERSION="$1" # Default to original input if neither exists yet
32+
fi
33+
2534
ACTION="$2"
2635
[[ -z "$ACTION" ]] && ACTION="apply"
2736

@@ -37,36 +46,36 @@ fi
3746

3847
# NVIDIA SDK Manager's JetPack 4.6.1 source_sync.sh doesn't set the right folder name, it mismatches with the direct tar
3948
# package source code. Correct the folder name.
40-
if [[ "$ACTION" == apply && -d "sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen-industrial-dts" ]]; then
41-
mv sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen-industrial-dts sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen-industrial
49+
if [[ "$ACTION" == apply && -d "sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen-industrial-dts" ]]; then
50+
mv sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen-industrial-dts sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen-industrial
4251
fi
43-
if [[ "$ACTION" == reset && -d "sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen-industrial" ]]; then
44-
rm -rfv "sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen-industrial" > /dev/null
52+
if [[ "$ACTION" == reset && -d "sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen-industrial" ]]; then
53+
rm -rfv "sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen-industrial" > /dev/null
4554
fi
4655

4756
apply_external_patches() {
48-
git -C "sources_$JETPACK_VERSION/$3" status > /dev/null
57+
git -C "sources_$SOURCES_VERSION/$3" status > /dev/null
4958
if [[ "$1" == 'apply' ]]; then
50-
if ! git -C "sources_$JETPACK_VERSION/$3" diff --quiet || ! git -C "sources_$JETPACK_VERSION/$3" diff --cached --quiet; then
51-
read -p "Repo sources_$JETPACK_VERSION/$3 has changes that may disturb applying patches. Continue (y/N)? " confirm
59+
if ! git -C "sources_$SOURCES_VERSION/$3" diff --quiet || ! git -C "sources_$SOURCES_VERSION/$3" diff --cached --quiet; then
60+
read -p "Repo sources_$SOURCES_VERSION/$3 has changes that may disturb applying patches. Continue (y/N)? " confirm
5261
[[ "$confirm" != "y" && "$confirm" != "Y" ]] && exit 1
5362
fi
5463
ls -Ld "${PWD}/$3/$2"
5564
ls -Lw1 "${PWD}/$3/$2"
56-
git -C "sources_$JETPACK_VERSION/$3" apply "${PWD}/$3/$2"/*
65+
git -C "sources_$SOURCES_VERSION/$3" apply "${PWD}/$3/$2"/*
5766
elif [ "$1" = "reset" ]; then
58-
if ! git -C "sources_$JETPACK_VERSION/$3" diff --quiet || ! git -C "sources_$JETPACK_VERSION/$3" diff --cached --quiet; then
59-
read -p "Repo sources_$JETPACK_VERSION/$3 has changes that will be hard reset. Continue (y/N)? " confirm
67+
if ! git -C "sources_$SOURCES_VERSION/$3" diff --quiet || ! git -C "sources_$SOURCES_VERSION/$3" diff --cached --quiet; then
68+
read -p "Repo sources_$SOURCES_VERSION/$3 has changes that will be hard reset. Continue (y/N)? " confirm
6069
[[ "$confirm" != "y" && "$confirm" != "Y" ]] && exit 1
6170
fi
62-
echo -n "$(ls -d "sources_$JETPACK_VERSION/$3"): "
63-
git -C "sources_$JETPACK_VERSION/$3" reset --hard $4
71+
echo -n "$(ls -d "sources_$SOURCES_VERSION/$3"): "
72+
git -C "sources_$SOURCES_VERSION/$3" reset --hard $4
6473
fi
6574
}
6675

6776
apply_external_patches "$ACTION" "$1" "$D4XX_SRC_DST" "$L4T_VERSION"
6877

69-
[[ -d "sources_$JETPACK_VERSION/$KERNEL_DIR" ]] && apply_external_patches "$ACTION" "$1" "$KERNEL_DIR" "$L4T_VERSION"
78+
[[ -d "sources_$SOURCES_VERSION/$KERNEL_DIR" ]] && apply_external_patches "$ACTION" "$1" "$KERNEL_DIR" "$L4T_VERSION"
7079

7180
if [[ "$JETPACK_VERSION" == "6.x" ]]; then
7281
apply_external_patches "$ACTION" "$JETPACK_VERSION" "hardware/nvidia/t23x/nv-public" "$L4T_VERSION"
@@ -75,11 +84,11 @@ else
7584
fi
7685

7786
if [[ "$ACTION" = "apply" ]]; then
78-
cp -i kernel/realsense/d4xx.c "sources_$JETPACK_VERSION/${D4XX_SRC_DST}/drivers/media/i2c/"
87+
cp -i kernel/realsense/d4xx.c "sources_$SOURCES_VERSION/${D4XX_SRC_DST}/drivers/media/i2c/"
7988
if [[ "$JETPACK_VERSION" == "6.x" ]]; then
8089
# jp6 overlay
81-
cp hardware/realsense/tegra234-camera-d4xx-overlay*.dts "sources_$JETPACK_VERSION/hardware/nvidia/t23x/nv-public/overlay/"
90+
cp hardware/realsense/tegra234-camera-d4xx-overlay*.dts "sources_$SOURCES_VERSION/hardware/nvidia/t23x/nv-public/overlay/"
8291
else
83-
cp "hardware/realsense/${JP5_D4XX_DTSI}" "sources_$JETPACK_VERSION/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-camera-d4xx.dtsi"
92+
cp "hardware/realsense/${JP5_D4XX_DTSI}" "sources_$SOURCES_VERSION/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-camera-d4xx.dtsi"
8493
fi
8594
fi

build_all.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ NPROC=$(nproc)
1919

2020
. $DEVDIR/scripts/setup-common "$1"
2121

22-
SRCS="$DEVDIR/sources_$JETPACK_VERSION"
22+
SRCS="$DEVDIR/sources_$1"
2323
if [[ -n "$2" ]]; then
2424
SRCS=$(realpath $2)
2525
fi

scripts/aggregate_kernel_6.x.sh

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/bin/bash
2+
3+
# Display help message
4+
show_help() {
5+
echo "Usage: $0 <KERNEL_VERSION> [IP_ADDRESS] [USERNAME] [REMOTE_PATH]"
6+
echo ""
7+
echo "Aggregate kernel modules and optionally copy them to a remote device."
8+
echo ""
9+
echo "Arguments:"
10+
echo " KERNEL_VERSION Kernel version to aggregate (6.0, 6.1, or 6.2) (required)"
11+
echo " IP_ADDRESS Target device IP address (optional - if not provided, only aggregates locally)"
12+
echo " USERNAME SSH username for remote device (default: administrator)"
13+
echo " REMOTE_PATH Remote path to copy files to (default: /home/USERNAME/)"
14+
echo ""
15+
echo "Example:"
16+
echo " $0 6.2"
17+
echo " $0 6.2 192.168.1.100"
18+
echo " $0 6.1 192.168.1.100 nvidia"
19+
echo " $0 6.0 192.168.1.100 administrator REMOTE_PATH/"
20+
exit 0
21+
}
22+
23+
# Check if help is requested or no arguments provided
24+
if [ "$#" -eq 0 ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
25+
show_help
26+
fi
27+
28+
# Check if kernel version is provided
29+
if [ "$#" -lt 1 ]; then
30+
echo "Error: Missing required kernel version"
31+
echo ""
32+
show_help
33+
fi
34+
35+
KERNEL_VERSION="$1"
36+
IP_ADDRESS="${2:-}"
37+
USERNAME="${3:-administrator}"
38+
REMOTE_PATH="/home/${USERNAME}/${4:-ymodlin/}/"
39+
40+
# Get script directory and repo root
41+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
42+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
43+
44+
# Validate kernel version
45+
if [[ "$KERNEL_VERSION" != "6.0" && "$KERNEL_VERSION" != "6.1" && "$KERNEL_VERSION" != "6.2" ]]; then
46+
echo "Error: Invalid kernel version '$KERNEL_VERSION'. Must be 6.0, 6.1, or 6.2"
47+
echo ""
48+
show_help
49+
fi
50+
51+
# Check if kernel_mod directory exists, create if not
52+
if [ ! -d "$REPO_ROOT/kernel_mod" ]; then
53+
echo "Creating directory $REPO_ROOT/kernel_mod..."
54+
mkdir -p "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}"
55+
else
56+
mkdir -p "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}"
57+
fi
58+
59+
# Clean version folder if files exist
60+
if [ "$(ls -A "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}" 2>/dev/null)" ]; then
61+
echo "Cleaning $REPO_ROOT/kernel_mod/${KERNEL_VERSION}..."
62+
rm -rf "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}"/*
63+
fi
64+
65+
echo "Packing $REPO_ROOT/kernel_mod/${KERNEL_VERSION}..."
66+
tar czf "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}/rootfs.tar.gz" -C "$REPO_ROOT/images/${KERNEL_VERSION}/rootfs" boot lib
67+
cp "$SCRIPT_DIR/install_to_kernel_dev.sh" "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}/"
68+
69+
# Only copy to remote if IP address is provided
70+
if [ -n "$IP_ADDRESS" ]; then
71+
echo "Copying files and setting permissions on remote host..."
72+
# Use SSH ControlMaster to reuse a single SSH connection
73+
CONTROL_PATH="/tmp/ssh-control-${USERNAME}-${IP_ADDRESS}"
74+
ssh -o ControlMaster=yes -o ControlPath="${CONTROL_PATH}" -o ControlPersist=10s -fN ${USERNAME}@${IP_ADDRESS}
75+
ssh -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" ${USERNAME}@${IP_ADDRESS} "mkdir -p ${REMOTE_PATH}kernel_mod"
76+
scp -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" -r "$REPO_ROOT/kernel_mod/${KERNEL_VERSION}" ${USERNAME}@${IP_ADDRESS}:${REMOTE_PATH}kernel_mod/
77+
ssh -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" ${USERNAME}@${IP_ADDRESS} "chmod +x ${REMOTE_PATH}kernel_mod/${KERNEL_VERSION}/install_to_kernel_dev.sh"
78+
ssh -o ControlPath="${CONTROL_PATH}" -O exit ${USERNAME}@${IP_ADDRESS} 2>/dev/null
79+
echo "Done! Files copied to ${USERNAME}@${IP_ADDRESS}:${REMOTE_PATH}kernel_mod/${KERNEL_VERSION}/"
80+
else
81+
echo "Done! Files aggregated to $REPO_ROOT/kernel_mod/${KERNEL_VERSION}/"
82+
fi

scripts/deploy_kernel_6.2.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
2+
#!/bin/bash
3+
4+
# Display help message
5+
if [ "$#" -eq 0 ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
6+
echo "Usage: $0 [TARGET] [USERNAME] [REMOTE_PATH] [REMOTE_BOOT_FOLDER]"
7+
echo ""
8+
echo "Package kernel modules, optionally copy them to the TARGET, update boot files and reboot the TARGET."
9+
echo ""
10+
echo "Arguments:"
11+
echo " TARGET Target device hostname or IP address"
12+
echo " USERNAME SSH username for TARGET (default: administrator)"
13+
echo " REMOTE_PATH Remote path to copy files to (default: dev)"
14+
echo " REMOTE_BOOT_FOLDER Folder name under /boot on TARGET (default: dev)"
15+
echo ""
16+
echo "Example:"
17+
echo " $0 192.168.1.100 - pack and copy to /home/administrator/dev, update /boot/dev and reboot TARGET"
18+
echo " $0 192.168.1.100 nvidia - pack and copy to /home/nvidia/dev, update /boot/dev and reboot TARGET"
19+
echo " $0 192.168.1.100 nvidia foo - pack and copy to /home/nvidia/foo, update /boot/dev and reboot TARGET"
20+
echo " $0 192.168.1.100 nvidia foo bar - pack and copy to /home/nvidia/foo, update /boot/bar and reboot TARGET"
21+
exit 0
22+
fi
23+
24+
# Set defaults
25+
TARGET="$1"
26+
USERNAME="${2:-administrator}"
27+
REMOTE_PATH="${3:-dev}"
28+
REMOTE_BOOT_FOLDER="${4:-dev}"
29+
LOCAL_DIR="."
30+
31+
# Check if kernel_mod directory exists, create if not
32+
if [ ! -d ${LOCAL_DIR}/kernel_mod ]; then
33+
echo "Creating directory ${LOCAL_DIR}/kernel_mod..."
34+
mkdir -p ${LOCAL_DIR}/kernel_mod/6.2
35+
else
36+
mkdir -p ${LOCAL_DIR}/kernel_mod/6.2
37+
fi
38+
39+
# Clean 6.2 folder if files exist
40+
if [ "$(ls -A ${LOCAL_DIR}/kernel_mod/6.2 2>/dev/null)" ]; then
41+
echo "Cleaning ${LOCAL_DIR}/kernel_mod/6.2..."
42+
rm -rf ${LOCAL_DIR}/kernel_mod/6.2/*
43+
fi
44+
45+
echo "Packing ${LOCAL_DIR}/kernel_mod/6.2/rootfs.tar.gz"
46+
tar czf ${LOCAL_DIR}/kernel_mod/6.2/rootfs.tar.gz -C images/6.2/rootfs boot lib
47+
48+
if [ "$#" -eq 0 ]; then
49+
echo "No TARGET specified, skipping copy and reboot."
50+
else
51+
echo "Copying files and setting permissions on remote host..."
52+
cp ${LOCAL_DIR}/scripts/install_to_kernel_6.2.sh ${LOCAL_DIR}/kernel_mod/6.2/
53+
# Use SSH ControlMaster to reuse a single SSH connection
54+
CONTROL_PATH="/tmp/ssh-control-${USERNAME}-${TARGET}"
55+
ssh -o ControlMaster=yes -o ControlPath="${CONTROL_PATH}" -o ControlPersist=10s -fN ${USERNAME}@${TARGET}
56+
ssh -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" ${USERNAME}@${TARGET} "rm -rf ${REMOTE_PATH}/kernel_mod/6.2 && mkdir -p ${REMOTE_PATH}/kernel_mod"
57+
scp -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" -r ${LOCAL_DIR}/kernel_mod/6.2 ${USERNAME}@${TARGET}:${REMOTE_PATH}/kernel_mod/
58+
ssh -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" ${USERNAME}@${TARGET} "chmod +x ${REMOTE_PATH}/kernel_mod/6.2/install_to_kernel_6.2.sh"
59+
ssh -o ControlMaster=no -o ControlPath="${CONTROL_PATH}" ${USERNAME}@${TARGET} "cd ${REMOTE_PATH}/kernel_mod/6.2 && ./install_to_kernel_6.2.sh ${REMOTE_BOOT_FOLDER}"
60+
ssh -o ControlPath="${CONTROL_PATH}" -O exit ${USERNAME}@${TARGET} 2>/dev/null
61+
fi

scripts/install_to_kernel_6.2.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
3+
# Display help message
4+
if [ "$#" -eq 0 ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
5+
echo "Usage: $0 [BOOT_FOLDER]"
6+
echo ""
7+
echo "Update the kernel modules and boot files on the local device."
8+
echo ""
9+
echo "Arguments:"
10+
echo " BOOT_FOLDER Folder name under /boot to copy Image (default: dev)"
11+
echo ""
12+
echo "Example:"
13+
echo " $0 foo"
14+
exit 0
15+
fi
16+
17+
# Set default folder name
18+
FOLDER="${1:-dev}"
19+
20+
if [ ! -d /boot/${FOLDER} ]; then
21+
sudo mkdir /boot/${FOLDER}
22+
fi
23+
24+
tar xf rootfs.tar.gz
25+
echo "sudo cp -r lib/modules/5.15.148-tegra /lib/modules/."
26+
sudo cp -r lib/modules/5.15.148-tegra /lib/modules/.
27+
echo "sudo cp boot/tegra234-camera-d4xx-overlay*.dtbo /boot/."
28+
sudo cp boot/tegra234-camera-d4xx-overlay*.dtbo /boot/.
29+
echo "sudo cp boot/dtb/tegra234-p3737-0000+p3701-0005-nv.dtb /boot/dtb/."
30+
sudo cp boot/dtb/tegra234-p3737-0000+p3701-0005-nv.dtb /boot/dtb/.
31+
echo "sudo cp boot/Image /boot/${FOLDER}/."
32+
sudo cp boot/Image /boot/${FOLDER}/.
33+
echo "sudo depmod"
34+
sudo depmod
35+
echo "done - rebooting"
36+
sudo reboot

setup_workspace.sh

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fi
4040
export DEVDIR=$(cd `dirname $0` && pwd)
4141

4242
. $DEVDIR/scripts/setup-common "$1"
43-
echo "Setup JetPack $1 to sources_$JETPACK_VERSION"
43+
echo "Setup JetPack $1 to sources_$1"
4444

4545
# Display NVIDIA license
4646
DisplayNvidiaLicense "${REVISION}" "${LICENSE}"
@@ -72,21 +72,54 @@ echo "In a case you have local changes you may reset them with ./apply_patches.s
7272
echo
7373
# Clone L4T kernel source repo
7474
cd $DEVDIR
75-
if [[ -f "./scripts/source_sync_$1.sh" ]]; then
76-
"./scripts/source_sync_$1.sh" -t "$L4T_VERSION" -d "sources_$JETPACK_VERSION"
77-
elif [[ -f "./scripts/source_sync_$JETPACK_VERSION.sh" ]]; then
78-
"./scripts/source_sync_$JETPACK_VERSION.sh" -t "$L4T_VERSION" -d "sources_$JETPACK_VERSION"
75+
76+
# Check if local tar ball exists in ~/nvidia_sources_cache
77+
NVIDIA_CACHE_DIR="$HOME/nvidia_sources_cache"
78+
TARBALL_NAME="backup_sources_$1.tar.gz"
79+
TARBALL_PATH="$NVIDIA_CACHE_DIR/$TARBALL_NAME"
80+
81+
if [[ -f "$TARBALL_PATH" ]]; then
82+
echo "Found local tar ball: $TARBALL_PATH"
83+
echo "Extracting sources from local cache instead of cloning from NVIDIA repository..."
84+
85+
# Remove existing sources directory if it exists
86+
if [[ -d "sources_$1" ]]; then
87+
echo "Removing existing sources_$1 directory..."
88+
rm -rf "sources_$1"
89+
fi
90+
91+
# Extract tar ball
92+
echo "Extracting $TARBALL_NAME..."
93+
tar -xzf "$TARBALL_PATH"
94+
95+
# Check what directory was extracted and rename if necessary
96+
# The tar ball might contain sources_6.x instead of sources_6.0
97+
EXTRACTED_DIR=$(tar -tzf "$TARBALL_PATH" | head -1 | cut -d'/' -f1)
98+
if [[ "$EXTRACTED_DIR" != "sources_$1" ]]; then
99+
echo "Renaming extracted directory from $EXTRACTED_DIR to sources_$1..."
100+
mv "$EXTRACTED_DIR" "sources_$1"
101+
fi
102+
103+
echo "Sources extracted successfully from local cache."
104+
else
105+
echo "Local tar ball not found at $TARBALL_PATH"
106+
echo "Cloning sources from NVIDIA repository..."
107+
if [[ -f "./scripts/source_sync_$1.sh" ]]; then
108+
"./scripts/source_sync_$1.sh" -t "$L4T_VERSION" -d "sources_$1"
109+
elif [[ -f "./scripts/source_sync_$JETPACK_VERSION.sh" ]]; then
110+
./scripts/source_sync_$JETPACK_VERSION.sh -t $L4T_VERSION -d sources_$1
111+
fi
79112
fi
80113

81114
# copy Makefile for jp6
82115
if [[ "$JETPACK_VERSION" == "6.x" ]]; then
83-
cp ./nvidia-oot/Makefile "sources_$JETPACK_VERSION/"
84-
cp ./kernel/kernel-jammy-src/Makefile "sources_$JETPACK_VERSION/kernel"
116+
cp ./nvidia-oot/Makefile "sources_$1/"
117+
cp ./kernel/kernel-jammy-src/Makefile "sources_$1/kernel"
85118
fi
86119

87120
# remove BUILD_NUMBER env dependency kernel vermagic
88121
if [[ "${JETPACK_VERSION}" == "4.6.1" ]]; then
89-
sed -i s/'UTS_RELEASE=\$(KERNELRELEASE)-ab\$(BUILD_NUMBER)'/'UTS_RELEASE=\$(KERNELRELEASE)'/g ./sources_$JETPACK_VERSION/kernel/kernel-4.9/Makefile
90-
sed -i 's/the-space :=/E =/g' ./sources_$JETPACK_VERSION/kernel/kernel-4.9/scripts/Kbuild.include
91-
sed -i 's/the-space += /the-space = \$E \$E/g' ./sources_$JETPACK_VERSION/kernel/kernel-4.9/scripts/Kbuild.include
122+
sed -i s/'UTS_RELEASE=\$(KERNELRELEASE)-ab\$(BUILD_NUMBER)'/'UTS_RELEASE=\$(KERNELRELEASE)'/g ./sources_$1/kernel/kernel-4.9/Makefile
123+
sed -i 's/the-space :=/E =/g' ./sources_$1/kernel/kernel-4.9/scripts/Kbuild.include
124+
sed -i 's/the-space += /the-space = \$E \$E/g' ./sources_$1/kernel/kernel-4.9/scripts/Kbuild.include
92125
fi

0 commit comments

Comments
 (0)