历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2020年01月13日 | 在ARM Linux 使用 Valgrind

2020-01-13 来源:eefocus

Linux valgrind 移植到ARM-Linux


 一、Cross-Compile/交叉编译


(1)下载及解压Valgrind-3.11


(2)修改confirure


  将armv7*)修改为armv7*|arm*)


(3)执行configure


./configure CC=arm-linux-gcc CPP=arm-linux-cpp CXX=arm-linux-g++  --host=arm-linux --prefix=/opt/valgrind/lib


注意:CC=arm-linux-gcc,之所以没有像有些博客上写的、用了绝对路径,是因为「我已经将arm-linux-gcc 软链接/soft-linke 到了实际的gcc」。


(4)make


(5)make install


二、移植到ARM开发板


注意:make install之后,编译生成的bin/和lib/目录存放在PC上的/opt/valgrind/lib目录下。将此目录下的bin/和lib/目录单独「复制/Copy」出来,不要Copy share/和include/目录,因为文件有点大,而且include/和share/这两个目录在开发板上没有用。


  在ARM开发板上建立「目录-/opt/valgrind/lib/valgrind/」,将上面刚刚编译得到的lib/目录下的文件(.so, .a 等)放到左边提到的这个目录(/opt/valgrind/lib/valgrind)中。


注意:上面这个步骤非常关键,如果放错位置,在运行程序valgrind的时候,会提示「failed to start 'memcheck' : No such file or directory」。


三、ARM上配置使用


1、Error:在运行「./valgrind ls」的时候依然碰到了一个错误,出现在「vgdb」。错误提示是:


[12:58:19]root@freescale ~/valgrind/valgrind/bin$ ./valgrind ls           

[12:58:19]==5978== Memcheck, a memory error detector

[12:58:19]==5978== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.

[12:58:19]==5978== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info

[12:58:19]==5978== Command: ls

[12:58:19]==5978== 

[12:58:20]==5978== error writing 36 bytes to shared mem /tmp/vgdb-pipe-shared-mem-vgdb-5978-by-root-on-???


在网页failure to run on armv6 following the armv6 legacy patches suggested by bug 276897找到了一个暂时的方法,就是临时禁用「vgdb」。


[12:54:55]root@freescale ~/valgrind/valgrind/bin$ ./valgrind --vgdb=no ls 

[12:54:55]==5976== Memcheck, a memory error detector

[12:54:55]==5976== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.

[12:54:55]==5976== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info

[12:54:55]==5976== Command: ls

[12:54:55]==5976== 

[12:54:56]ERROR: ld.so: object '/opt/valgrind/lib/valgrind/vgpreload_core-arm-linux.so' from LD_PRELOAD cannot be preloaded: ignored.

[12:54:56]ERROR: ld.so: object '/opt/valgrind/lib/valgrind/vgpreload_memcheck-arm-linux.so' from LD_PRELOAD cannot be preloaded: ignored.

[12:54:57]==5976== Conditional jump or move depends on uninitialised value(s)

[12:54:57]==5976==    at 0x4909C98: index (in /lib/libc-2.11.1.so)

[12:54:57]==5976== 

[12:54:58]==5976== Conditional jump or move depends on uninitialised value(s)

[12:54:58]==5976==    at 0x4909D90: strcmp (in /lib/libc-2.11.1.so)

[12:54:58]==5976==    by 0x4910377: strcoll_l (in /lib/libc-2.11.1.so)

[12:54:58]==5976== 

[12:54:58]==5976== Conditional jump or move depends on uninitialised value(s)

[12:54:58]==5976==    at 0x4909D98: strcmp (in /lib/libc-2.11.1.so)

[12:54:58]==5976==    by 0x4910377: strcoll_l (in /lib/libc-2.11.1.so)


 2、LD_PRELOAD错误


 [12:54:56]ERROR: ld.so: object '/opt/valgrind/lib/valgrind/vgpreload_core-arm-linux.so' from LD_PRELOAD cannot be preloaded: ignored. 


上述的错误,经过检查,发现:「/opt/valgrind/lib/valgrind」缺少一些「.so/共享动态库」。重新编译「Valgrind」,并且用「arm-linux-strip」将文件进行精简,顺利复制。程序也顺利运行。


四、Valgrind简介


1、Valgrind是什么?


2、Valgrind能做什么?


(1)「badapp.c」


 1 #include

 2 

 3 void f(void)

 4 {

 5  int* x = malloc(10 * sizeof(int));

 6  x[10] = 0;            // problem 1: heap block overrun

 7 }                         // problem 2: memory leak -- x not freed

 8 

 9 int main(void)

10 {

11  f();

12  return 0;

13 }


(2)


[15:20:06][15:20:06]==8399== Memcheck, a memory error detector

[15:20:06]==8399== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.

[15:20:06]==8399== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info

[15:20:06]==8399== Command: ./bad1pp1

