/
usr
/
src
/
linux-headers-5.15.0-190
/
tools
/
bootconfig
/
scripts
/
/usr/src/linux-headers-5.15.0-190/tools/bootconfig/scripts
mkdir
upload
Name
Size
Mode
Actions
bconf2ftrace.sh
6915
0755
edit
dl
rm
ftrace.sh
2843
0644
edit
dl
rm
ftrace2bconf.sh
5908
0755
edit
dl
rm
xbc.sh
1100
0644
edit
dl
rm
Edit:
/usr/src/linux-headers-5.15.0-190/tools/bootconfig/scripts/ftrace2bconf.sh
(5908B)
#!/bin/sh # SPDX-License-Identifier: GPL-2.0-only usage() { echo "Dump boot-time tracing bootconfig from ftrace" echo "Usage: $0 [--debug] [ > BOOTCONFIG-FILE]" exit 1 } DEBUG= while [ x"$1" != x ]; do case "$1" in "--debug") DEBUG=$1;; -*) usage ;; esac shift 1 done if [ x"$DEBUG" != x ]; then set -x fi TRACEFS=`grep -m 1 -w tracefs /proc/mounts | cut -f 2 -d " "` if [ -z "$TRACEFS" ]; then if ! grep -wq debugfs /proc/mounts; then echo "Error: No tracefs/debugfs was mounted." exit 1 fi TRACEFS=`grep -m 1 -w debugfs /proc/mounts | cut -f 2 -d " "`/tracing if [ ! -d $TRACEFS ]; then echo "Error: ftrace is not enabled on this kernel." 1>&2 exit 1 fi fi ######## main ######### set -e emit_kv() { # key =|+= value echo "$@" } global_options() { val=`cat $TRACEFS/max_graph_depth` [ $val != 0 ] && emit_kv kernel.fgraph_max_depth = $val if grep -qv "^#" $TRACEFS/set_graph_function $TRACEFS/set_graph_notrace ; then cat 1>&2 << EOF # WARN: kernel.fgraph_filters and kernel.fgraph_notrace are not supported, since the wild card expression was expanded and lost from memory. EOF fi } kprobe_event_options() { cat $TRACEFS/kprobe_events | while read p args; do case $p in r*) cat 1>&2 << EOF # WARN: A return probe found but it is not supported by bootconfig. Skip it. EOF continue;; esac p=${p#*:} event=${p#*/} group=${p%/*} if [ $group != "kprobes" ]; then cat 1>&2 << EOF # WARN: kprobes group name $group is changed to "kprobes" for bootconfig. EOF fi emit_kv $PREFIX.event.kprobes.$event.probes += $args done } synth_event_options() { cat $TRACEFS/synthetic_events | while read event fields; do emit_kv $PREFIX.event.synthetic.$event.fields = `echo $fields | sed "s/;/,/g"` done } # Variables resolver DEFINED_VARS= UNRESOLVED_EVENTS= defined_vars() { # event-dir grep "^hist" $1/trigger | grep -o ':[a-zA-Z0-9]*=' } referred_vars() { grep "^hist" $1/trigger | grep -o '$[a-zA-Z0-9]*' } event_is_enabled() { # enable-file test -f $1 && grep -q "1" $1 } per_event_options() { # event-dir evdir=$1 # Check the special event which has no filter and no trigger [ ! -f $evdir/filter ] && return if grep -q "^hist:" $evdir/trigger; then # hist action can refer the undefined variables __vars=`defined_vars $evdir` for v in `referred_vars $evdir`; do if echo $DEFINED_VARS $__vars | grep -vqw ${v#$}; then # $v is not defined yet, defer it UNRESOLVED_EVENTS="$UNRESOLVED_EVENTS $evdir" return; fi done DEFINED_VARS="$DEFINED_VARS "`defined_vars $evdir` fi grep -v "^#" $evdir/trigger | while read action active; do emit_kv $PREFIX.event.$group.$event.actions += \'$action\' done if [ $GROUP_ENABLED -eq 0 ] && event_is_enabled $evdir/enable; then emit_kv $PREFIX.event.$group.$event.enable fi val=`cat $evdir/filter` if [ "$val" != "none" ]; then emit_kv $PREFIX.event.$group.$event.filter = "$val" fi } retry_unresolved() { unresolved=$UNRESOLVED_EVENTS UNRESOLVED_EVENTS= for evdir in $unresolved; do event=${evdir##*/} group=${evdir%/*}; group=${group##*/} per_event_options $evdir done } event_options() { # PREFIX and INSTANCE must be set if [ $PREFIX = "ftrace" ]; then # define the dynamic events kprobe_event_options synth_event_options fi ALL_ENABLED=0 if event_is_enabled $INSTANCE/events/enable; then emit_kv $PREFIX.event.enable ALL_ENABLED=1 fi for group in `ls $INSTANCE/events/` ; do [ ! -d $INSTANCE/events/$group ] && continue GROUP_ENABLED=$ALL_ENABLED if [ $ALL_ENABLED -eq 0 ] && \ event_is_enabled $INSTANCE/events/$group/enable ;then emit_kv $PREFIX.event.$group.enable GROUP_ENABLED=1 fi for event in `ls $INSTANCE/events/$group/` ;do [ ! -d $INSTANCE/events/$group/$event ] && continue per_event_options $INSTANCE/events/$group/$event done done retry=0 while [ $retry -lt 3 ]; do retry_unresolved retry=$((retry + 1)) done if [ "$UNRESOLVED_EVENTS" ]; then cat 1>&2 << EOF ! ERROR: hist triggers in $UNRESOLVED_EVENTS use some undefined variables. EOF fi } is_default_trace_option() { # option grep -qw $1 << EOF print-parent nosym-offset nosym-addr noverbose noraw nohex nobin noblock trace_printk annotate nouserstacktrace nosym-userobj noprintk-msg-only context-info nolatency-format record-cmd norecord-tgid overwrite nodisable_on_free irq-info markers noevent-fork nopause-on-trace function-trace nofunction-fork nodisplay-graph nostacktrace notest_nop_accept notest_nop_refuse EOF } instance_options() { # [instance-name] if [ $# -eq 0 ]; then PREFIX="ftrace" INSTANCE=$TRACEFS else PREFIX="ftrace.instance.$1" INSTANCE=$TRACEFS/instances/$1 fi val= for i in `cat $INSTANCE/trace_options`; do is_default_trace_option $i && continue val="$val, $i" done [ "$val" ] && emit_kv $PREFIX.options = "${val#,}" val="local" for i in `cat $INSTANCE/trace_clock` ; do [ "${i#*]}" ] && continue i=${i%]}; val=${i#[} done [ $val != "local" ] && emit_kv $PREFIX.trace_clock = $val val=`cat $INSTANCE/buffer_size_kb` if echo $val | grep -vq "expanded" ; then emit_kv $PREFIX.buffer_size = $val"KB" fi if grep -q "is allocated" $INSTANCE/snapshot ; then emit_kv $PREFIX.alloc_snapshot fi val=`cat $INSTANCE/tracing_cpumask` if [ `echo $val | sed -e s/f//g`x != x ]; then emit_kv $PREFIX.cpumask = $val fi val=`cat $INSTANCE/tracing_on` if [ "$val" = "0" ]; then emit_kv $PREFIX.tracing_on = 0 fi val=`cat $INSTANCE/current_tracer` [ $val != nop ] && emit_kv $PREFIX.tracer = $val if grep -qv "^#" $INSTANCE/set_ftrace_filter $INSTANCE/set_ftrace_notrace; then cat 1>&2 << EOF # WARN: kernel.ftrace.filters and kernel.ftrace.notrace are not supported, since the wild card expression was expanded and lost from memory. EOF fi event_options } global_options instance_options for i in `ls $TRACEFS/instances` ; do instance_options $i done
Save
cmd:
run