2016年5月24日 星期二

Ubuntu Install Altera Complete Design Suite


未完, 待測試中....

簡單的說, 除非有Altera DFAE的支援,
建議還是在 Windows環境下開發執行quartus, 還比較容易.
不同版本的 quartus, 還得花大量時測試.

//================================================
Insatll Altera Complete Design Suite v13.1 for Windows
Run  Quartus_II_13.1_x64.exe or Quartus_II_13.1_x86.exe
Get File: license.dat
copy license.dat to Linux
Insatll Altera Complete Design Suite v13.0 for Linux
# cd /root/altera/13.1/quartus
# ./quartus
Run quartus, Get Host ID xxxxxxxx, Close quartus
Edit  license.dat, Change Host ID xxxxxxxx
Run quartus, select file license.dat
//================================================

# apt-get install lib32stdc++6
# apt-get install libgtk2.0-0:i386
# apt-get install libxtst6:i386
# apt-get install gtk2-engines-murrine
# apt-get install libcanberra0
# apt-get install libcanberra-gtk-module
# apt-get install libcanberra-gtk-module:i386
# apt-get install libcanberra-gtk3-module
# apt-get install libcanberra-gtk3-module:i386
# apt-get install gtk2-engines-murrine
# apt-get install gtk2-engines-murrine:i386
# apt-get download gtk2-engines-murrine:i386
# dpkg --force-depends -i gtk2-engines-murrine_*_i386.deb
# apt-get download overlay-scrollbar-gtk2:i386
# dpkg --force-depends -i overlay-scrollbar-gtk2_*_i386.deb
# apt-get download unity-gtk2-module:i386
# dpkg --force-depends -i unity-gtk2-module_*_i386.deb

# touch /etc/ld.so.conf.d/gtk-2.0.conf
# touch /etc/ld.so.conf.d/gtk-3.0.conf

Edit File:
 # gedit /etc/ld.so.conf.d/gtk-2.0.conf
 Add path to file
 /usr/lib/x86_64-linux-gnu/gtk-2.0/modules

Edit File:
 # gedit /etc/ld.so.conf.d/gtk-2.0.conf
 Add path to file
 /usr/lib/x86_64-linux-gnu/gtk-2.0/modules

Load Config
 # ldconfig

# cd /altera/13.1/nios2eds/bin
# ./eclipse-nios2

//================================================
Step 1: Download Altera Complete Design Suite v11.0
   11.1_173_quartus_free_linux.sh

Step 2: 
  extract  11.1_173_acds_linux.iso

Step 3:
  Delete file "libpng12.so.0"
  /altera_installer/bin/libpng12.so.0
 # cd 11.1_173_acds_linux
 # cd altera_installer
 # cd bin
 # mv libpng12.so.0



Step 4: 
 # cd 11.1_173_acds_linux
 # chmod 700 setup


Step 5: 
 run setup 
 # bash ./setup


Step 6: 
  extract 11.1_173_acds_devices.iso



apt-get install libxext6:i386
apt-get install libxtst6:i386
apt-get install libxi6:i386



Step 7: 
 Download Altera Complete Design Suite v11.1.259 sp2
11.1sp2_259_quartus_linux.sh






http://www.fpga-dev.com/altera-usb-blaster-with-ubuntu/

2016年5月11日 星期三

Linux pthread priority setting




PTHREAD_SETSCHEDPARAM(3) Linux Programmer's Manual 

pthread優先權的設定範例



About Disk Erase


未完成, 慢慢再寫出來...
因為這幾天都在硬K SAS 規格書, 頭快暈了


HDD 內含 Secure Erase, 其實自己寫程式來做, 比較快.
可以參考另一篇 Linux SCSI Pass Through Interface
如果 Windows 下, 請參考 DDK\src\storage\tools\spti 的範例
只有機械式 HDD 才有提供, SSD 是不包含 Secure Erase 指令.






這有幾篇文章寫的不錯, 值得一讀
國家級標準銷毀儲存媒體資料

What is DoD 5220.22-M?

2016年5月5日 星期四

ubuntu 滑鼠游標消失問題修正

ubuntu 滑鼠游標在開機後, 游標就突然消失不見.
(由其是電腦關機一個晚上後, 第二天重新開機, 常會發生這種怪問題)
但滑鼠還在, 點了畫面也有反應.

這問題在Logitech 上面常發生
(但 Logitech的滑鼠真的比別家的好用)
不然就換另一家的滑鼠試看看囉!

解決方法
  重開進 BIOS, 看滑鼠是否可以動作 (只是為了驗證滑鼠正常, 這問題不多, 就可以省略這步驟)
  再斷電重新開機, 進入 Ubuntu (在開始出現第一個Ubuntu的 GUI LOGO 時, 一定要移動滑鼠)
  再進入Ubuntu的過程中, 就無聊的把滑鼠每幾秒移動一下

