目前分類:Linux System (20)

瀏覽方式: 標題列表 簡短摘要

硬碟定址概說

傳統上一般說來定址的方法有古老的C/H/S (cylinder/head/sector)的方法,也就是說硬碟上的pin 腳位,我們傳進去這三個值,硬碟裡面的晶片會自動幫我們轉換到硬碟上一個區塊(block)上去作讀寫。這是最早的根據硬碟實體(硬碟片數量就是cylinder, 讀寫頭數目head)製作的定址方法,以前ATA只定義24bit (H(8b)S(6b)C(10b)), ATA-2定義28bit (H(4b)S(8b)C(16b)),由於一個硬體讀寫sector傳統上512B,所以ATA的硬碟最多只有8G,ATA-2的硬碟最多只有128G。這限制了硬碟的總大小與使用者對不同廠家硬碟的使用。不同廠家硬碟的C/H/S不同,那就要寫不同的程式控制。所以後來提出LBA (Logical Block Addressing)方法,就是不管了,只要給我一個數目,內部轉換是硬碟廠家自己的事,在ATA-6的規格裡面可以定址到48bit, 就是248 Byte。基本上後來的硬碟都能用LBA了。不同廠家的geometry是不一樣的,也就是同樣是80G的硬碟,但可以由不同的CHS總數來達成,這讓要找到真正的LBA定址困擾,所以CHS與LBA有公式做轉換,而且跟當初定義硬碟的geometry head跟sector有關:

LBA = (c * GH + h) * GS + (s - 1)

例如geometry (255,63,xxx) 的(32, 33, 0)的LBA值,就是(0 * 255 + 32) * 63 + (33 - 1) = 2048,通常這就是linux fdisk所切的第一partition位置。

新的usb drive, SSD等已經沒有CHS了,甚至連sector都有定義4k的讀寫。geometry是由OS 跟driver去跟硬碟詢問得到的,最早在DOS由int 13去問硬碟,所以當用virtual machine時,geometry是由virtual machine回報給OS的。由於現在都用LBA,現在已經沒有真正physical 上的geometry意義,像fdisk還可以自己高興隨便定義 (所以在用fdisk等工具時如果無聊自己去定義geometry,不同的話,根據公式轉出的CHS值也會不同,就是要轉換正確LBA,然後bootloader, OS driver大家都同意就好)。總之現在只是邏輯上計算的值,而唯一可能看到的地方是MBR裡面partition的定義,那個也基本無意義了,我猜所有的bootloader應該都是用LBA去跟硬碟要boot sector,除了DOS會來看,所以只對要裝DOS的硬碟有意義。

MBR與硬碟確認

MBR(master boot record)是指如果有很多顆硬碟構成的系統,那MBR就是第一個硬碟上的第一個sector(傳統上CHA的 sector從1開始,不是0,有的bios有bug),在LBA的addressing中,就是LBA 0
BIOS裡面可以設定Boot order,那什麼是第一個硬碟呢,他會根據硬體上的回報來決定,所以不是固定的尤其在SAN的環境中可以指定SANBOOT時,即使是現在的PC環境中也有usb硬碟有可能會變成第一個硬碟。所以為了確保開機的disk是哪一個,不隨著變換disk而變化,這些無論怎樣都是根據某一個特定的獨一無二的資訊來確認硬碟,但是這個資訊寫在哪裡呢?有效範圍到哪裡呢?例如全世界的硬碟有可能都獨一無二的辨識,還是只有lab內還是只有目前這台硬碟呢?目前Linux提供下列方式。

BB 發表在 痞客邦 留言(0) 人氣()

mkimage -A arm -O linux -T kernel -C none -a 30000000 -e 30000000 -n Name -d zImage uImage

mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "fat scriptcmd"  -d scriptcmd_fat.txt scriptcmd

BB 發表在 痞客邦 留言(0) 人氣()

Post
Power on self test

BB 發表在 痞客邦 留言(0) 人氣()

binutils

BB 發表在 痞客邦 留言(0) 人氣()

Part 1 – Introduction to GNU C/C++ compiler and binutils
Step 1: understand GNU binutils

BB 發表在 痞客邦 留言(0) 人氣()

Linux下文件的類型是不依賴於其後綴名的,但一般來講:

BB 發表在 痞客邦 留言(0) 人氣()



BB 發表在 痞客邦 留言(0) 人氣()


likely() and unlikely() macro in Linux kernel

BB 發表在 痞客邦 留言(0) 人氣()


虛擬文件系統 PROC

BB 發表在 痞客邦 留言(0) 人氣()


/proc/meminfo

BB 發表在 痞客邦 留言(0) 人氣()


free : 藉由讀取 /proc/meminfo 檢視記憶的使用狀況,單位是 1024 Bytes 的 block。

BB 發表在 痞客邦 留言(1) 人氣()



BB 發表在 痞客邦 留言(1) 人氣()


查看 Distribution 版本

BB 發表在 痞客邦 留言(0) 人氣()


Linux環境下的軟件安裝,並不是一件容易的事情;如果通過原始碼編譯後在安裝,當然事情就更爲複雜一些;

BB 發表在 痞客邦 留言(1) 人氣()


[root@*** /]$ a=1

BB 發表在 痞客邦 留言(0) 人氣()


來認識一下原始碼編譯的流程:

BB 發表在 痞客邦 留言(0) 人氣()

常用gcc(GNU Compiler Collection)指令說明

BB 發表在 痞客邦 留言(0) 人氣()

參考來源
http://gogojesseco.blogspot.com/2009/11/before-bootloader.html

BB 發表在 痞客邦 留言(1) 人氣()

由 console 讀入參數(依照順序與數目)

$1 $2

BB 發表在 痞客邦 留言(0) 人氣()


gettimeofday(), clock_gettime(), timer_gettime()

BB 發表在 痞客邦 留言(0) 人氣()