2012年10月29日 星期一
How To Build EDK & EDK II Environment In Easy Way
2012年9月27日 星期四
如何開啟A20位址線 ?
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 | InterruptHardcode Memory AccessHardcode 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 ?
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 如圖設定
14.執行畫面
到此就告一段落
(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之後的動作即可
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檔。