我是靠谱客的博主 文艺小霸王,最近开发中收集的这篇文章主要介绍Rv1109内核调试说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

瑞芯微rv1106/1109 linux 内核 GDB调试环境的搭建

  • 说明
    • GDB环境的准备
      • 遇到的问题1:
      • 遇到的问题2
      • 遇到的问题3
    • KGDB环境的准备
      • 步骤1
      • 步骤2
    • 进行调试
    • 可能遇到的问题
      • 问题1
      • 问题2
    • 注意事项

说明

在这之前只在qmenu中调试过内核,没有在真实的板上调试过。
本文记录rv1109 linux 内核GDB调试环境的搭建过程中遇到的问题。
SDK使用的是rk官方的。
串口波特率荣品从1500000 改为115200

GDB环境的准备

遇到的问题1:

查看gdb的环境是否配置正确,进入SDK包kernel 目录,执行

../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb vmlinux

结果出现如下错误

Traceback (most recent call last):
  File "/usr/lib/python2.7/site.py", line 554, in <module>
    main()
  File "/usr/lib/python2.7/site.py", line 536, in main
    known_paths = addusersitepackages(known_paths)
  File "/usr/lib/python2.7/site.py", line 272, in addusersitepackages
    user_site = getusersitepackages()
  File "/usr/lib/python2.7/site.py", line 247, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/usr/lib/python2.7/site.py", line 237, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/usr/lib/python2.7/sysconfig.py", line 587, in get_config_var
    return get_config_vars().get(name)
  File "/usr/lib/python2.7/sysconfig.py", line 533, in get_config_vars
    _init_posix(_CONFIG_VARS)
  File "/usr/lib/python2.7/sysconfig.py", line 417, in _init_posix
    from _sysconfigdata import build_time_vars
  File "/usr/lib/python2.7/_sysconfigdata.py", line 6, in <module>
    from _sysconfigdata_nd import *
ImportError: No module named _sysconfigdata_nd

这里浓度切换python 版本,从3.8切换到2.7也还是出错

sudo update-alternatives --config python
2 个候选项可用于替换 python (提供 /usr/bin/python)。

  选择       路径              优先级  状态
------------------------------------------------------------
  0            /usr/bin/python2.7   2         自动模式
* 1            /usr/bin/python2.7   2         手动模式
  2            /usr/bin/python3.8   1         手动模式

解决办法

sudo ln -fs /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata.py /usr/lib/python2.7/
sudo ln -fs /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py /usr/lib/python2.7/

遇到的问题2

提示找不到libpython2.7.so.1.0 的库,搜索了/usr/目录下没有对应的库

解决方法,先用ldd命令查看还缺哪些库

ldd ../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb

然后在buildroot目录下查找名为libpython2.7.so.1.0的库,再export 环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxx对应的库路径

遇到的问题3

python配置问题,报错信息发下

 symbol lookup error: ../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb: undefined symbol: PyUnicodeUCS4_FromEncodedObject

解决办法
1.buildroot编译配置时 指定,建议使用buildroot配置gdb,把python相关的功能加上

--enable-unicode=ucs4

或者手动重新编译python2.7

./configure --enable-shared --enable-ipv6 --enable-unicode=ucs4 --with-system-ffi --with-threads
make -j 16

然后再把问题2中的export 路径 (export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxx对应的库路径) 改为手动编译的python路径。

KGDB环境的准备

步骤1

内核的配置
在这里插入图片描述CONFIG_KGDB_KDB 不用打开
CONFIG_KGDB_SERIAL_CONSOLE 要打开
CONFIG_DEBUG_INFO 也需要

步骤2

内核启动参数的配置
内核设置树中设置

chosen {
	bootargs = "loglevel=7 earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0 initcall_debug=1 kgdboc=ttyFIQ0,115200 kgdbcon root=PARTUUID=614e0000-0000 rootfstype=ext4 rw rootwait snd_aloop.index=7 kgdbwait";
};

这里波形率如果是150000 启动gdb时会报错。
解释:

kgdb over serial console (简称 kgdboc)
kgdbcon 是连接gdb时printk有用
要增加kgdbwait

进行调试

按上述配置后,烧入程序,进行板上内核,进入kgdb调试
在PC上执行

../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb vmlinux
(gdb) set serial baud 115200
(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0

就可以进行行调试

可能遇到的问题

问题1

出现如下报错

Continuing.
[   89.574759] random: fast init done
[   89.575523] iommu: Adding device ffb00000.vop to group 0
[   89.611604] rockchip-vop ffb00000.vop: Linked as a consumer to ffb00f00.iommu
[   89.632529] random: crng init done
Reply contains invalid hex digit 84
(gdb) continue 
Cannot execute this command while the selected thread is running.
(gdb) 

注意random: crng init done 文件系统找不到时会报这样的错误,这里是因为earlycon与后面的ttyfiq衔接的问题导致的。
解决办法

earlycon=uart8250,mmio32,0xff570000

备注:不加上述不进行调试也可以正常启动。

问题2

 Reply contains invalid hex digit 105

虽要加上

initcall_debug=1

注意事项

1.在调试时不要再通过串口连接开发板,否则会出现通信错误。
2.调试时不能接屏,否则会出现/dev/ttyUSB0: Device or resource busy.

最后

以上就是文艺小霸王为你收集整理的Rv1109内核调试说明的全部内容,希望文章能够帮你解决Rv1109内核调试说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部