搜尋此網誌

2013年12月16日 星期一

在AHCI上,什麼是BIST與Index-Data Pair?

[AHCI 1.3 -> 10.13] BIST 
BIST是進入,當軟體建立一個BIST FIS在命令列中與設定CTBAz[B]。一但BIST命令被放到列表裡,SW將不允許去建立任何命令直到它清除PxCMD.ST。HBA如何運作的細節在測試模式中,此是章節將不在此說明範圍內。一個晶片商的連續特殊的試驗,可能被執行經由晶片商的特殊定義的戰存器(如同那些在HBA的PCI配置空間)。此BIST的細節不被定義在AHCI中,去允許晶片商自由的建構不是很詳盡的或不是很明顯測試架構。
此測試模式被退出時,是系統軟體清除PxCMD.ST與寫入一個0x01的值到PxSCTL.DET。清除PxCMD.ST放置DMA控制器進入到空閒,與寫PxSCTL.DET去重置此介面。

[AHCI 1.3 -> 10.14] Index-Data Pair
Index-Data  Pair  (IDP)提供主機軟體一個途徑,藉由執行memory mapped I/O space (> 1MB)去讀寫AHCI的暫存器。在PC平台上,主機軟體 (BIOS, Option ROMs, OSs)寫入運作在真實模式(‘real-mode’ (8086 mode))不能存取在配置在PCI上的記憶體位址,如果此位址空間是(1)記憶體映射與(2)映射大於1MB。 AHCI被致能後必須面對的問題:

  • AHCI並不支援BIOS IDE存取方式。 
  • AHCI實現支援BIOS存取途徑,也支援4個裝置以上(一般或經由擴充器(Port Multiplier))

IDP的途徑允許主機軟體去存取所有AHCI的MMIO暫存器間接I/O位址,在間接記憶體映射位址的地方存取經由AHCI基本位址暫存器(ABAR)。


當去設計一個驅動程式時,IDP與AHCI’s MMIO registers誰先搶到GHC.AE,並將它設為"1" ,另一端將放棄其控制權,要不然將會有衝突。




[Qemu-devel] [PATCH] ahci: add port I/O index-data pair
http://lists.gnu.org/archive/html/qemu-devel/2011-08/msg03327.html

2013年12月13日 星期五

如何在Linux上,如何呼叫一個Shell Scripts後,把它的環境參數留下

程式1 test_s
#!/bin/bash
echo "test_s"
value0=2
value1=9220
value2=10
value3=0x80000


程式2 run_t

#!/bin/bash
parmfile=test_s
file_context=$(cut -f1 "$parmfile")
for set_parm in $file_context
do
    if [ $set_parm != "#!/bin/bash" ]; then
        echo "[$set_parm]"
        export "$set_parm"
    fi
done
echo "value0=$value0"
echo "value1=$value1"
echo "value2=$value2"



echo "value3=$value3"

執行此程式
desktop:~$ /bin/baush run_t

[echo "test_s"]
[value0=2]
[value1=9220]
[value2=10]
[value3=0x80000]
value0=2
value1=9220
value2=10
value3=0x80000

在Ubuntu 13版上,如何開啟command line(terminal)視窗

新版的Ubuntu怎麼找不到Terminal程式呢?
執行下面步驟就可以找出並開啟Terminal程式:
1. 登入Ubuntu。

2. 選擇"Search your computer and online sources"。
3. 在搜尋列中,輸入"terminal";也可使用滑鼠去點選圖示中的Terminal。
4. 選擇後,開始可以輸入Shell指令。









2013年12月12日 星期四

如何在Linux寫一個簡單的Shell Scripts

1. 開啟編輯器(such as: vi, vim...)去建立一個檔案叫test其內容如下:
#!/bin/bash
filename="123.txt"
echo "filename="$filename

/bin/bash test1 $filename

echo "Okay..."

2. 開啟編輯器去建立另一個檔案叫test1其內容如下:
#!/bin/bash
echo "filename=[$1]"
value0=2
value1=9220
value2=10
value3=0x80000
echo "value3="$
value3

3. 執行此程式
desktop:~$ /bin/baush test    //此程式將會呼叫另一個test1,並將filename傳到test1成為參數1。
filename=123.txt
filename=[123.txt]
value3=0x80000


在Linux 32bits與64bits中的int與long為何bytes的length不同?

在Linux 64bits中的long為8 bytes,但在32bits中的long則為4 bytes。
x86的int則為2bytes,但Arm的架構則為4bytes。
如何解決這些資料結構問題呢?
請使用下面的函式庫stdint.h。
#include
它的內容如下:
typedef signed char int8_t
typedef unsigned char uint8_t
typedef signed int int16_t
typedef unsigned int uint16_t
typedef signed long int int32_t
typedef unsigned long int uint32_t
typedef signed long long int int64_t
typedef unsigned long long int uint64_t
.........

把它轉成自己的macros.
#define i8 int8_t
#define u8 uint8_t
#define i16 int16_t
#define u16 uint16_t
#define i32 int32_t
#define u32 uint32_t
#define i64 int64_t
#define u64 uint64_t

使用 uintX_t or intX_t 這些結構宣告的變數可以確保它的資料長度是固定的,在32bits、64bits或不CPU架構的編譯器的切換。

使用自己的macros下次轉換其他結構會比較方便。

在Linux kernel中,什麼macro可以用來辨識32位元或64位元

 /*此__i386__為 32bit macro的判斷,另一個__x86_64__ or __amd64__則為64bit的判斷。*/
#if defined(__i386__)

    使用32位元程式碼...

#else

    使用64位元程式碼...

#endif

2013年12月5日 星期四

在Linux上,如何搜尋SCSI或ATA裝置(or USB)?

$ lsscsi  顯示所有連接裝置
[0:0:8:0]    disk    FUJITSU  MAM3184MP        0105  /dev/sda

$ lsscsi -s 顯示裝置,並顯示容量。
[0:0:0:0]    cd/dvd  PIONEER  DVD-RW  DVR-212D 1.22  /dev/sr0        - 
[1:0:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sda    320GB 

$ lsscsi -c 顯示類似 'cat /proc/scsi/scsi'
Attached devices:

Host: scsi0 Channel: 00 Id: 08 Lun: 00
  Vendor: FUJITSU  Model: MAM3184MP        Rev: 0105
  Type:   Direct-Access                    ANSI SCSI revision: 03


$ lsscsi -d 顯示裝置節點的主要與次要的數值
[0:0:1:0]    disk    FUJITSU  MAM3184MP        0105  /dev/sda[8:0]


$ lsscsi -H 顯示邏輯單位(LUN:logical units)
[0]    scsi_debug
[1]    aha152x


$ lsscsi -t 顯示傳輸資訊
[0:0:0:0]    disk    sata:                           /dev/sda
[3:0:0:0]    cd/dvd  ata:                            /dev/scd0
[5:0:0:0]    disk    usb: 7-1:1.0                    /dev/sdb


$ lsscsi -Ht 顯示邏輯單位的傳輸資訊
[0]    ahci          sata:
[1]    ahci          sata:
[3]    ata_piix      ata:


Refer to: http://sg.danny.cz/scsi/lsscsi.html