2012年10月29日 星期一

How To Build EDK & EDK II Environment In Easy Way

如何編譯EDK

請參考 How To Compile UDK2014如果你是要編譯 UDK2014。
請參考 How To Compile UDK2015如果你是要編譯 UDK2015。

image
(D:\為例)
安裝Windows Driver KitC:\WINDDK\3790.1830
Edk 1.06解壓縮到D:\
EfiShell 1.06解壓縮到D:\Edk\Other\Maintained\Application\UefiShell資料夾下
image

修改D:\Edk\Sample\LocalTools.env 確認NASMDDK路徑

image
image


編輯D:\Edk\Sample\Platform\Nt32\Build\Config.env
image


用系統管理完開啟命令提示字元
image

切換目錄到D:\Edk\Sample\Platform\Nt32
輸入SET EDK_SOURCE=D:\Edk
build編譯
image

編譯成功畫面
image

切換到D:\Edk\Sample\Platform\Nt32\uefi\IA32
輸入secmain.exe
image
image
image
image

如何編譯EFI_Toolkit

解壓縮EFI_Toolkit_2.0.0.1 D:\Edk\Sample\Platform
修改D:\Edk\Sample\Platform\EFI_Toolkit_2.0\build.cmdSDK_INSTALL_DIR路徑

image

輸入build
輸入nmake編譯 
image

編譯完成畫面
image

輸出EFI檔在D:\Edk\Sample\Platform\EFI_Toolkit_2.0\build\em64t\bin
如果要編譯成其他檔案可以更改build.cmd裡的SDK_BUILD_ENV
image

想要決定編譯哪幾個檔案可以修改D:\Edk\Sample\Platform\EFI_Toolkit_2.0\apps\apps.mak

想要修改WINDDK路徑的話
D:\Edk\Sample\Platform\EFI_Toolkit_2.0\build\em64t\sdk.env


如何編譯EDKII

先安裝Tortoise SVN取得EDKII Source Code
安裝完成後在你要的目錄,點右鍵SVN Checkout
image
image
image


系統管理員開啟命令提示字元
輸入edksetup.bat
image

因為我是用Visual Studio 2010
必須修改Conf\target.txt 裡的TOOL_CHAIN_TAG = 2010
image

再輸入Build就會編譯了
image
image


編譯完成畫面
image

直接輸入build run
或是執行D:\EDKII\edk2\Build\NT32\DEBUG_VS2010\IA32\secmain.exe
image

模擬器開啟畫面
image
image
這裡有說明EDK II各個Package的內容
如果要切換不同Package
可以修改Conf\target.txt裡的
ACTIVE_PLATFORM       = Nt32Pkg/Nt32Pkg.dsc
ACTIVE_PLATFORM       = MdePkg/MdePkg.dsc

2012年9月27日 星期四

如何開啟A20位址線 ?

 

image

image

image

image

Assembly code

In al, 0x92

Or al, 2

Out 0x92, al

 

Another way is to use the BIOS.

INT 15, 2401

mov ax, 0x2401

int 0x15

2012年9月26日 星期三

Legacy BIOS V.S. UEFI BIOS

 

Legacy BIOS

UEFI BIOS

Language

Interrupt

C (99%)

Resource

Interrupt

Hardcode Memory Access

Hardcode I/O Access

Driver \ Protocols

Processor

X86 16-bits

CPU Protected Mode (Flat Mode)

Target

Binary Code

Removable Binary Drivers

Expand

Hook Interrupt

Load Driver

OS Bridge

ACPI

Run Time Driver Service

3rd Party ISV & IHV

Bad for Support

Easy for Support and Multi-Platforms

如何切換80 port Debug燈號 -> LPC or PCI ?

platform : Intel ICH8

在ICH8 Datasheet可以找到相關資訊

image

image

image

GCS = RCBA (Root Complex Base Address) + 3410h

image

Bit 2 : 設為 1 為輸出給 PCI 上的 80 port debug card

Bit 2 : 設為 0 為輸出給 LPC 上的 80 port debug card

 

RCBA 可以從 Device 31 : Function 0 取得

image

2011年9月28日 星期三

如何製作虛擬Floppy.img的GRUB開機介面

平台 : Ubuntu(Virtualbox)  Windows7

工具 : Bochs

 

1.開啟終端機,創立一個資料夾,並進入該資料夾

 

2.製作Floppy.img (兩者皆可)

# dd if=/dev/zero of=Floppy.img bs=1024 count=1440

# dd if=/dev/zero of=Floppy.img bs=512 count=2880

 

3.格式化Floppy.img

# mkdosfs Floppy.img

 

4.建立一個讓Floppy.img可以掛在的目錄 floppy

# mkdir floppy

 

5.掛載Floppy.img

# mount –o loop Floppy.img floppy

 

6.來這裡抓GRUB原始檔

 

7. 解壓縮(用0.96)

# tar zxvf grub-0.96-i386-pc.tar.gz

 

8.複製GRUB目錄

# sudo cp –r grub-0.96-i386-pc/* floppy

 

9.卸載floppy