[15:20:06]==8399== 

[15:20:07]connect fail. ip:10.167.13.207, strlen(ip):13. File:main.c, Line:696

[15:20:07]Internet Fail. File: main.c, Line: 2469

[15:20:08]==8399== Invalid write of size 4

[15:20:08]==8399==    at 0x8414: f (badapp1.c:6)

[15:20:08]==8399==    by 0x842F: main (badapp1.c:11)

[15:20:08]==8399==  Address 0x496f050 is 0 bytes after a block of size 40 alloc'd

[15:20:08]==8399==    at 0x483481C: malloc (in /opt/valgrind/lib/valgrind/vgpreload_memcheck-arm-linux.so)

[15:20:08]==8399== 

[15:20:08]==8399== 

[15:20:08]==8399== HEAP SUMMARY:

[15:20:08]==8399==     in use at exit: 40 bytes in 1 blocks

[15:20:08]==8399==   total heap usage: 1 allocs, 0 frees, 40 bytes allocated

[15:20:08]==8399== 

[15:20:08]==8399== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1

[15:20:08]==8399==    at 0x483481C: malloc (in /opt/valgrind/lib/valgrind/vgpreload_memcheck-arm-linux.so)

[15:20:08]==8399== 

[15:20:08]==8399== LEAK SUMMARY:

[15:20:08]==8399==    definitely lost: 40 bytes in 1 blocks

[15:20:08]==8399==    indirectly lost: 0 bytes in 0 blocks

[15:20:08]==8399==      possibly lost: 0 bytes in 0 blocks

[15:20:08]==8399==    still reachable: 0 bytes in 0 blocks

[15:20:08]==8399==         suppressed: 0 bytes in 0 blocks

[15:20:08]==8399== 

[15:20:08]==8399== For counts of detected and suppressed errors, rerun with: -v

[15:20:08]==8399== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 11 from 5)


3、Valgrind工作原理?


4、谁开发的Valgrind?


Julian Seward, from Cambridge, UK.


5、Valgrind的名称来源


From Nordic mythology. Originally (before release) the project was named Heimdall, after the watchman of the Nordic gods. He could "see a hundred miles by day or night, hear the grass growing, see the wool growing on a sheep's back" (etc). This would have been a great name, but it was already taken by a security package "Heimdal".


Keeping with the Nordic theme, Valgrind was chosen. Valgrind is the name of the main entrance to Valhalla (the Hall of the Chosen Slain in Asgard). Over this entrance there resides a wolf and over it there is the head of a boar and on it perches a huge eagle, whose eyes can see to the far regions of the nine worlds. Only those judged worthy by the guardians are allowed to pass through Valgrind. All others are refused entrance.


It's not short for "value grinder", although that's not a bad guess.

推荐阅读

史海拾趣

Akustica(Bosch)公司的发展小趣事

Akustica 公司是一家微机电系统(MEMS)技术公司,于2001年成立于美国匹兹堡,后来成为博世集团(Bosch)的子公司。以下是关于 Akustica 公司发展的五个相关故事:

  1. 公司成立和早期发展: Akustica 公司成立于2001年,由匹兹堡卡内基梅隆大学的研究团队创建。该公司专注于 MEMS 技术的研发和创新,致力于开发高性能的声学传感器和系统解决方案。在成立初期,Akustica 聚焦于市场需求日益增长的消费电子和汽车应用领域,并不断推出创新产品,赢得了市场认可。

  2. 博世收购: 随着市场竞争的加剧和技术进步的不断推动,Akustica 公司于2009年被博世集团收购。作为全球领先的技术和服务供应商,博世集团的收购加速了 Akustica 的发展步伐,并为其提供了更广阔的市场和资源,以加速产品创新和业务扩展。

  3. 技术创新和产品发展: 在博世集团的支持下,Akustica 公司不断进行技术创新和产品开发,推出了一系列声学传感器产品,包括麦克风、扬声器和超声波传感器等。这些产品在消费电子、汽车、工业和医疗等领域得到了广泛应用,为用户提供了更优质的声音和声学体验。

  4. 市场拓展和全球业务: 随着技术和产品的不断进步,Akustica 公司逐渐拓展了全球业务,并与各行各业的客户建立了合作关系。公司在美国、欧洲和亚洲等地建立了销售和服务网络,以更好地满足客户的需求,并开拓新的市场机会。

  5. 持续发展和未来展望: Akustica 公司作为博世集团的一部分,继续致力于声学传感器技术和产品的创新,不断提升产品性能和功能,以满足不断变化的市场需求。未来,公司将继续加强在智能手机、智能家居、车载系统、工业自动化和医疗设备等领域的业务拓展,助力客户实现更加智能、便捷和安全的生活和工作环境。

CLAIREX公司的发展小趣事

