2017年1月27日 星期五

[Embedded] 如何檢視 Thread 狀態

以下參考 http://ask.xmodulo.com/view-threads-process-linux.html,整理幾個在 linux 系統下,檢視 Thread 狀態的方法。
方法一:ps
舉例: $ ps -T -p $(pidof NetworkManager)
方法二:top
舉例:$ top -H -p $(pidof NetworkManager)
方法三:htop
可參考以下幾篇部落格的介紹

注意事項:
  • 嵌入式系統,多使用 busybox ,此元件內的 ps,並無 "-T" 選項。top也無 "-H" "-p" 選項。因此在嵌入式系統內,可能只能選擇使用htop。busybox 支援的選項設定可參考 https://www.busybox.net/downloads/BusyBox.html。新版本可能已經支援,可以先查查看。

因為 htop 並非linux預設指令,因此需要手動自行編譯並且安裝,下面紀錄編譯過程。

1. 先看看 http://hisham.hm/htop/htop_talk.pdf

2. 編譯 ncurses
$ wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz
$ tar -xzf ncurses-6.1.tar.gz
$ cd ncurses-6.1
$ ./configure --host=arm-linux-gnueabihf --without-debug --without-ada --without-shared --enable-widec --disable-overwrite --disable-stripping
$ make
$ make install DESTDIR=$HOME/temp/ 
編譯成功後,記得看看是否是 ARM 平台的執行檔案。
$ file $HOME/temp/usr/bin/clear
clear: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=f8844f437666bb38f59b0b0b44273bfaa60cd92f, not stripped 
注意:
./configure 預設會編譯出 libncurse.a,若有需要支援 unicode,需加上選項"--enable-widec",如此便會編譯出 libncursesw.a
3. 編譯 htop
$ wget http://hisham.hm/htop/releases/2.2.0/htop-2.2.0.tar.gz
$ tar zxvf htop-2.2.0.tar.gz
$ cd htop-2.2.0
$ CPPFLAGS=-I$HOME/temp/usr/include LDFLAGS=-L$HOME/temp/usr/lib ./configure  --host=arm-linux-gnueabihf --enable-unicode
$ make
$ make install DESTDIR=$HOME/temp/
$ file $HOME/temp/usr/local/bin/htop
htop: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=33426b39ab3e8748d22c4903f2a960862d713cec, not stripped

注意:若系統架構與 tool chain 預設架構不同,請記得在 ./configure 時加入-march 或是 -mtune 選項,實際作法可以參考此篇

參考資料:
  1. http://hisham.hm/htop/
  2. http://ask.xmodulo.com/view-threads-process-linux.html
  3. https://how-to-build-for-arm.wikispaces.com/ncurse
  4. https://forum.xda-developers.com/showthread.php?t=547356
  5. http://shyuanliang.blogspot.tw/2013/05/htop-crosee-compilier.html
  6. https://github.com/gittup/ncurses