# sudo umount floppy

 

10.安裝Grub

# sudo apt-get install grub

 

11.進入GRUB修改

# grub

 

12.輸入下列資訊

grub> device (fd0) floppy.img

grub> root (fd0)

grub> setup (fd0)

Checking if "/boot/grub/stage1" exists... yes

Checking if "/boot/grub/stage2" exists... yes

Checking if "/boot/grub/fat_stage1_5" exists... yes

Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)

Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)

Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded

Done.

grub> quit

 

13.把檔案複製回Window7介面,開啟Bochs載入floppy.img 如圖設定

bochs設定

14.執行畫面

畫面1

畫面2

到此就告一段落

 

(1) 如果已經開發好作業系統者,做完第8個步驟後,加入menu.lst與kernel.elf於指定位址

 

kernel.elf (boot/kernel.elf)

menu.lst ( boot/grub/menu.lst )

title    DclabOS

root    (fd0)

kernel    /boot/kernel.elf

boot

 

(2)然後接著做步驟9之後的動作即可

 

畫面3

畫面4

畫面5

PS : 作業系統只輸出 Test Output to monitor. …

 

搞定收工 !

2011年8月28日 星期日

Ubuntu上使用Dropbox

X86.tar.gz   X64.tar.gz   Deb or Rpm

最近Dropbox非常熱門,用來儲存文件非常方便,將來非常有可能取代隨身碟,而且適用於多種平台,特別是使用在手機上非常方便。

Deb或RPM安裝就不介紹了,點了就可以安裝,以下介紹的是用壓縮檔安裝。

1.開啟終端機 下載壓縮檔

$ wget http://www.dropbox.com/download/?plat=lnx.x86

 

2. 解壓縮同目錄 下載後的 tar.gz

$ tar zxvf dropbox-lnx.x86-1.1.43.tar.gz

 

3.執行同目錄下的 dropboxd

$ ./.dropbox-dist/dropboxd

 

4.出現下列訊息 並登入

Please visit https://www.dropbox.com/cli_link?host_id=f58c94b1bca468309bb218c04dc706ac&cl=en_US to link this machine.

 

5.終端機會出現 代表成功了...

Client successfully linked, Welcome Bohan!

 

註:預設Dropbox在使用者目錄下 ~/Dropbox,進去就可以看到目錄下有你的資料了。

2011年8月3日 星期三

Linux內核啟動過程

 

Linux的啟動過程可分為兩部分:架構/開發版相關的引導過程、後續的通用啟動過程。

引導階段通常使用組合語言撰寫,首先檢查內核是否支持當前架構的處理器,然後檢查是否支持當前的開發版。通過檢查後就跳到下一階段的start_kernel函數做準備了。

主要分成下列兩個步驟

1. 連接內核時使用的虛擬位址,所以需要設置分頁表、關閉所有Cache、MMU。

2. 執行start_kernel裡的工作,包括複製Data Section、清除BSS區段、執行start_kernel函數。

第二階段的關鍵代碼主要使用C語言撰寫。進行了內核初始化的全部工作,像是輸出Linux版本訊息、設置與結構相關的環境、初始化控制台,最後執行rest_init函數啟動init過程,創建系統第一個行程:init行程。

Bootloader的結構

嵌入式Linux系統從軟體的角度通常可分成以下四個層次

1. 引導加載程式,包括固化在Firmware中的Boot代碼與Bootloader兩大部份。有些CPU在運行Bootloader之前先運行一段固化程式,比如X86結構的CPU就是先運行BIOS中的firmware,然後才運行硬碟的第一個分區(MBR)中的Bootloader。在大多數的嵌入式系統中並沒有Firmware,Bootloader是開啟後執行的第一個程式。

2. Linux內核,特定於嵌入式板子的訂製內核予內核的啟動參數。內核的啟動參數可以是內核默認的,或是由Bootloader傳遞給它的。

3. 文件系統,包括跟文件系統與建立於Flash內存設備上的文件系統。裏面包含了Linux系統能夠運行所需的應用程式、程式庫,比如可以給用戶提供操作Linux的控制介面的Shell、動態連接與運行時需要的glibc、uClibc ...等。

4. 用戶應用程式,他储存在文件系統中。有時在用戶應用程式與內核之間可能還會包括圖形介面像是Qtopia、MiniGUI...等。

2011年6月9日 星期四

Python的.py與.pyc

.py檔是Python的原始程式,.pyc檔是當Python執行.py檔案時,會將.py的程式編譯成中間程式碼 (bytecode),再用虛擬機器去執行它。

.pyc檔與JAVA、C#的bytecode有異曲同工之妙,但是Python沒有 JAVA的JIT (just-in-time compilation) 的技術,每當執行到一段 bytecode 時,虛擬機器會先把它翻譯成 native code 執行,而當以後再執行到同一段 bytecode 時,翻譯的動作就可以省去,所以速度才會較Python快。

.pyc檔可以加快下次執行的速度,所以當執行.py檔時,Python會讀取有沒有.pyc,要不然就會讀原始的.py檔。