發表文章

記憶體溢位的問題

這兩天發生差點就完蛋的bug 主要是因為記憶體溢位導致重要變數被改寫 因此造成系統無法開機的現象 其實這是之前就存在的程式裡的bug 但是剛好記憶體沒有覆蓋到其他重要的部分 這次修改開機程式時就不幸地(也可以說很幸運地)壓到某個重要變數 還好測試單位有試出來 解決方法主要是參考這篇 http://sholfen.pixnet.net/blog/post/43440068-%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%8E%A9%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E4%BD%8D%E5%B0%B1%E4%B8%8A%E6%89%8B 回頭我再檢視自己宣告的陣列長度時 果然發現我的char array在承接string時 少考慮了結束字元的長度 因此將原先array長度+1便解決了這個bug 這也是個很好的學習機會 記憶體溢位問題有時不好抓,尤其在沒辦法單步執行與觀察記憶體變化的機器上 還好這次很快地找到問題點 下次要特別注意陣列長度,免得再次發生記憶體溢位的問題

linux fuse-exfat於嵌入式系統的設定

要讓linux支援exfat格式是頗麻煩的一件事 一開始先試用nofuse-exfat 但裡面所支援的readdir function在某些版本的linux kernel無法正常作業 導致其他程式要讀取隨身碟裡的檔案時無法顯示 因為我們也沒辦法隨便換kernel版本,所以就放棄使用nofuse-exfat 不能使用nofuse-exfat,那只好使用fuse-exfat 但是fuse-exfat比較複雜 需要至少兩包東西: 1.fuse-2.9.3 2.fuse-exfat-1.1.0 3.exfat-utils-1.1.1(這個應該不一定需要,但我還是放進去了) 於是乎就開始compile這三包東西了 1.fuse-2.9.3 這個算是比較簡單的了 只要將cross compile環境設定好應該就OK了 我自己寫了一個簡單的script來跑 ./configure --prefix=$PWD/release --host=`/opt/toolchains/armv7-marvell-linux-gnueabi-softfp_i686/bin/arm-marvell-linux-gnueabi-gcc -dumpmachine` --enable-lib --enable-util --enable-example --exec-prefix=$PWD/release make clean make mkdir release mkdir release/lib cp lib/.libs/libfuse* release/lib 因為我是在marvell 78460上跑,所以使用的gcc是marvell版本的 請自行代換 compile之後在fuse-2.9.3/lib/.libs裡會出現libfuse.so.2.9.3以及相關的link檔 這就表示成功啦~ 到時fuse-exfat會需要reference這個lib以及include檔案夾內的東西 2.fuse-exfat-1.1.0 這個東西頗麻煩的 因為它是使用scons來compile的,而非一般常用的Makefile 所以請先下載scons 接下來要修改不少東西 (...

busybox bootchartd使用方法

花了一點工夫才知道要怎樣使用busybox底下的bootchartd 這是一個評估開機流程的圖形化工具 可以幫助最佳化開機的好幫手 1.首先,要看自己的linux system是利用甚麼機制開機的    可參考 http://www.bootchart.org/docs.html    我們自己的system可設定在/etc/init/rcS的開頭加上一行/sbin/bootchartd start 2.完成後的bootlog.tgz就可以拿到linux的機器上轉換成PNG檔    不過事情沒這麼簡單    使用bootchart bootlog.tgz轉換後,出現這樣的error訊息: File "/usr/lib/pymodules/python2.7/pybootchartgui/draw.py", line 340, in draw_header     txt = headertitle + ': ' + mangle(headers.get(headerkey)) TypeError: cannot concatenate 'str' and 'NoneType' objects    此時有搜尋到一個解決方法: https://books.google.com.tw/books?id=WuktAgAAQBAJ&pg=PT109&lpg=PT109&dq=busybox+bootchartd&source=bl&ots=FGwBHsCpty&sig=E6x1JH5vLzhEzq41uBHYbfiU-_w&hl=zh-TW&sa=X&ei=2W6jVNWIM4Xp8AXf04HQBA&ved=0CFsQ6AEwCA#v=onepage&q=busybox%20bootchartd&f=false   大意就是把某幾行程式給mark註解掉 3.事情還沒完,改完後再跑依然出現: File "/usr/lib/pymodules/python2.6/pybootchartgui/draw.py", line ...