1.linux内核调试之 crash分析dump文件
2.韦东山初版hello驱动树莓派4B移植(64位系统)——操作篇
3.ARM开发板LINUX系统缺少CH341驱动解决笔记
linux内核调试之 crash分析dump文件
Linux 下有多个内存转储分析工具,码下如 lcrash、码下Alicia、码下Crash。码下Crash 是码下一个由 Dave Anderson 开发并维护的内存转储分析工具,当前版本为5.0.0。码下tomcat系统源码在没有统一标准的码下内存转储文件格式的情况下,Crash 支持多种格式。码下
Crash 的码下命令格式如下:crash [OPTION]... NAMELIST MEMORY-IMAGE[@ADDRESS]其中,namelist 是码下用于调试版本内核的名称列表,通常需要自定义编译,码下或者从发行版网站下载包含内核的码下/usr/lib/debug/lib/modules/内核版本/vmlinux软件包。而memory-image是码下转存的某种格式的dump文件。
为了使用 Crash,码下需要安装相应的码下kernel-debuginfo和debug-info-common软件包,如 CentOS 8 下,可以从debuginfo.centos.org/8/...下载安装包。pb传输文件源码
使用 Crash 的命令提示符执行相关操作。Crash 内置命令用于查看寄存器值、调用堆栈等信息,这些命令与 gdb 相似。
例如,bt命令用于打印内核堆栈,可以列出所有内核堆栈或指定进程的堆栈。使用 bt + pid列出特定进程的堆栈,bt -f列出所有堆栈详细信息,bt -p仅打印崩溃线程的内核栈。
dmesg命令用于查看崩溃时的内核日志信息。
dis命令用于反汇编地址或函数,显示该地址对应的源码。例如,dis -l显示特定行号的源码。
rd命令用于读取内存内容。四川源码
mod命令用于查看、加载模块的符号调试信息。需要加载包含符号信息的模块。
x/FMT命令用于查看内存内容,FMT参数包括大小、格式和长度。
sym命令用于将虚拟地址转换为符号。
ps命令用于打印内核崩溃时的进程信息。
file命令用于打印指定进程的文件打开列表。
Crash 还支持如 vm [pid]查看进程的虚拟地址空间,task [pid]查看进程的task_struct和thread_info信息,以及kmem -I查看内存使用情况。
Crash 可以用于实际测试,如主动触发崩溃情况分析和分析空指针产生的 core dump 文件。在实验中,内核版本为 4..0-..1.el8_2.x_,c 开发实例源码Crash 版本为 7.2.7-3.el8,且使用了 kexec-tool。
以上是 Crash 工具的主要功能和使用方法,通过这些命令,开发者可以深入分析内存转储文件,定位并解决潜在的内存错误。
韦东山初版hello驱动树莓派4B移植(位系统)——操作篇
在项目压力下,我追随韦东山的驱动入门课程,决定将hello驱动移植到我的位树莓派4B上。移植过程中,我发现由于树莓派型号、系统位数和内核版本的差异,教程中的细节存在较大差异。本文旨在分享我在移植过程中的经验,以帮助后来者避免不必要的困扰,同时也作为我学习的引流脚本软件源码记录。
首先,尽管韦东山的课程基于IMX6ULL,而树莓派使用BCM,两者皆为ARM Cortex-A架构,移植难度相对较低。我选择在Linux虚拟机上交叉编译,以利用x平台的性能。关于交叉编译的详细教程,可参考我的另一篇文章。我使用韦东山提供的vmware系统镜像,方便操作,镜像链接附在文章中。
为了适应差异,我需要在虚拟机中调整交叉编译工具链。首先安装适应的工具链,然后修改.bashrc文件,确保编译配置正确。验证工具链更换后,可以开始下载并配置树莓派的内核源码。我建议下载官方的6.1版本,通过压缩包一键下载,具体版本根据你的内核版本选择。
配置内核源码后,通过make命令编译,这里需要注意的是,编译命令中将Image、modules和dtbs合并,同时使用-j4加速。在编译hello驱动时,我遇到问题并解决了编译位与位兼容性问题。
将hello驱动的源码和Makefile调整后,装载驱动并进行测试。在内核版本不匹配时,需要更新树莓派的内核。此外,确保正确创建设备节点并执行测试程序,通过dmesg命令查看驱动输出,以确认驱动功能正常。
尽管本文专注于操作步骤,对于驱动原理的学习,建议直接观看韦东山的视频教程。文章中涉及的内容参考了韦东山和其他博主的资源,如需删除,请告知。如果本文对你有帮助,别忘了关注我的其他平台。
ARM开发板LINUX系统缺少CH驱动解决笔记
一、评估驱动兼容性
检查系统中是否存在与ch设备对应的驱动文件,方法是查看'/lib/modules/5..0--generic/kernel/drivers/usb/serial/'目录下是否包含ch.ko文件。需将'5..0--generic'替换为系统实际内核版本。
二、解决驱动缺失
若系统缺少所需驱动,可采取以下步骤:
1、确定内核版本:通过运行'uname -r'命令获取。
2、安装内核头文件:
a、对于官方系统,使用命令'sudo apt-get install linux-headers-$ (uname -r)'完成安装。
b、对于特定定制系统,需先获取源码并按照编译指南自动生成内核头文件。
3、安装与编译ch驱动:
a、从wch.cn下载ch驱动源码。
b、确保系统已安装编译所需工具,如gcc、g++、make。
c、切换至驱动文件所在目录。
d、使用'make'命令编译源码,生成ch.ko文件。
4、安装并验证驱动:
a、安装locate命令以查找系统中ch.ko文件的位置。
b、使用'sudo modprobe ch'命令挂载驱动。
c、执行'sudo dmesg'检查设备识别情况,确认是否已显示'/dev/ttyUSB0'。
d、设备连接时,执行'sudo apt remove brltty'命令以避免冲突。