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.0.tar.gz
$ tar -xzf ncurses-6.0.tar.gz
$ cd ncurses-6.0
$ ./configure --prefix=/home/alb423/usr/arm-linux-gnueabihf --host=arm-linux-gnueabihf --without-debug --without-ada --without-shared --enable-widec
$ make
$ make install 
因為 ncurses 的新舊版本差異,需要手動修正,才能讓 htop 找到正確的編譯路徑。
$ cd ~/usr/arm-linux-gnueabihf/include/
$ ln -s ncursesw/cursess.h curses.h
$ cd ~/usr/arm-linux-gnueabihf/lib/
$ ln -s libncursesw.a libtinfo.a
編譯成功後,記得看看是否是 ARM 平台的執行檔案。
$ cd ~/usr/arm-linux-gnueabihf/bin/  $ file 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-unicode",如此便會編譯出 libncursesw.a
3. 編譯 htop
$ wget http://hisham.hm/htop/releases/2.0.2/htop-2.0.2.tar.gz
$ tar zxvf htop-2.0.2.tar.gz
$ cd htop-2.0.2
$ CPPFLAGS=-I$HOME/usr/arm-linux-gnueabihf/include LDFLAGS=-L$HOME/usr/arm-linux-gnueabihf/lib ./configure --prefix=$HOME/usr/arm-linux-gnueabihf --host=arm-linux-gnueabihf --enable-unicode

$ make
$ make install 
$ file 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