Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Linux內核系列—9.操作系統開發之Loader,linuxloader

Linux內核系列—9.操作系統開發之Loader,linuxloader

編輯:關於android開發

Linux內核系列—9.操作系統開發之Loader,linuxloader


一個操作系統從開機到開始運行,大致經歷“引導—>加載內核入內存—>跳入保護模式—>開始執行內核”這樣一個過程。也就是說,在內核開始執行之前不但要加載內核,而且還有准備保護模式等一系列工作,如果全都交給引導扇區來做,512字節很可能是不夠用的,所以不妨把這個過程交給另外的模塊來完成,我們把這個模塊叫做Loader。引導扇區負責把Loader加載入內存並且把控制權交給它,其他工作放心地交給Loader來做,因為它沒有512字節的限制,將會靈活得多。

為了操作方便,把軟盤做成FAT12格式。這樣對Loader以及今後的Kernel(內核)的操作將會非常簡單易行。

引導扇區是整個軟盤的第0個扇區,FAT12格式如下:

loader源碼:

org	0100h

	mov	ax, 0B800h
	mov	gs, ax
	mov	ah, 0Fh				; 0000: 黑底    1111: 白字
	mov	al, 'L'
	mov	[gs:((80 * 0 + 39) * 2)], ax	; 屏幕第 0 行, 第 39 列

	jmp	$				; 到此停住

然後執行命令

nasm boot.asm -o boot.bin

nasm loader.asm -o loader.bin

先用bximage生成一個軟盤映像,然後在linx下這樣做,因為我的linux裡只有/mnt/hgfs/

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

sudo mount -o loop a.img /mnt/hgfs/

sudo cp loader.bin /mnt/hgfs/ -v

sudo umount /mnt/hgfs/

運行結果如下:

看到了字符“L”。

如果把前面學習的時鐘中斷程序按照上面的方法來運行也可以,如下

可以在虛擬機上運行,說明已經突破了512字節限制。

那麼現在我們假設已經有了一個內核,Loader肯定要加載它入內存,而且內核開始執行的時候肯定已經在保護模式下了,所以,Loader要做的事情至少有兩件:

1.加載內核入內存

2.跳入保護模式

 

一個碼農的日常 

源碼

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved