kgdb内核调试freebsd8.3

基于深度学习的雷达辐射源识别技术研究 基于深度学习的雷达辐射源识别技术研究 1 摘要 时频分析(参考博文)作为处理非平稳信号的有力工具,能够将一维的时域信号映射为时间和频率的联合分布。通过将信号转化为二维时频图像,从图像识别的角度完成辐射源信号的识别。而深度学习模型能够对信号或者图像进行自动的特征提取,省去了人工提取的步骤 ,逐渐成为雷达辐射源信号脉内特征提取的一种新方法。本文应用深度学习中的卷积神经网络来实现雷达辐射源信号的识别,主要工作如下: 在研究信号时频分析的基础上,提出了基于时频图像和卷积神经网络的雷达辐射源信号识别方法 。该方法首 阅读详情

            编译内核并用KGDB调试

1. 配置vmware调试机与目标机的串口
[虚拟机上添加串口]
"power off"关闭虚拟机
右击虚拟机
-->选择"settings..."
-->hardware-->Add...
-->Serial Port
-->output to named pipe-->两虚拟机都使用名称"\\.\pipe\com_1",
对调试机使用"This end is the client",
对目标机使用"This end is the server",
两个虚拟机均使用"The other end is a virtual machine"
把Connect at power on 勾选上
-->完成后在"I/O mode" 组合框里把Yield CPU on poll勾选上

如果虚拟机是vSphere配置基本差不多,vSphere的配置更简单些

[sio驱动]
查man sio可知串口设备名

[uart驱动]
查man uart可知串口设备名

[调试串口例子]
目标:
cat /dev/tty*

调试机
echo test > /dev/cua*

在目标机上会出现test则表示串口调试成功

在远程调试开始时,您可能遇到 Ignoring packet error... 错误。
该错误表示您的开发计算机和目标计算机具有不同的波特率。计算机的波特率是指每秒传输的符号数目。波特率与比特率可能并不相同,
因为一个符号可能包含两个以上的状态。需要为两台计算机设置相同的波特率。
使用以下命令可以实现这一目标:
set baudrate 9600

2. 编译内核
注:两种方法,有的版本适合方法一,有一适合用方法二

[方法一]:
官方的教程http://www.freebsd.org/doc/handbook/kernelconfig-building.html
--<在调试机上>
cd /usr/src/sys/i386/conf
mkdir /root/kernels
cp GENERIC /root/kernels/MYKERNEL
ln -s /root/kernels/MYKERNEL
ln -s /vte/86DX
vi DEBUG_KERNEL
  加入如下内容:
      makeoptions      DEBUG=-g
      options          KDB
      options          KDB_TRACE
      options          DDB
      options          GDB

cd /usr/src
make buildkernel KERNCONF=MYKERNEL
make installkernel KERNCONF=MYKERNEL

完成上述步骤之后,在/boot下原来的kernel内核被放到/boot/kernel.old/kernel下,
安装后的内核即为/boot/kernel

[编译Freebsd8.3内核]
--<在调试机上>
cd /usr/src/sys/i386/conf
mkdir /root/kernels
cp GENERIC /root/kernels/DEBUG_KERNEL
ln -s /root/kernels/DEBUG_KERNEL

vi DEBUG_KERNEL
  加入如下内容:
      makeoptions      DEBUG=-g
      options          KDB
      options          KDB_TRACE
      options          DDB
      options          GDB

config DEBUG_KERNEL
cd ../compile/DEBUG_KERNEL
make cleandepend
make depend
make

完成上述步骤后,在调试机的当前目录下(/usr/src/sys/i386/compile/DEBUG_KERNEL)
目录下会生成kernel.debug文件夹,把该文件夹拷贝到目标机上,放到/boot/kernel/目录下,
并更名为kernel,并使用strip -x去掉其中的调试符号

3. 内核调试
--<在目标机上>
cp /boot/device.hints /boot/device.hints.bk
vi /boot/device.hints
    加入如下内容:
    如果串口是sio驱动就修改如下内容为0x80端口:
    hint.sio.0.flags="0x80"
    如果串口是uart驱动就修改如下内容为0x80端口:
    hint.uart.0.flags="0x80"
   
    如果因为freebsd版本在进入DDB模式之后会失去键盘响应,这主要是由于DDB和kbdmux共存还
    有问题导致的,解决办法是加入如下内容:
    hint.kbdmux.0.disabled="1"

reboot

选择6.Escape to loader prompt
在"OK"提示符后加入boot -d
然后再依次输入"gdb"和"s"命令,使其进入等待远端gdb调试连接的状态

