1#!/bin/bash
2################################################################################
3#
4# Copyright (C) 2022 Huawei Device Co., Ltd.
5# SPDX-License-Identifier: GPL-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10# See the License for the specific language governing permissions and
11# limitations under the License.
12#
13################################################################################
14# File: tracepoint.sh
15#
16# Description: test tracepoint
17#
18# Authors:     yang ming di
19#
20# History:     August 4 2022 - test tracepoint
21#
22################################################################################
23
24set -e
25
26CURRENT_DIR=$(pwd)
27ROOT_DIR=$(cd ${CURRENT_DIR}/../../ && pwd)
28ROOT_FILE_DIR=${ROOT_DIR}/kernel/linux/build/test/tracepointtest
29COMPILE_DIR=${ROOT_DIR}/out/kernel/src_tmp/linux-5.10
30OBJ_DIR=${ROOT_DIR}/out/kernel/OBJ
31DRIVERS_DIR=${ROOT_DIR}/out/kernel/src_tmp/linux-5.10/drivers
32TRACEPOINT_INCLUDE_DIR=${ROOT_DIR}/out/kernel/src_tmp/linux-5.10/include/trace/hooks
33DRIVERS_TRACEPOINT_DIR=${ROOT_DIR}/out/kernel/src_tmp/linux-5.10/drivers/tracepointtest
34CONFIG_DIR=${ROOT_DIR}/out/kernel/src_tmp/linux-5.10/arch/arm64/configs
35
36copy() {
37  local SOURCE_PATH=$1
38  local TARGET_PATH=$2
39  echo "copy ${SOURCE_PATH} to ${TARGET_PATH}"
40  cp -rf ${SOURCE_PATH} ${TARGET_PATH}
41}
42
43modify_config() {
44  local SOURCE_FILE=$1
45  local TARGET_FILE=$2
46  if [ -e "${CONFIG_DIR}/tmp" ]; then
47    rm -f ${CONFIG_DIR}/tmp
48  fi
49
50  cp -f ${CONFIG_DIR}/${TARGET_FILE} ${CONFIG_DIR}/${TARGET_FILE}_tmpfile
51
52  while read line; do
53    echo "$line" >>${CONFIG_DIR}/tmp
54  done <${CONFIG_DIR}/${TARGET_FILE}
55
56  while read line; do
57    if [[ "$line" != "#"* ]]; then
58      echo "$line" >>${CONFIG_DIR}/tmp
59    fi
60  done <${SOURCE_FILE}
61
62  mv ${CONFIG_DIR}/tmp ${CONFIG_DIR}/${TARGET_FILE}
63}
64
65modify_files() {
66  local KCONFIG=${DRIVERS_DIR}/Kconfig
67  local MAKEFILE=${DRIVERS_DIR}/Makefile
68  local VENDOR_HOOKS=${DRIVERS_DIR}/hooks/vendor_hooks.c
69  local TMPFILE=${DRIVERS_DIR}/tmp
70
71  cp -f ${KCONFIG} ${KCONFIG}_tmpfile
72  cp -f ${MAKEFILE} ${MAKEFILE}_tmpfile
73  cp -f ${VENDOR_HOOKS} ${VENDOR_HOOKS}_tmpfile
74
75  if [ -e "${TMPFILE}" ]; then
76    rm -f ${TMPFILE}
77  fi
78
79  while read line; do
80    if [[ "$line" != "endmenu" ]]; then
81      echo "$line" >>${TMPFILE}
82    fi
83  done <${KCONFIG}
84  echo "source \"drivers/tracepointtest/Kconfig\"" >>${TMPFILE}
85  echo "endmenu" >>${TMPFILE}
86  mv ${TMPFILE} ${KCONFIG}
87
88  while read line; do
89    echo "$line" >>${TMPFILE}
90  done <${MAKEFILE}
91  echo "obj-y   += tracepointtest/" >>${TMPFILE}
92  mv ${TMPFILE} ${MAKEFILE}
93
94  while read line; do
95    echo "$line" >>${TMPFILE}
96  done <${VENDOR_HOOKS}
97  echo "#include <trace/hooks/emmc.h>" >>${TMPFILE}
98  echo "EXPORT_TRACEPOINT_SYMBOL_GPL(vendor_aml_emmc_partition);" >>${TMPFILE}
99  echo "EXPORT_TRACEPOINT_SYMBOL_GPL(vendor_fake_boot_partition);" >>${TMPFILE}
100  mv ${TMPFILE} ${VENDOR_HOOKS}
101}
102
103compile() {
104  cd ${COMPILE_DIR} || exit
105  export PRODUCT_COMPANY=hihope
106  export DEVICE_NAME=rk3568
107  export DEVICE_COMPANY=rockchip
108  export PRODUCT_PATH=${ROOT_DIR}/out/kernel/vendor/hihope/rk3568
109  ./make-ohos.sh TB-RK3568X0 >null
110  if [ $? -ne 0 ]; then
111    echo "compile failed"
112    exit 1
113  else
114    echo "compile success"
115  fi
116}
117
118collect_ko() {
119  if [ -e "${OBJ_DIR}/kofiles" ]; then
120    rm -f ${OBJ_DIR}/kofiles
121    mkdir -p ${OBJ_DIR}/kofiles
122  else
123    mkdir -p ${OBJ_DIR}/kofiles
124  fi
125
126  find ${DRIVERS_TRACEPOINT_DIR} -name '*.ko' | xargs cp -t ${OBJ_DIR}/kofiles
127}
128
129restore() {
130  local CONFIGNAME=rockchip_linux_defconfig
131  local KCONFIG=${DRIVERS_DIR}/Kconfig
132  local MAKEFILE=${DRIVERS_DIR}/Makefile
133  local HEADERFILE=${TRACEPOINT_INCLUDE_DIR}/emmc.h
134  local VENDOR_HOOKS=${DRIVERS_DIR}/hooks/vendor_hooks.c
135
136  if [ -d "${DRIVERS_TRACEPOINT_DIR}" ]; then
137    rm -rf ${DRIVERS_TRACEPOINT_DIR}
138  fi
139
140  if [ -e "${HEADERFILE}" ]; then
141    rm -rf ${HEADERFILE}
142  fi
143  mv -f ${CONFIG_DIR}/${CONFIGNAME}_tmpfile ${CONFIG_DIR}/${CONFIGNAME}
144  mv -f ${KCONFIG}_tmpfile ${KCONFIG}
145  mv -f ${MAKEFILE}_tmpfile ${MAKEFILE}
146  mv -f ${VENDOR_HOOKS}_tmpfile ${VENDOR_HOOKS}
147  if [ -e "${COMPILE_DIR}/.lock" ]; then
148    rm -rf ${COMPILE_DIR}/.lock
149  fi
150}
151
152main() {
153  if [ -e "${COMPILE_DIR}/.lock" ]; then
154    restore
155  fi
156
157  echo "" >${COMPILE_DIR}/.lock
158
159  if [ -d "${DRIVERS_DIR}/tracepointtest" ]; then
160    rm -rf ${DRIVERS_DIR}/tracepointtest
161    mkdir -p ${DRIVERS_DIR}/tracepointtest
162  else
163    mkdir -p ${DRIVERS_DIR}/tracepointtest
164  fi
165
166  for dir in $(ls "${ROOT_FILE_DIR}"); do
167    if [ -d "${ROOT_FILE_DIR}/${dir}" ]; then
168      copy ${ROOT_FILE_DIR}/${dir} ${DRIVERS_TRACEPOINT_DIR}/${dir}
169    elif [[ "${dir}" == "Makefile" ]]; then
170      copy ${ROOT_FILE_DIR}/${dir} ${DRIVERS_TRACEPOINT_DIR}/${dir}
171    elif [[ "${dir}" == "Kconfig" ]]; then
172      copy ${ROOT_FILE_DIR}/${dir} ${DRIVERS_TRACEPOINT_DIR}/${dir}
173    elif [[ "${dir}" == *.h ]]; then
174      copy ${ROOT_FILE_DIR}/${dir} ${TRACEPOINT_INCLUDE_DIR}/${dir}
175    elif [[ "${dir}" == "rockchip_linux_defconfig" ]]; then
176      modify_config ${ROOT_FILE_DIR}/${dir} ${dir}
177    fi
178  done
179
180  modify_files
181  compile
182  collect_ko
183  restore
184}
185
186main
187