(最好是斷電方式重新開機 Power OFF, 不是暖開機喔!)

很多 Linux 系列都有這問題
簡單的說, 斷電重新開機時, 把滑鼠每隔幾秒移動一下, 進入桌面平台
游標就會顯示出來

再不行.把滑鼠重插一個USB 孔, 重新開機


下面是網路上的解決方案
問題是又臭又長, 誰會去背這個,
問題都消失了, 怎找出下面這一大段指令
還是重開機比較快

開啟終端機輸入下面指令
 gsettings set org.gnome.settings-daemon.plugins.cursor active false
完成後,不用重新啟動電腦,滑鼠的游標就會出現。

2016年5月3日 星期二

Linux Thread Stack Size

pthread 的所有 Functoion Example

原則上, 寫程式盡量不要在 Thread中 new 大塊的記憶體
不然光是找出 memory leak 就累斃
大部份都是在 Main Process 都 new好記憶體
放在 struct中, 再傳入Thread 中.
Thread結束後, 統一在 Main Process刪除記憶體


顯示系統預設的 pthread Stack Size 是 8MiB
# ulimit -s
8192


使用 pthread_attr_setstacksize(...) 設定 pthread Stack Size
 pthread_create Example Code


使用 pthread_attr_getstacksize(...) 取得 pthread Stack Size


Linux File Compare Tools

Binary Compare Tools

還沒找到一個和 Hex Workshop 一樣好用的.
只好把檔案移到 Windows 下比對.

1:
 # diff file1.bin file2.bin
 如果是大型檔案, 可以增加 -H 參數
PS: 比對成功後, 也沒有訊息出來, 搞不清處是成功還是失敗.

2:
 # apt-get install diffuse
 # diffuse
PS: 無法處理對大型的bin 檔案

3:
# apt-get install kdiff3
# kdiff3
PS: 無法處理對大型的bin 檔案, 500GiB檔案, 一開啟就當了.

4:
Ultra Compare

About pthread_timedjoin_np Function


範例程式隨便寫的, 別太認真.

關於 pthread_timedjoin_np() 的回傳值
當 Thread 還在執行時, 回傳 nStstus = 110
#define ETIMEDOUT   110 /* Connection timed out */
當 Thread 還在結束時, 回傳 nStstus = 0x00
但只能問到一次是 0x00
再問一次, 就會變成 22
#define EINVAL      22  /* Invalid argument */
這一點會讓寫程式時, 就得立刻記錄 Thread已結束,
不然別的 Thread 就問不到已結束.
pthread_exit((void *)3) 的0x03 是收不到的.

//-----------------------------------------------------------------------------
#include 
//-----------------------------------------------------------------------------
void *thread_start( void *para)
{
 int i = 0;
 printf("pthread (%u) begin (%d).\n", clock(), i);
 for( i= 1; i< 10; i++)
 {
     printf("pthread (%u) - (%d).\n", clock(), i);
     sleep(2); // 2sec
 }
 printf("pthread (%u) pthread_exit()-1.\n", clock());
 pthread_exit((void *)3);
 printf("pthread (%u) pthread_exit()-2.\n", clock());
 sleep(5);
 printf("pthread (%u) return.\n", clock());
 return (void *)2;
}
//-----------------------------------------------------------------------------
int main_ThreadTest()
{
 pthread_t id;
 int i,ret;
 int nStstus;
 struct timespec sWaitTime;
 void *pThreadRet = NULL;

 ret = pthread_create( &id, NULL, thread_start, NULL);
 clock_gettime( CLOCK_REALTIME, &sWaitTime);
 sWaitTime.tv_sec += 1; // wait 1sec
 nStstus = pthread_timedjoin_np( id, &pThreadRet, &sWaitTime);
 nprintf( "pthread_timedjoin_np-2 (%u) Status:%d, pThreadRetSc:%d\n", clock(), nStstus, ret);
 if(ret!=0)
 {
     printf ("Create pthread error!\n");
     exit (1);
 }
 for(i=0 ; i < 1000; i++)
 {
  clock_gettime( CLOCK_REALTIME, &sWaitTime);
  sWaitTime.tv_sec += 1; // wait 1sec
  nStstus = pthread_timedjoin_np( id, &pThreadRet, &sWaitTime);
  nprintf( "pthread_timedjoin_np-2 (%u)Status:%d, pThreadRetSc:%d\n", clock(), nStstus, ret);
  usleep(100);
 }
// #define EBUSY       16  /* Device or resource busy */
// #define EINVAL      22  /* Invalid argument */
// #define ETIMEDOUT   110 /* Connection timed out */
// #define ECONNREFUSED    111 /* Connection refused */
// pthread_join(id,NULL);//等待線程(pthread)結束
 return (0);
}