2017年3月7日 星期二

交叉編譯memtester來測試記憶體是否有問題

要把memtester移植到arm的版子上來執行,因為memtester本身沒有configure的script來幫你產生Makefile,不過只需要去修改下面兩個檔案就可以達到cross-compiler的目的
1. conf-cc
2.conf-ld

1. 首先來看conf-cc這支,原使內容是使用cc來當作compiler,而我們就只需要把cc改成我們arm的toolchain,所以修改方式如下:

原始內容:
cc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 -DTEST_NARROW_WRITES -c

This will be used to compile .c files.

修改後:
/home/danny/toolchain/bin/arm-linux-gnueabi-gcc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 -DTEST_NARROW_WRITES -c

This will be used to compile .c files.



2. 接著是conf-ld,修改方式也與上面大同小異,修改方式如下:

原始內容:
cc -s


This will be used to link .o files into an executable.

修改後:
/home/danny/toolchain/bin/arm-linux-gnueabi-gcc -s

This will be used to compile .c files.


修改完上述的兩個檔案後,接著指需執行make就可以編譯成功了!!!

====================================================================


memtester的使用方式如下:

memtester [要測試的大小] [測幾個循環]
ex: memtester 512M 5    // 測試512MB共測試5個round


另外還有其他參數 "-p", "-d",這個參數作者沒實際使用過,不過從README解讀的作用大概如下所述:

"-p"
./memtester -p 0x0 64k 1       //直接對實體位置(physical address) 64K的測試一次


"-d"

./memtester –p 0x0 –d /dev/foodev 64k 1    // 若是沒有/dev/mem這個character device,用-d指定memory device.




2017年3月2日 星期四

在linux下,SVN基本的指令

首先先來了解 SVN Trunk, Tags, Branches 這三個的概念

  • trunk: Main line of development(主要的開發線)
  • tags: Releases (想要 Release 時, 可以標Tag, 之後可依 Tag 來找回之前版本的資料)
  • branches: Preparation of release, bug fixing(分支)


接下來是SVN 基本功能,以及指令操作:


Import: 將整個 project_directory 的資料 import 進 svn 裡面

  • svn import project_directory http://domain_name/svn_project



Checkout: 將整個project從svn checkout 回來

  • svn co http://domain_name/svn_project
  • svn co -r 5 http://domain_name/svn_project # checkout第5版的 projcets



List: 列出project中的檔案/資料

  • svn ls http://domain_name/svn_project


Update: 將目前版本更新成 SVN Server上最新版本.

  • svn up


Commit: 將目前所修改的部分 commit 回 SVN Server

  • svn ci


Status: 查看目前檔案結構 跟 SVN Server上的版本有哪些不同

  • svn st


Add: 新增檔案或目錄到 svn

  • svn add File 或 svn add DIR


MV: 更改檔名, 並且此檔案之前紀錄還要繼續留下

  • svn mv filename new_filename


Revert: 還原這次的修改, 回到前一版(未 commit 前可使用)

  • svn revert [File | DIR]


SVN 檔案狀態資訊:

?: 此檔案不存在 SVN 裡面
A: 此次新增的檔案
C: 此檔案已經有人改過, 合併不成功, 需要人工介入
D: 此次移除的檔案
M: 此檔案有修改過
U: 此檔案有被更新過



另外有進階的指令:

建立一個 branch:

  • svn copy http://domain_name/trunk http://domain_name/branches/my-branch -m 'create a branch' 

建立 Release Tags:

  • svn copy http://domain_name/trunk http://domain_name/tags/Release_0.1 -m 'create Release tags for Release 0.1'


合併兩個版本的檔案     //參考自: 用 Subversion 的 Merge 來 Undo

svn merge -r REV1:REV2 {path/to/workingcopy}
 (UNDO) svn merge -r 123:122 ...
 (MERGE)svn merge -r 123:124 ...
svn merge --dry-run -r 343:344 http://domain_name/trunk



有 "C" 狀態處理完後, 用 resolved  將自動產生的檔案刪除, 才能正常 commit:

  • svn resolved filename    //會把自動產生 diff 等等的檔案刪除



找版本間有什麼不同 diff:

  • svn diff     //自動以現在檔案跟 SVN 內最新版做 diff
  • svn diff -r123:124


Info: 列出現在路徑, 版本編號, 最後一次修改日期等等的資訊

  • svn info


Log: 如果沒輸入參數, 預設會把所有 commit log 都列出來

  • svn log
  • svn log -l 10    //顯示最新10筆Log
  • svn log -c 100    //顯示 revision 100 的 Log
  • svn log -v -c 100    //顯示 revision 100 的詳細 Log
relocate: 假設你的SVN Server換IP Address了,使用此參數來重新定位你目前的這包code
  • svn relocate svn://192.168.1.3/home/repos/test/branch/FW


Propset (propset, pset, ps): 版本控制都有些特殊 Keyword 設定, 如 Id 就是最常用的, 設定方法如下:

在檔案內找地方加入 $Id$
設定此檔案要能吃 Id 的 Keyword: svn ps svn:keywords 'Id' filename (只需設一次即可, 之後就不用再設)
svn ci 後, $Id$ 會自動代換成 $Id:filename 編號 年月日時分秒 username $ 的資訊
svn help ps 可以看到有哪些 Keyword 可以用, 即 Keyword 的說明.(ex: URL, Author, Date, Rev, Id 等.)