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。码下源码商城游戏在没有统一标准的码下内存转储文件格式的情况下,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/...下载安装包。python的方法源码
使用 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_,微商城的源码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'命令以避免冲突。