bochs除錯linux核心

2022-07-09 21:39:09 字數 3164 閱讀 5426

1. 構造除錯環境

由於bochs內建除錯功能, 且支援gdb, 用它除錯核心會很方便.

(文章中大部分命令的執行需要root許可權,以sudo方式執行)

1.1 構建磁碟映象

shell**

dd if=/dev/zero of=hd0.img count=$((63*16*100))

用這個命令可以構建乙個50mb左右的磁碟映象, 輸出結果如下:

100800+0 records in

100800+0 records out

51609600 bytes (52 mb) copied, 0.734578 s, 70.3 mb/s

注意count必須為63*16的倍數, 否則bochs識別硬碟會有問題.

1.2 掛載磁碟映象

shell**

losetup /dev/loop0 hd0.img

這個命令可以將檔案繫結到乙個loop裝置. 如果/dev/loop0不存在, 可以嘗試 modprobe loop.

然後進行裝置初始化:

shell**

cfdisk -s63 -h16/dev/loop0

只建立乙個主分割槽就可以. 寫入後, 用命令fdisk檢查結果:

shell**

fdisk -lu /dev/loop0

disk /dev/loop0: 51 mb, 51609600 bytes

16 heads, 63 sectors/track, 100 cylinders, total 100800 sectors

units = sectors of 1 * 512 = 512 bytes

disk identifier: 0x00000000

device boot start end blocks id system

/dev/loop0p1 63 100799 50368+ 83 linux

將分割槽1掛載到/dev/loop1.

shell**

losetup /dev/loop1 hd0.img -o $((63*512))

格式化/dev/loop1為ext3格式.

shell**

mkfs.ext3 /dev/loop1

在mnt下建立img目錄, 做以後維護用.

shell**

mkdir -p /mnt/img

將loop1掛載到/mnt/img

shell**

mount /dev/loop1 /mnt/img/

安裝引導程式. 因為我狂熱傾向於模組化架構, 所以選擇grub2.

本文以grub-1.97~beta3為示例, 讀者可自行安裝其他的引導系統如lilo.

shell**

mkdir /mnt/img/boot

cp -r /usr/lib/grub/i386-pc/ /mnt/img/boot/grub

生成乙個core.img, biosdisk負責讀取磁碟, part_msdos負責處理mbr, ext2負責讀取ext3分割槽.

shell**

cd /mnt/img/boot/grub/

grub-mkimage -o i386-pc -o core.img biosdisk part_msdos ext2

shell**

ls -lh core.img

-rw-r--r--1 root root 25k sep2114:28 core.img

只有區區的25k.. 裡面甚至還包含乙個小的應急shell, 不過作用不大.

安裝grub2到(hd0), 根目錄在(hd0,1)

shell**

echo"(hd0) /dev/loop0" > ./device.map

grub-setup -m ./device.map -d /mnt/img/boot/grub/ -r '(hd0,1)' '(hd0)'

檢查一下安裝成果:

shell**

hexdump -c /dev/loop0 | less

如果你能看到:

shell**

00000180 7d e8 2e00 cd18 eb fe4752554220004765|}.......grub .ge|

00000190 6f 6d004861726420446973 6b00526561|om.hard disk.rea|

就說明安裝成功.

清理一下.

shell**

cdumount /mnt/img

losetup -d /dev/loop1

losetup -d /dev/loop0

1.3 啟動測試.

給上面的hd0.img配乙個bochsrc檔案, 可以拿bochs示例dlxlinux的配置檔案來改, 只需將硬碟換為:

shell**

ata0-master: type=disk, path="hd0.img", cylinders=100, heads=16, spt=63

然後啟動bochs, 順利的話, 你能看到傳說中的grub2 shell.

2. 從啟動到保護模式.

為我們的bochs虛擬機器編譯乙個核心. 不必太複雜, 目前我們只關心啟動部分.

2.1 安裝核心

退出bochs, 掛載hd0.img:

shell**

mount hd0.img /mnt/img/ -o loop,offset=$((63*512))

拷貝bzimage.

shell**

cp /usr/src/linux/arch/i386/boot/bzimage /mnt/img/boot/vmlinuz-3.0.00

這兩個步驟可以放到核心的makefile中, 以後每次編譯完成後, 自動更新到hd0.img裡.

然後將下列配置寫到/mnt/img/boot/grub/grub.cfg

shell**

# timeout for menu

set timeout=10

# set default boot entry as entry0

set default=0

# entry0- load linux kernel

menuentry"linux-3.0.00"

解除安裝/mnt/img, 啟動測試一下, 順利的話, 你能看到乙個panic.

bochs除錯linux 0 11核心

學習作業系統,最難的就是保護模式的各種硬體機制了 如分段分頁定址,特權級,門機制 單純的8086實模下的彙編模擬器是無法模擬,除錯這些機制的。只能用個功能更強大的80 86模擬器了。由於模擬器挺多的,如vmware,virtual box等等,但是好像更方便除錯的,我們選擇bochs吧。趙炯博士已經...

Bochs 除錯技術

bochs 除錯技術 freos hobby os frank wang 中國核芯網 對於任何想嘗試寫自己的作業系統的朋友來說,我都要向你推薦bochs。這個模擬器最大的好處就是可以單步除錯。在沒了解它之間,我在寫freos幾乎是瞎子,進展十分緩慢,特別是在你沒有完成顯示器驅動之前,你可以想象,看不...

bochs除錯技術

bochs除錯技術 除錯模式將出現下列命令列 bochs 1 下面初步說明一下每條指令的用法 執行控制命令 c 繼續執行,遇到斷點將停止 stepi count 執行count條指令,預設為1條 si count stepi的縮寫 step count 執行count條指令,預設為1條 s coun...