--<在调试机上>
cd /usr/src/sys/i386/compile/DEBUG_KERNEL

如果是sio驱动输入如下命令
kgdb -r /dev/cuad0 kernel.debug
如果是uart驱动输入如下命令
kgdb -r /dev/cuau0 kernel.debug

稍等片刻就可以完成和目标机的链接,并可以调试.
进入调试模式后做如下断点:
(kgdb) b kldload
这一步是为今后调试可动态装载模块即非内核模块的调试方便使用

4. 用 GDB 调试可加载模块 --- 以nullfs为例
[freebsd可加载模块结构]:
    所有的可动态加载模块均存放在/usr/src/sys/modules目录对应的模块名文件夹下例如nullfs等,
    编译这些模块会自动找到代码所在的位置。

在调试发生于模块中的 panic, 或者使用远程 GDB 调试使用动态模块的机器时, 需要告诉 GDB 如何获取这些模块的符号信息。
首先, 需要在编译模块时加入调试信息:

# cd /sys/modules/nullfs
# make clean; make COPTS=-g

把开发机上编译出来的nullfs.ko拷贝到目标机上的任何位置如/tmp,在目标机上安装nullfs.ko执行命令
# cd /tmp
# kldload ./nullfs.ko

回到开发机上会发现kldload断点出现了,但这时nullfs.ko还没有被加载成功,直接执行gdb命令c继续进行
执行完后在目标机上再加载一次加载命令如下:
# kldload ./nullfs.ko

在开发机上出现断点后通过以下过程加载nullfs的符号链接信息,并具体调试,如下:

如果使用远程 GDB, 您可以在目标机上执行 kldstat 来了解模块的加载位置:
# kldstat
Id Refs Address    Size     Name
 1    4 0xc0100000 1c1678   kernel
 2    1 0xc0a9e000 6000     linprocfs.ko
 3    1 0xc0ad7000 2000     warp_saver.ko
 4    1 0xc0adc000 11000    nullfs.ko
如果您正调试内核崩溃转存数据, 则需要访问 linker_files 表, 从 linker_files->tqh_first 开始,
并沿 link.tqe_next 指针寻找包含您所查找的 filename 的项。 那个项的 address 成员就是模块的加载地址。

接下来, 您需要找出模块中代码节 (text section) 的偏移量:

# objdump --section-headers /sys/modules/nullfs/nullfs.ko | grep text
  3 .rel.text     000016e0  000038e0  000038e0  000038e0  2**2
 10 .text         00007f34  000062d0  000062d0  000062d0  2**2
您需要的是 .text 节, 在前述例子中, 是 10 号节。第四个十六进制字段 (或者说从左往右数第六个字段) 是代码节在文件中的偏移量。
将这一偏移量与模块的加载地址相加, 就可以得到模块的代码在重定位之后的地址了。
在我们的例子中, 可以得到 0xc0adc000 + 0x62d0 = 0xc0ae22d0。
接下来就可以用 add-symbol-file 来告诉
GDB 关于调试模块的信息:

(kgdb) add-symbol-file /sys/modules/nullfs/nullfs.ko 0xc0ae22d0
add symbol table from file "/sys/modules/nullfs/nullfs.ko" at text_addr = 0xc0ae22d0?
(y or n) y
Reading symbols from /sys/modules/nullfs/nullfs.ko...done.
(kgdb) l nullfs_mount
(kgdb) b nullfs_mount
(kgdb) c
现在就可以使用模块的全部符号了。

在目标机上:
# cd /mnt
# mkdir null
# mkdir nullmount
# mount_nullfs null nullmount

回到开发机上发现断点出现在nullfs_mount上,这时就可以继续调试该模块的函数了。
如果kgdb在运行中要通过执行kldload ./nullfs.ko来实现断点出现,而不是通过ctrl+c命令来实现断点出现,
后面的这个方法实验是不成功的,几乎花费了我一整天的时间摸清楚这个事情。

 

 

 

 

 

 

 


 

【信号分析】基于高阶统计量与分形理论的2ASK/4ASK/2PSK/4PSK/2FSK/4FSK/16QAM调制识别方法及Matlab实现 本文探讨了基于高阶统计量与分形理论的2ASK/4ASK/2PSK/4PSK/16QAM调制识别方法及Matlab实现。通过四阶累积量和盒维数特征提取,结合级联神经网络分类器,显著提升了低信噪比环境下的识别准确率。实验表明,该方法在10dB信噪比下准确率达95%,比传统方法提高20个百分点,特别适用于复杂无线通信场景。 阅读详情

相关推荐

基于决策树分类算法的数字调制信号识别:从ASK到PSK的全面分析与实践

