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== 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.
上一篇:ARM系列 STM32F103RCT6 開發
下一篇:ARM S3C2410學習手記
推薦閱讀
史海拾趣
為了進一步加速企業的發展,銀河微電決定走上上市之路。經過精心籌備和嚴格審核,公司終于在2021年成功在上交所上市。上市不僅為公司帶來了大量的資金支持,還提高了公司的知名度和品牌影響力。借助上市融資的優勢,銀河微電加大了對研發、生產、銷售等各個環節的投入,企業發展步入快車道。
ALCOA,全稱美國鋁業公司,其發展歷程可追溯至19世紀末。當時,鋁在地球上蘊藏豐富,但提煉單質的鋁卻十分困難。年輕的查爾斯·霍爾(Charles Hall)發明了用電解方式生產單質鋁的方法,并于1889年獲得專利。隨后,他與艾爾弗雷德·亨特(Alfred E. Hunt)船長合作,投資建廠,開始批量生產鋁。這一技術創新不僅推動了鋁產量的快速上升,還使得鋁這種曾經比金子還貴的金屬逐漸走進了人們的日常生活。
隨著公司的不斷發展,Bourns在1952年取得了世界上第一個可調式電阻的專利,即TrimpotR。這一技術突破標志著Bourns在電子元器件領域的領先地位,也為公司的產品線增添了核心競爭力。可調電阻的廣泛應用推動了Bourns在電子行業的快速發展。
隨著科技的不斷進步,BJB公司意識到技術創新的重要性。因此,公司加大了研發投入,積極引進先進的技術和設備,致力于照明配件產品的創新和升級。經過不懈的努力,BJB成功研發出具有高效節能、環保低碳特點的照明配件產品,不僅提升了產品的性能和質量,也滿足了客戶對綠色照明的需求。
自成立以來,富捷電子始終將技術創新視為企業發展的核心驅動力。公司投入巨資建立了一支國際專業的晶片電阻核心技術研發團隊,專注于貼片電阻、合金電阻、車規電阻等產品的研發與生產。近年來,富捷電子成功研發出高端抗靜電汽車晶片電阻FQS系列產品,并建設了“高端抗靜電汽車晶片電阻智能工廠”,實現了從原材料入庫到成品出庫的全程智能化、自動化操作。這一創新不僅提升了產品性能,還滿足了汽車電子行業對元件高可靠性、高穩定性的嚴格要求,推動了公司在汽車電子領域的快速發展。
經過幾年的艱苦打拼,Bytesonic Corporation在1987年迎來了重要的轉折點。這一年9月,公司資本金增至新臺幣500萬元,為公司的進一步擴張提供了堅實的資金基礎。有了更多的資本支持,公司開始加大在研發和市場推廣上的投入,逐漸在行業內樹立起了一定的品牌影響力。
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 編輯 元器件選擇和安裝調試 VT1要求Icm>0.5A,hEF為50-100,可用2SC2500、2SC1008等,VD1為穩壓值為3V的穩壓二極管。 高頻變壓器T1要自制,用E16的鐵氧體磁 ...… 查看全部問答∨ |
定義幾個reg,存儲幾個常數,但礙于“尋址”不方便,定義成存儲型寄存器reg [15:0]mem [8:0];之前沒用過這類型的,就沒多想用assign 給它們一一賦值,編譯發現錯誤,原來assign 只能給wire 型賦值。我試了一下這樣定義:wire [15:0]mem [8:0];仍然 ...… 查看全部問答∨ |
07年開始創業,09年淘到第一桶金,入手第一輛屬于自己的車——奔騰B70,如今老七在我摩下奔騰一年有余,工作需要出個短差,周末帶一家老小逛公園,都少不了老七兢兢業業的身影,回想當初買車的時候跟很多車友一樣,糾結的不可終日,既想要商用家用 ...… 查看全部問答∨ |
|
中午在學校拿到了板子很興奮。研究了下板子,oled使用的是15V的電壓;板上有一顆lattice生產的lc4032v可編程控制器作為開發板的功能控制器ftdi2232作為rs232轉usb接口芯片vp1050 can收發器插上usb,會出現一個小游戲,同時這個示 ...… 查看全部問答∨ |
異步電機變頻控制方案何時出,我想比較TIDSP他們到底區別有 異步電機變頻控制方案何時出,我想參考與比較TI DSP他們到底區別有多大?主要考慮控制電機的性能了,誰有這方 ...… 查看全部問答∨ |
那位大神跳通LM3s 的safeRtos+socket api了。 這兩天在TI自帶操作系統SafeRtos上調lwip的socket api程序,經常出錯。請教下大神,lwipopts文件設置以及socket API 需要注意的問題]! … 查看全部問答∨ |