1.安装图形生成工具
# sudo apt-get install graphviz2.仅列举 active 状态的控件
编写:dapm_debug_host.sh脚本,脚本在主机执行即可,Android设备必须root.
**********************************************************************************
#!/bin/bash
ASOC_TOP="/sys/kernel/debug/asoc"
HOST_TMP="tmp"DAPM_ROUTE_PIC="${HOST_TMP}/dapm_route.png"
DAPM_ROUTE_DOT="${HOST_TMP}/dapm_route.dot"
DAPM_WIDGET_INFO="${HOST_TMP}/dapm_widget.info"
DAPM_WIDGET_LIST="${HOST_TMP}/dapm_widget.list"mkdir -p ${HOST_TMP}rm -rf ${DAPM_ROUTE_PIC}
rm -rf ${DAPM_ROUTE_DOT}
rm -rf ${DAPM_WIDGET_INFO}
rm -rf ${DAPM_WIDGET_LIST}adb root
adb remountIFS=$'\n'function parse_widget_information()
{local state_tmp="${HOST_TMP}/state.tmp"adb shell "cat '$1'" > ${state_tmp}cat ${state_tmp} >> ${DAPM_WIDGET_INFO}echo >> ${DAPM_WIDGET_INFO}widget_name=$(awk 'BEGIN{FS=":"} {if(NR==1) {print $1} }'  ${state_tmp})widget_state=$(awk 'BEGIN{FS=":"} {if(NR==1) {print $2} }' ${state_tmp} | awk '{print $1}')#if [ x"Off" == x"${widget_state}" ] || [ x"Offforce" == x"{widget_state}" ]; then# echo ""\"${widget_name}\""[style="filled", color="black", fillcolor="lightyellow"];" >> ${DAPM_ROUTE_DOT}# widget_in=$(awk 'BEGIN{FS="\""; OFS="\""} /in/{if(NR >= 2) {if($4) { print("", $4, "->", "'"$widget_name"'", "") >> "'"$DAPM_ROUTE_DOT"'"} } }'  $state_tmp)# widget_out=$(awk 'BEGIN{FS="\""; OFS="\""} /out/{if(NR >= 2) {if($4) {print ("", "'"$widget_name"'", "->", $4,"") >> "'"$DAPM_ROUTE_DOT"'"} } }' $state_tmp)#fiif [ x"On" == x"${widget_state}" ] || [ x"Onforce" == x"${widget_state}" ]; thenecho ""\"${widget_name}\""[style="filled", color="black", fillcolor="palegreen"];" >> ${DAPM_ROUTE_DOT}widget_in=$(awk 'BEGIN{FS="\""; OFS="\""} /in/{if(NR >= 2) {if($4) { print("", $4, "->", "'"$widget_name"'", "") >> "'"$DAPM_ROUTE_DOT"'"} } }'  $state_tmp)widget_out=$(awk 'BEGIN{FS="\""; OFS="\""} /out/{if(NR >= 2) {if($4) {print ("", "'"$widget_name"'", "->", $4,"") >> "'"$DAPM_ROUTE_DOT"'"} } }' $state_tmp)firm -rf ${state_tmp}
}function add_widget_to_list()
{local dapm_dir="$1"local widget_list="${HOST_TMP}/widget.tmp"adb shell "ls '${dapm_dir}'" > ${widget_list}for widget in $(cat ${widget_list})doif [ x"bias_level" != x"${widget}" ]; thenecho "${dapm_dir}/${widget}" >> ${DAPM_WIDGET_LIST}parse_widget_information "${dapm_dir}/${widget}"fidonerm -rf ${widget_list}
}function search_dapm_directory()
{local top="$1"local top_dir="${HOST_TMP}/top.tmp"local sub_dir="${HOST_TMP}/sub.tmp"adb shell "ls '${top}'" > ${top_dir}for sub in $(cat ${top_dir})doadb shell "stat '${top}/${sub}'" > ${sub_dir}attribute=$(cat "${sub_dir}")if [[ ${attribute} =~ "directory" ]]; thenif [ x"dapm" == x"${sub}" ]; thenecho "Found dapm dir (${top}/${sub})"add_widget_to_list "${top}/${sub}"elsesearch_dapm_directory "${top}/${sub}"fifidonerm -rf ${top_dir}rm -rf ${sub_dir}
}function draw_dapm_route_picture()
{local dot_tmp="${HOST_TMP}/dot.tmp"if [ ! -f ${DAPM_ROUTE_DOT} ]; thenreturnfisort -k2n $DAPM_ROUTE_DOT | awk '{if ($0!=line) print;line=$0}'  > $dot_tmpawk 'BEGIN{print("digraph a{")} {print $0}' $dot_tmp > ${DAPM_ROUTE_DOT}echo "}" >> ${DAPM_ROUTE_DOT}echoecho -e '\e[0;33;1mPicture at' "$DAPM_ROUTE_PIC" '\e[0m'echodot -Tpng ${DAPM_ROUTE_DOT} -o $DAPM_ROUTE_PICrm -rf ${dot_tmp}
}search_dapm_directory ${ASOC_TOP}draw_dapm_route_picture
**********************************************************************************3.列举所有的控件,包括 active 和 inactive 的,因为控件比较多,所有每个dapm目录一张图片.
编写:dapm_route_all.sh脚本
**********************************************************************************
#!/bin/bashASOC_TOP="/sys/kernel/debug/asoc"
HOST_TMP="tmp"DAPM_ROUTE="${HOST_TMP}/dapm_route"
DAPM_WIDGET_INFO="${HOST_TMP}/dapm_widget.info"
DAPM_WIDGET_LIST="${HOST_TMP}/dapm_widget.list"index=0mkdir -p ${HOST_TMP}
rm -rf ${HOST_TMP}/*adb root
adb remountIFS=$'\n'function parse_widget_information()
{local state_tmp="${HOST_TMP}/state.tmp"adb shell "cat '$1'" > ${state_tmp}cat ${state_tmp} >> ${DAPM_WIDGET_INFO}echo >> ${DAPM_WIDGET_INFO}widget_name=$(awk 'BEGIN{FS=":"} {if(NR==1) {print $1} }'  ${state_tmp})widget_state=$(awk 'BEGIN{FS=":"} {if(NR==1) {print $2} }' ${state_tmp} | awk '{print $1}')if [ x"Off" == x"${widget_state}" ] || [ x"Offforce" == x"{widget_state}" ]; thenecho ""\"${widget_name}\""[style="filled", color="black", fillcolor="lightyellow"];" >> $DAPM_ROUTE-$index.dotfiif [ x"On" == x"${widget_state}" ] || [ x"Onforce" == x"${widget_state}" ]; thenecho ""\"${widget_name}\""[style="filled", color="black", fillcolor="palegreen"];" >> $DAPM_ROUTE-$index.dotfiwidget_in=$(awk 'BEGIN{FS="\""; OFS="\""} /in/{if(NR >= 2) {if($4) { print("", $4, "->", "'"$widget_name"'", "") >> "'"$DAPM_ROUTE-$index.dot"'"} } }'  $state_tmp)widget_out=$(awk 'BEGIN{FS="\""; OFS="\""} /out/{if(NR >= 2) {if($4) {print ("", "'"$widget_name"'", "->", $4,"") >> "'"$DAPM_ROUTE-$index.dot"'"} } }' $state_tmp)rm -rf ${state_tmp}
}function add_widget_to_list()
{local dapm_dir="$1"local widget_list="${HOST_TMP}/widget.tmp"adb shell "ls '${dapm_dir}'" > ${widget_list}for widget in $(cat ${widget_list})doif [ x"bias_level" != x"${widget}" ]; thenecho "${dapm_dir}/${widget}" >> ${DAPM_WIDGET_LIST}parse_widget_information "${dapm_dir}/${widget}"fidonerm -rf ${widget_list}
}function search_dapm_directory()
{local top="$1"local top_dir="${HOST_TMP}/top.tmp"local sub_dir="${HOST_TMP}/sub.tmp"adb shell "ls '${top}'" > ${top_dir}for sub in $(cat ${top_dir})doadb shell "stat '${top}/${sub}'" > ${sub_dir}attribute=$(cat "${sub_dir}")if [[ ${attribute} =~ "directory" ]]; thenif [ x"dapm" == x"${sub}" ]; thenecho "Found dapm dir (${top}/${sub})"index=$(($index+1))add_widget_to_list "${top}/${sub}"elsesearch_dapm_directory "${top}/${sub}"fifidonerm -rf ${top_dir}rm -rf ${sub_dir}
}function draw_dapm_route_picture()
{local dot_tmp="${HOST_TMP}/dot.tmp"local i=1for (( i=1; i<=$index; i++ ))doif [ ! -f $DAPM_ROUTE-$i.dot ]; thencontinuefisort -k2n $DAPM_ROUTE-$i.dot | awk '{if ($0!=line) print;line=$0}'  > $dot_tmpawk 'BEGIN{print("digraph a{")} {print $0}' $dot_tmp > $DAPM_ROUTE-$i.dotecho "}" >> $DAPM_ROUTE-$i.dotechoecho -e '\e[0;33;1mPicture at' "$DAPM_ROUTE-$i.png" '\e[0m'echodot -Tpng $DAPM_ROUTE-$i.dot -o $DAPM_ROUTE-$i.pngdonerm -rf ${dot_tmp}rm -rf ${HOST_TMP}/*.dot
}search_dapm_directory ${ASOC_TOP}draw_dapm_route_picture
**********************************************************************************

Linux ALSA DAPM 调试工具相关推荐

  1. Linux ALSA音频系统:platform,machine,codec

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_41965270/arti ...

  2. Linux ALSA 音频系统:物理链路篇

    原址 1. Overview 硬件平台及软件版本: Kernel - 3.4.5 SoC - Samsung exynos CODEC - WM8994 Machine - goni_wm8994 U ...

  3. Linux ALSA声卡驱动之四:Codec 以及Codec_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  4. Linux ALSA声卡驱动之二:Platform

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  5. Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  6. linux alsa驱动讲解

    转载自:https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/477412/ 程式前沿 幫助程式設計師解決問題,增加專業技能,提升個人能力與 ...

  7. (一)Linux ALSA 音频系统:物理链路篇

    物理链路篇 转自:https://me.csdn.net/zyuanyun Linux ALSA 音频系统:物理链路篇 Linux ALSA 音频系统:物理链路篇 原创 zyuanyun 最后发布于2 ...

  8. Linux ALSA声卡驱动之三:Platform之Cpu_dai

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  9. Linux ALSA声卡驱动之八:ASoC架构中的Platform

    1.  Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过C ...

最新文章

  1. c调用c++ qt_C++中是如何调用C接口的?
  2. BZOJ4866 Ynoi2017由乃的商场之旅(莫队)
  3. 【Ajax Servlet JSP MySQL】Ajax实现省份地区选择:三级联动
  4. 是现在的钱不值钱还是药太贵!
  5. 数据结构:(1)课程总览
  6. jquery easyUi的学习笔记{一头扎进EasyUI}
  7. 8-7/8 java/redis 客服端
  8. JavaWeb开发模式
  9. 小程序 tabBar菜单
  10. 惠普服务器不进系统,HP服务器无法启动
  11. WINDOWS 7 PRO X64 2015年9月增量补丁包微软官方下载地址
  12. 动画开发之PIXI开发
  13. 谷歌浏览器任何页面都打不开连设置也不能打开
  14. css将两张图片叠加(简易方法)
  15. m4a录音文件损坏修复_m4a录音文件怎么打开 - 卡饭网
  16. 数据结构串之寻找整数
  17. 【十三香吗?】网易严选-苹果12商品评论数据可视化分析
  18. unity3d实现一个魔方旋转展示
  19. 模块regsvr32 c:\Windows\SysWOW64\comdlg32.ocx 加载失败
  20. Flash安全沙箱调研

热门文章

  1. [周榜单]极乐小程序榜单(第十一期)
  2. js语法、关键保留字、变量、数据类型
  3. Spring组合注解和元注解
  4. UIButton设置圆角和边框
  5. loadrunner脚本中关于httpCode401特殊情况
  6. ASP.NET中实现二级或多级域名(修改UrlRewrite)
  7. 工作两年总结(一句话)
  8. 深度学习 --- 随机神经网络详解(玻尔兹曼机学习算法、运行算法)
  9. qq空间代码查询_Mysql千万级大数据查询优化经验,一点课堂(多岸学院)
  10. ajax获取session值_【JavaWeb】91:Cookie与Session