数字调制是将数字信息转换为适合在通信信道上传输的信号的过程。根据调制方法的不同,常见的数字调制技术包括振幅键控(ASK)、频率键控(FSK)、相位键控(PSK)、正交振幅调制(QAM)等。每种调制方式通过改变载波的某个特性(如幅度、频率或相位),来表达不同的数字信息。决策树(Decision Tree)是一种常见的分类算法,它通过树形结构对输入数据进行分类。决策树的每个节点表示数据的一个特征,每个分支代表这一特征的一个取值,而每个叶节点对应一个分类结果。

qq_38334677的博客 621

FreeBSD gdb常用调试命令

做下来最重要的感受,其实就是编程,很多时候你想的和程序体现出来的完全是两个东西。在程序细枝末节的地方浪费太多时间只能证明我的csawctf里面有个逆向题,food,是FreeBSD下面的一个二进制程序。为此安装了FreeBSD系统,但是呢,里面的gdb非常难用。包括但不限于:默认情况下不显示汇编、n\s好像没用必须要用ni。不知道是因为我长久不做了,很多指令忘了,还是FreeBSD里面的gdb就是傻逼。我把常用的总结起来,以后忘了也好找。

繁忙之余别忘了生活 371

MATLAB调制信号识别课程设计实战

数字调制技术是将数字信息(比特流)通过特定方式编码后,调制到连续的模拟信号上,以便于信号的传输。数字调制因其高效的频谱利用率和抗噪声性能优于模拟调制,而广泛应用于现代通信系统中。MATLAB是一款高性能的数值计算与可视化软件,它在工程计算、算法开发、数据分析及可视化等领域占据重要地位。MATLAB的优势在于其简洁的语法、强大的数值计算能力和丰富的内置函数库。此外,MATLAB提供了一个交互式的环境,允许用户快速进行算法原型设计和验证。

weixin_32480007的博客 1158

GDB scripts for FreeBSD kernel debugging

由于WinDbg目标平台只是Windows内核,WinDbg有很多Windows内核相关的调试命令,非常有用。相比之下,由于GDB并不针对特定的平台,GDB缺少具体操作系统内核相关的调试命令,很多时候不得不自己编写脚本来扩展GDB,实现一些特定平台上的调试命令。John Baldwin 编写了一些有用的FreeBSD内核调试的GDB脚本,在调试内核时非常有用,下载地址在http://p

路人甲的专栏 1327

基于人工神经网络的六种数字调制信号自动识别系统设计与实现

训练目标是最小化预测输出与真实标签之间的差异。常用损失函数包括:交叉熵损失(Cross-Entropy Loss):适用于分类任务$$$$均方误差(MSE):适用于回归或软标签逼近在调制识别中,推荐使用分类交叉熵,因其对概率分布差异更敏感,且梯度形式简洁:# 添加极小值防止log(0)

weixin_29607511的博客 1030

数字通信信号特征分析与调制识别技术详解

SVM通过寻找一个最优超平面,使得不同类别的样本尽可能分开。在调制识别中,SVM可用于将不同调制类型的特征向量映射到不同类别。信号预处理一般包括以下几个关键步骤:步骤内容作用去噪应用滤波器或小波变换等技术去除噪声干扰,提高信噪比滤波通过带通/低通/高通滤波器保留感兴趣频段,抑制干扰频率采样率调整重采样或插值匹配系统处理能力,减少计算负担信号同步利用训练序列或相关函数消除时延,确保特征提取一致性。

weixin_32311823的博客 1195

kgdb的使用

说到内核开发,不得不说到的一个工具就是kgdb,它可以用来调试panic的程序,接管系统。        由于网上对freebsd上的kgdb使用总结较少,今天特总结如下,欢迎大家指正。        首先,查看系统是否生成了core文件,cd 到/var/crash下,如果有vmcore.*文件则存在此文件,这就是panic生成的文件,接下来我们要调试的文件。        然后,执行命令

liu1014020126的专栏 1782

PyCharm 2023最新版安装配置全攻略(附永久激活教程)

本文详细介绍了PyCharm 2023最新版的安装配置全流程,包括版本选择、初始配置、插件生态、工程模板、调试优化及团队协作等关键步骤。特别针对专业版和社区版的功能差异进行对比,帮助开发者高效搭建Python开发环境,提升编码效率与团队协作能力。

p4q5r6s7t的博客 869

FreeBSD单用户模式usb键盘无法识别的问题

