2016年12月9日 星期五

把ethtool交叉編譯在arm平台上使用

首先去網站抓一包Source Code:
         http://ftp.kernel.org/pub/software/network/ethtool/

解壓縮之後,先在資料夾中新增一個檔案cross_configure.sh內容如下:
================= cross_configure.sh ==================

#!/bin/sh
ARM_TOOLCHAIN_DIR=/opt/arm/bin     #please type your toolchain path
export CROSS_COMPILE="${ARM_TOOLCHAIN_DIR}/arm-linux-gnueabi-"
export AR="${CROSS_COMPILE}ar"
export AS="${CROSS_COMPILE}as"
export LD="${CROSS_COMPILE}ld"
export NM="${CROSS_COMPILE}nm"
export CC="${CROSS_COMPILE}gcc"

export FC="${CROSS_COMPILE}gfortran "
export RANLIB="${CROSS_COMPILE}ranlib"
export STRIP="${CROSS_COMPILE}strip"
export OBJCOPY="${CROSS_COMPILE}objcopy"  
export CFLAGS="-Os -pipe -O2 -static"

./configure --target=arm-linux --host=arm-linux
===================================================

接下來幾個步驟分別為:
1. ./cross_configure.sh
2. make
3. cp ethtool 到目標板上
4. use "./ethtool -S eth0" to watch network status.


完成!!!


2016年12月7日 星期三

Cross-compile程式之後,放到板子上執行,卻顯示"/bin/ash: ./phyAccess: not found"(以我編譯phyAccess工具為範例)

今天編譯phyAccess tool準備要測試網路功能,編譯完成之後,放到板子執行時卻出現以下的錯誤訊息:
     



於是我先回到編譯的ubuntu電腦上使用file看一下編譯完成的檔案,是把程式編譯成甚麼CPU架構的,確認是ARM的無誤:




另外注意到了這個執行檔編譯完成後,是屬於dynamically linked(用file可看到如上圖),因此我用 readelf -l phyAccess | grep "program interpreter"(readelf -d phyAccess 也可看出需要哪些library) 來看看他動態連結了哪些library,發現他需要"ld-linux.so.3"的library(如下圖)
    



原來無法在板子上執行,是因為板子上缺少了這個library,因此最後的解決方法就是,編譯的時候在Makefile的 CFLAG參數裡面加上 -static(編譯成靜態)就解決此問題了。

2016年12月6日 星期二

Linux中devmem直接讀寫記憶體位置的用法

讀取
在位置0x98000000讀取32bit值
# devmem 0x98000000
0x11111111


在位置0x98000000讀取16bit值
# devmem 0x98000000 16
0x1111





寫入
在位置0x98000000寫入32bit值
# devmem 0x98000000 32 0x1111AAAA
# devmem 0x98000000
0x1111AAAA



另外如果出現以下訊息:
    devmem: can't open '/dev/mem': No such file or directory
表示Kernel端沒有開啟功能,請開啟下列選項:

=> Device Drivers                                                  
      => Character devices                                        
                       [*] /dev/mem virtual device support

這樣應該就可以了!!