- 博客(36)
- 资源 (5)
- 收藏
- 关注
原创 qemu 抓取linux kernel vmcore
1、利用qemu monitor 提取vmcore2、利用crash 工具加载分析vmcore。
2024-01-28 10:37:22 1413
原创 qemu调试kernel启动(从第一行汇编开始)
其实不管使用什么调试器(gdb/T32/Crash/lldb),第一步要做的都是将elf和调试target的执行地址做一个对齐,当然这个对齐可能是物理地址对齐(无mmu,如bootloader,elf编译的地址就是代码运行的物理地址),也有可能是虚拟地址对齐(开启了mmu 比如kernel start_kernel 之后部分),也有可能是物理地址与虚拟地址对齐(比如本文中的_text到start_kernel), 掌握了这个规律也就掌握的调试的入口密码。
2024-01-28 10:19:16 1520
原创 linux kernel内存泄漏检测工具之slub debug
ko中的实现基本就是将slub.c,slab_common.c中的依赖的结构体,函数等重写一下,注册好上面的两个hook函数,一个替换掉kmalloc_caches, 一个存储slub分配的调用栈,剩下的就是处理好编译报错,将/sys/kernel/debug/slab/XXX/alloc_traces 的实现用在新增的ko中,增加调试节点,即可完成动态开启slubdebug的功能。如果版本存在SLUB内存泄漏, 抓取/proc/slabinfo或者使用slabinfo 工具来确认泄漏的slub 类型;
2024-04-27 15:18:49 2446 3
原创 linux kernel内存泄漏检测工具之kmemleak
3.1 原理简介kmemleak实现方法是一个插桩加扫描过程, 它提供一个kmemleak_alloc桩函数,这个函数会在内核slab、vmalloc、alloc_bootmem、pcpu_alloc等函数分配接口中被调用,每次调用时该函数均会创建一个kmemleak object记录分配内存的相关信息比如内存地址,大小,调用栈等,并将这个object加入到一个rbtree里面;当内核释放内存时,也会调用kmemleak_free删除对应object。
2024-04-27 15:13:37 2085 1
原创 linux kernel 内存踩踏之KASAN_HW_TAGS(MTE)(三)
其实对比KASAN_SW_TAGS, MTE主要是性能上的提升,缺点和能力与KASAN_SW_TAGS接近,MTE的诞生其实不是用来debug, 而是google希望推动MTE在商用版本上落地,最根本的目的是解决内存安全的问题,当前目前的确有性能上的影响(目前厂商均未应用到用户端),随着MTE本身的优化和CPU性能的进一步提升,也许不久的将来会看到MTE落地到产品商用版本上。MTE中key存放在指针高byte中,lock则是对内存的标记,只有key和lock匹配时,才能正常访问和操作内存。
2024-02-17 18:19:10 1409
原创 linux kernel 内存踩踏之KASAN_SW_TAGS(二)
从KASAN 和 KASAN_SW_TAGS的对比来看类型shadow内存占用cpu占用优缺点KASAN1/8复杂,每次内存访问,需要计算对比shadow值定位准确,8byte内的踩踏也能检测;
2024-02-17 18:07:20 1851
原创 linux kernel 内存踩踏之KASAN(一)
3、默认是kasan report只是内核打印一次(后续触发也不会上报),大量机器测试时需要人力或者自动化脚本检查,出现问题我们想看下上下文或者一些变量状态也不方便,实际业务中通常增加 cmdline: kasan.fault=panic,这样发生问题时能保存现场,测试/开发同事也能第一时间发现并分析。kasan 的核心思想是简单的,复杂主要体现在编译器插桩实现(好在gcc/clang都已经支持了),在所有分配的部分需要完成shadow的存储,所有读写的地方加入指针访问地址长度的shadow值检查。
2024-01-28 11:06:52 1881 5
原创 linux虚拟化之kvm(一个200行的arm64虚拟机代码)
最后总结下kvm的使用流程:1、创建虚拟机:vmfd = ioctl(kvmfd, KVM_CREATE_VM, 0);2、创建vcpu:vcpufd = ioctl(vmfd, KVM_CREATE_VCPU, 0);3、初始化虚拟机内存:ioctl(vmfd, KVM_SET_USER_MEMORY_REGION, &mem);4、运行vcpu:ioctl(vcpufd, KVM_RUN, NULL);无论是arm64还是X86, 流程基本是一样的,差异点在CPU的pc值,CPU类型等参数设置上。
2024-01-28 11:01:17 1178
原创 qemu + vscode图形化调试linux kernel
另外在gdb 下p命令显示结构体内容时,看起来也是很别扭,可以利用vscode+gdb-multiarch 调试qemu 仿真的arm64 linux 内核,这样查看源码,设置断点,查看变量信息也很快捷方便。如果在执行过程中连接,也是点击pause按钮,这时内核会停止执行,然后在vscode中设置断点,continue后触发断点vscode能正确显示断点位置及代码。启动调试,在init/main.c中start_kernel设置断点,然后点击调试工具栏的continue即可触发到断点,可以开启单步调试了。
2024-01-28 10:23:33 1247
原创 qemu 单步调试linux driver
上面的报错原因是因为编译kernel版本中打开了config CONFIG_DEBUG_INFO_REDUCED, 这个会影响gdb script的完整功能,在arch/arm64/ configs/defconfig中去掉这个config,重新编辑后加载vmlinux;调试driver 就需要准备一个简单的driver, 这里用最简单的hello world来演示如何调试,程序非常简单,生成一个字符设备,并且在cat的时候打印变量,还加了一个全局变量,用来gdb调试查看变量使用。
2024-01-28 10:13:21 1225
原创 qemu单步调试arm64 linux kernel
qemu内核调试时需要注意关闭kaslr,更新正确的脚本,也不依赖kenerl config是否开启kaslr-smp 2 \-s \-S关于kaslr原理相关的知识,有兴趣的伙伴参考 文章kaslr原理分析。
2024-01-28 10:06:46 1591
原创 qemu搭建arm64 linux kernel环境
具体能用的版本gcc-XX-arch64-linux-gnu可以按对应的ubuntu发行版本查找,当前22.04能用的最新版本是gcc-12;或者可以到arm开发工具链上下载(自己下载的记得 PATH 变量中加一下路径)比如我现在用的gcc-13(不同的gcc版本支持的特性有差异,对编译结果优化也有差异):还比较新。
2024-01-28 10:02:06 1510
原创 Linux的优先级说明
工具PRNIPRINICERTPRPOLIRT线程top-1 - rt0无意义normaltop20 + nice值nice值RT线程ps -el无意义normalps -elnice值RT线程atop -s99-rtrtrr/fifonormalatop -s120+nicenice值0normal上面表中的rt值和nice值均为用户空间设置的值Linux调度器:进程优先级。
2024-01-28 09:38:56 1038
转载 android 电容屏(三):驱动调试之驱动程序分析篇
关键词:android 电容屏 tp 工作队列 中断 坐点计算 电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung exynos 4210) 转载:http://blog.csdn.net/xubin341719/article/details/7833383
2013-09-21 23:20:54 1196
转载 android 电容屏(二):驱动调试之基本概念篇
关键词:android 电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung exynos 4210) 转载: http://blog.csdn.net/xubin341719/article/details/7833277参考网站:http
2013-09-21 23:17:37 1015
转载 android 电容屏(一):电容屏基本原理篇
关键词:android 电容屏 tp ITO 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung exynos 4210) 转载:http://blog.csdn.net/xubin341719/article/details/7820492android 电容屏(一):电容屏基本原
2013-09-21 23:16:09 1093
转载 Linux内核抢占实现机制分析
Linux内核抢占实现机制分析 Sailor_forever sailing_9806@163.com转载请注明http://blog.csdn.net/sailor_8318/archive/2008/09/03/2870184.aspx 【摘要】本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核
2013-04-08 23:15:12 1000
转载 Ubuntu 下配置使用Android adb
1、配置环境变量进入终端,输入sudo gedit ~/.bashrc在文件的最后追加:#set path for android sdk tools export PATH=$PATH:/your_android-sdk-linux_path/tools/ export PATH=$PATH:/your_android-sdk-linux_path/platf
2013-02-09 20:34:27 750
原创 针对FL2440开发板的u-boot-2010.09版本补丁
这是针对FL2440开发板的u-boot-2010.09版本移植代码补丁,请先下载原版u-boot-2010.09下载地址,然后解压进入目录打补丁即可,补丁下载链接地址:u-boot2010.09_fl2440.patch首先你的主机应该配置好交叉编译环境,最好使用arm-linux-4.3及以上版本,配置时输入:make fl2440_config,然后执行make即可执行生成u-boot.
2012-06-30 23:04:12 2354 3
原创 U-boot中常用参数设定及常用宏的解释和说明
uboot功能很强,支持各种各样的启动方式,如:U盘启动,NFS启动,NAND Flash启动,NOR Flash启动……1、环境变量的存储设置 如u-boot中的savenv命令,它用来保存系统的环境变量到Flash中,当我们在开发板的配置文件中,使用的宏定义为:#define CONFIG_ENV_IS_IN_FLASH 1#define CONFIG_ENV_SIZE 0x
2012-06-30 21:43:21 8193 2
原创 fl2440的U-boot-2010.09移植(七)LCD的支持
一、LCD时序配置 fl2440开发板的LCD是3.5寸屏型号是WXCAT35-TG3#001,这是一款320x240分辨率的TFT LCD屏,先来了解一下TFT LCD的时序如下:图1 TFT LCD时序(1)VSYNC信号来一个脉冲时,表示一帧的开始(2) VSPW表示VSYNC信号的脉冲宽度为(VSPW+1)个HSYNC信号周期,即(VSPW+1)行,这(VS
2012-06-30 16:39:30 3995 4
原创 fl2440的U-boot-2010.09移植(五)uboot架构中NAND Flash驱动修改
uboot代码中的NAND Flash的读写驱动中存在一些错误,需要进行修改后才能完成,主要修改drivers/mtd/nand/s3c2410_nand.c文件,首先修改27行如下:#define NF_BASE 0x4e000000#if defined(CONFIG_S3C2410)#define S3C2410_NFCONF_EN (1<<
2012-06-28 21:39:35 3115 2
原创 fl2440的U-boot-2010.09移植(六)NAND Flash启动支持
从NAND Flash启动的原理很简单,就是利用S3C2440内部4K大小的SRAM,存储在NAND Flash中的代码不能被执行,而S3C2440在从NAND Flash启动把NAND Flash的前4k代码复制到SRAM中运行,U-boot支持从NAND Flash启动的方法就是利用这前4K代码完成SDRAM的初始化(SDRAM有64M),然后还要完成从U-boot代码从NAND Flash中
2012-06-28 20:47:58 3082
原创 fl2440的U-boot-2010.09移植(四) 添加NOR Flash启动支持
我们知道S3C2440支持从NAND Flash启动和从NOR Flash启动两种模式,先来介绍u-boot的NOR Flash启动方式吧。一、修改NOR Flash的读写程序 FL2440开发板中使用的NOR Flash是Intel的J3系列存储大小是4M字节,这个系列的NOR Flash支持标准的CFI指令(在最新的U-boot版本中只需要添加宏定义就可以支持CFI接口的
2012-06-27 13:45:14 1693 1
原创 fl2440的U-boot-2010.09移植(三)DM9000网卡及开发板相关配置
一、在board/fl2440/fl2440.c 中对GPIO和PLL的配置进行修改(1)修改GPIO和PLL的配置(36行附近)为:#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */#define M_MDIV 0xC3#define M_PDIV 0x4#define M_SDIV 0x1#elif
2012-06-27 13:43:51 2433 3
原创 如何利用JLINK烧写U-boot到NAND Flash中
很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bootloader给
2012-06-26 14:26:51 19129 14
原创 fl2440的U-boot-2010.09移植(二)
添加fl2440中S3C2440片上系统的支持。一、汇编文件修改,这部分主要集中修改修改cpu/arm920t/start.S文件。1、删除AT91RM9200使用的LED代码,117、118行,关闭LED代码。// bl coloured_LED_init// bl red_LED_on2、修改编译条件支持s3c2440,修改寄存器地址定义,修改 CPU频率初始化设置
2012-06-24 22:23:39 2590 2
原创 fl2440的U-boot-2010.09移植(一)
鉴于u-boot的2010.09版本之后的结构发生很大变化,特别是它启动步骤的改变,使得支持Nand flash启动支持的困难,我尝试了几次,最后从Nand flash启动后uboot的指令却无法支持了,而2010.09版本是U-boot结构发生较大改变的最后一个版本,其中已添加了S3C2440的支持(不像以前的版本需要在很多文件中的CONFIG_S3C2410后加上CONFIG_S3C2440)
2012-06-24 20:14:11 2063
原创 ARM Linux下UPnP使用
一、UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议。它是一种数字网络中间件技术,建立在TCP/IP、HTTP协议之上,采用XML来描述设备和控制信息。这种技术最开始是被微软,因特尔等公司使用在数字家庭中的,用来在家庭网络中完成多媒体资源共享,家电一体化等功能,例如在各种家电上实现IP数字化,加入网
2012-06-24 18:42:17 10389 2
原创 linux下利用valgrind工具进行内存泄露检测和性能分析
valgrind通常用来成分析程序性能及程序中的内存泄露错误一 Valgrind工具集简绍Valgrind包含下列工具: 1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。
2012-04-26 17:09:00 14430 1
原创 Linux下终端字体颜色设置方法
网上类似的文章有很多,但是都是转来转去的,没有经过测试,按照很多文章的方法会造成你设置之后的终端在换行和删除输入字符时终端显示会乱七八糟,于是我重新整理了一下,希望对像我这样的初学者有帮助。 其实就是如何设置PS1变量的问题;首先我们要知道如下几张表: 前景 背景 颜色 ------------------------
2011-03-14 21:13:00 36687 5
原创 WM下进行http下载、断点下载和上传(c++)
<br /> 首先当然是利用Wininet.lib库了,添加头文件#include "WinInet.h"和库#pragma comment(lib,"Wininet.lib"),<br />本人最开始时使用同步下载,但是发现下载600K左右的文件都不能下下来,网络自己会断掉,很奇怪,于是我采用异步方式。<br /> <br />#include "stdafx.h"<br />#include "WinInet.h"<br />#pragma comment(lib,"Wininet.lib"
2010-09-24 21:10:00 1934
原创 来电手机铃声捕获方法
<br />目前,在WM上进行手机来电铃声捕获的方法有两种,一种是TAPI,一种就是使用ril库,TAPI实施性不好,在来电铃声响一下才捕获到来电,用ril库可以在来电铃声响起来之前捕获到铃声,经过本人测试使用ril库时<br />在回调函数中<br />RIL_NOTIFY_CALLERID<br />RIL_NOTIFY_RING<br />这两个消息中可以在铃声响起之前获得消息, 甚至可以修改注册表达到修改来电铃声的目的,<br />下面附上部分代码:<br />LRESULT lresult;<br
2010-07-09 22:13:00 844
基于FL2440的u-boot-2010.09移植代码补丁
2012-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人