心血来潮想修改一下FreeBSD的密码,遂进入单用户模式操作,结果当场被雷住了,进入单用户模式发现键盘无法启动,这可如何了得,所幸不是真实的服务器,否则万一服务器出现故障需要进入单用户模式解决,岂不把人急死。 网上搜索,找到FreeBSD官方网站论坛上的一篇帖子,提到了解决方法: FromBeastiemenu,escapetoloaderprompt.se...

weixin_34405354的博客 496

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 979

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

FreeBSD安装调试

01.光碟开机 02.安装方式 a. Express Begin a quick installation(for impatient) 03.设partition a. 通常将全部的硬碟分割给同一系统使用(A=Use Entire Disk) 04.分割label a. C(Create)-->500M-->FS (A file system)--> / (挂入点为/) b. C(Create)

FreeXploiT 3799

PromptBio实战:如何用AI对话搞定转录组数据分析(附详细操作截图)

本文详细介绍了如何利用PromptBio平台通过AI对话完成转录组数据分析,无需编程基础即可实现从数据上传到结果解读的全流程。文章包含详细的操作截图和参数配置建议,帮助科研人员快速掌握这一生信分析工具,显著提升研究效率。

weixin_30872157的博客 136

【数字信号调制】基于高阶累积量的2ASK 4ASK 2FSK 4FSK 2PSK 4PSK调制系统识别Matlab仿真(含识别率)

数字信号调制技术是现代通信系统的基石,其核心在于将数字信息映射到模拟信号载波上进行传输。准确识别接收到的调制信号类型对于接收端解调和信息恢复至关重要。传统的调制识别方法,如基于功率谱密度或自相关函数的方法,在信噪比(SNR)较低或多径效应显著的复杂信道环境下,识别性能往往会受到限制。近年来,基于高阶累积量的调制识别方法因其对高斯噪声的鲁棒性和对非高斯干扰的良好抑制能力而备受关注。

qq_59747472的博客 1350

顶刊级科研绘图技巧

顶刊级科研绘图技巧

2401_89571885的博客 1158

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1554

【MATLAB源码-第148期】基于matlab的BP神经网络2/4ASK,2/4FSK,2/4PSK信号识别仿真。

通过精心设计的网络结构、合理的特征提取方法和适当的训练策略,可以实现高准确率的信号识别。未来的研究可能会集中在改进特征提取技术、优化网络结构和训练算法,以及探索更高效的方式来处理信号中的噪声和干扰,从而进一步提高识别的准确性和效率。4FSK扩展了这个概念,使用四个不同的频率来传输两位的二进制数据,每个频率对应一种可能的二进制组合。多样性和复杂性:不同调制技术的信号具有不同的特性,需要网络能够准确识别各种复杂的信号类型。信号噪声:在实际应用中,信号可能会受到噪声的干扰,影响特征提取的准确性和信号识别的性能。

weixin_62920524的博客 873

金融领域图注意力网络的创新应用

随着金融市场的日益复杂和数据量的爆炸式增长,传统的数据分析方法在处理金融数据的复杂关系和结构时面临诸多挑战。图注意力网络(Graph Attention Network,GAT)作为一种新兴的深度学习技术,能够有效处理图结构数据,挖掘数据中的潜在关系。本文的目的在于深入探讨图注意力网络在金融领域的创新应用,涵盖风险评估、投资决策、欺诈检测等多个方面。通过理论分析、算法实现和实际案例展示,为金融从业者和研究者提供全面的技术参考,推动图注意力网络在金融领域的广泛应用。

AI云原生与云计算技术学院 721

【通讯原理】Ch.5:模拟信号调制

模拟信号的代表波长: LTE(4G):2GHz 5G:3.5GHz Wifi:2.4GHz/5GHz Digital-to-Analog transmission 现在全套使用模拟信号的设备已经很少见了,在数据时代一切基于数字信号,而声音这种数据需要还原到模拟信号才能正式反馈出原本特征,也就需要用到调制解调技术。 接下来要介绍的三种调制方式,是由模拟信号本身的特性决定的。模拟信号其实就一个正弦波,决定一个正弦波即决定其振幅、初像、和频率(周期的倒数)。在吃之前,先将需要的基本知识普及一下: 基础科普

Chahot的博客 4056

散户渡劫指南:从炼气期到化神期的量化之路

经常有人问我普通人怎么学习量化交易,我就在想怎么学了量化就不是普通人了吗,可能他的意思是类比修仙,量化素人如何修炼进阶,今天就将量化学习每个阶段均对标修仙境界的核心能力与心法要诀一一介绍,助你从“交易凡人”蜕变为“量化金仙”。

木头大左的博客 1338

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 单vmware虚拟机中的FreeBSD调试内核
tomorrowsprogress
博客等级 码龄20年 16粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值