为了进一步扩大市场份额,Clairex开始积极寻求与各大企业的合作。他们与多家知名航空公司、电子设备制造商等建立了长期稳定的合作关系,为其提供高质量的电子部件和解决方案。同时,Clairex还积极参加各类行业展会和交流活动,与业界同行分享经验、探讨合作。这些举措不仅提升了Clairex的品牌知名度,也为其带来了更多的商业机会。

上海超致公司的发展小趣事

在电子产品行业,品质控制和质量保证是企业生存和发展的关键。上海超致始终将品质放在首位,建立了严格的质量管理体系,从原材料采购到生产制造、产品检测等各个环节都严格把控品质。公司还引进了先进的生产设备和检测仪器,确保产品的可靠性和稳定性。这种对品质的执着追求使得上海超致的产品在市场上获得了良好的口碑和广泛的认可。

ACT [Advanced Crystal Technology]公司的发展小趣事

上海超致半导体科技有限公司于2015年成立,在成立之初,公司就明确了专注于高端高压功率半导体(Super-Junction MOSFET、IGBT)的集成电路产品设计方向。公司拥有一支在功率半导体器件领域拥有丰富经验的设计与运营团队,这些成员大多具有超过15年的行业经验。在公司成立的早期,上海超致就成功研发出了多款具有竞争力的产品,为公司的后续发展奠定了坚实的基础。

EG & G Inc公司的发展小趣事

为了进一步扩大市场份额,EG & G Inc公司积极开展市场拓展和国际合作。公司在中国、欧洲等多个国家和地区设立了分支机构,与当地企业建立了紧密的合作关系。同时,公司还积极参与国际展览和交流活动,展示了其先进的技术和产品。这些努力使得EG & G Inc公司在国际市场上获得了更多的机会和认可。

Faraday Electronics Inc公司的发展小趣事

随着技术的不断进步,Faraday Electronics Inc意识到单一的产品线已无法满足市场的多样化需求。于是,公司开始积极拓展市场布局,将产品线拓展至智能家居、汽车电子等领域。通过不断的技术创新和市场拓展,公司逐渐在多个领域取得了领先地位,成为了电子行业的佼佼者。

问答坊 | AI 解惑

急救!!5.0到6.0移值时,串口驱动问题

将5.0BSP移值到6.0 上时,运行到串口驱动时,就运行不下去了, DNW提示信息: WARNING: CReg2440Uart::CReg2440Uart failed to obtain processor frequency - using default value (66750000). DEBUG: Serial2 SYSINTR : -766318612 WARNING: C ...…

查看全部问答>

求 插值算法

小弟最近写一个程序,由传感器测量后由单片机进行AD转换,然后在lcd上显示出来,可是测出的东西如果不是连续的那么用什么算法能把显示的曲线图形变成连续的?比如测温度、电流、电压,是不是要用不同的插值算法?哪位能指点一下啊?谢谢。…

查看全部问答>

请教如何获取monthcalendar(日历控件)被选中的日期信息,急急急急急急急!

如题,小弟在做一个日程管理的小应用程序, 请问如何获取在日历控件上选定的日期信息, 比如选定某日, 在程序中要提取该日的日期和星期几的信息。 谢谢各位,很急,请大家帮帮忙。…

查看全部问答>

那个用单片机编写《小草》程序的人在吗

可不可以吧《小草》的单片机程序发给我啊? 234901369@qq.com…

查看全部问答>

今天晚上在家没事,给老冰箱做了个LED照明灯

    去年夏天,家里用了20多年的老冰箱(老人家买的,买了新冰箱后不够用,所以一直用着)坏了照明灯泡,用起来很不方便。当时把灯泡拿到电子市场去配,竟然找不到这种灯头的,只有作罢。     今天晚上在家没事,就 ...…

查看全部问答>

JLINK设置出问题了。怎么办

之前能仿真的。能下载程序的。  后来设置了一下               就只有不行了  一直是  AXD Uable to halt ARM core  我也不知道哪里出了问题。.         ...…

查看全部问答>

求大家帮助啊,最近学msp430单片机

#include #include void main(void) {   WDTCTL=WDT_MDLY_32;   IE1|=WDTIE;   P1DIR|=BIT6;   while(1); } #pragma vector=WDT_VECTOR __interrupt void watchdor(void) {   P1O ...…

查看全部问答>

求帮忙~~~~

经放大整形后传感器输入的电压如果是大于2V的脉冲信号,则数码管显示加1,否则没反应,我用的单片机是STC89C52,单片机工作电压5V,我的问题有两个:   一:传感器输入的脉冲信号能与I0口直接相连吗? 二:我这个需要用到单片机的哪些知识,因为 ...…

查看全部问答>

四层板PCB学习@PCB设计

我也来加入四层板的学习,在上班抽空时间总算布局完了,大概布了下,还不是很整齐,在这里得感谢@okhxyyo 的耐心帮忙和指导~ 希望能大家一起共同进步和学习…

查看全部问答>