bochs linux鏡像下載 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁系統(tǒng)工具操作系統(tǒng) → bochs安卓linux鏡像 3.0內(nèi)核已驗證版

bochs安卓linux鏡像

3.0內(nèi)核已驗證版

bochs安卓linux鏡像
  • 軟件大。3.1M
  • 軟件語言:中文
  • 軟件類型:國產(chǎn)軟件 / 操作系統(tǒng)
  • 軟件授權(quán):免費(fèi)軟件
  • 更新時間:2016-12-07 17:38
  • 軟件等級:4星
  • 應(yīng)用平臺:linux
  • 軟件官網(wǎng):

ITMOP本地下載文件大小:3.1M

點(diǎn)贊好評0%(0) 差評差評0%(0)

軟件介紹人氣軟件精品推薦相關(guān)文章網(wǎng)友評論下載地址

小編為您推薦:bochs鏡像

bochs linux3.0 鏡像是安卓手機(jī)bochs運(yùn)行l(wèi)inux的img文件,3.0版本已經(jīng)過驗證,下面給出手機(jī)安裝bochs鏡像文件的具體操作方法,有需要的用戶歡迎來IT貓撲下載~

手機(jī)linux鏡像安裝教程

1. 構(gòu)造調(diào)試環(huán)境

由于bochs內(nèi)建調(diào)試功能, 且支持gdb, 用它調(diào)試內(nèi)核會很方便.

(文章中大部分命令的運(yùn)行需要root權(quán)限,以sudo方式運(yùn)行)

1.1 構(gòu)建磁盤鏡像

Shell代碼

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

用這個命令可以構(gòu)建一個50MB左右的磁盤鏡像, 輸出結(jié)果如下:

100800+0 records in

100800+0 records out

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

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

1.2 掛載磁盤鏡像

Shell代碼

losetup /dev/loop0 hd0.img

這個命令可以將文件綁定到一個loop設(shè)備. 如果/dev/loop0不存在, 可以嘗試 modprobe loop.

然后進(jìn)行設(shè)備初始化:

Shell代碼

cfdisk -s 63 -h 16 /dev/loop0

只創(chuàng)建一個主分區(qū)就可以. 寫入后, 用命令fdisk檢查結(jié)果:

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

將分區(qū)1掛載到/dev/loop1.

Shell代碼

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

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

Shell代碼

mkfs.ext3 /dev/loop1

在mnt下創(chuàng)建img目錄, 做以后維護(hù)用.

Shell代碼

mkdir -p /mnt/img

將loop1掛載到/mnt/img

Shell代碼

mount /dev/loop1 /mnt/img/

安裝引導(dǎo)程序. 因為我狂熱傾向于模塊化架構(gòu), 所以選擇GRUB2.

本文以grub-1.97~beta3為示例, 讀者可自行安裝其他的引導(dǎo)系統(tǒng)如lilo.

Shell代碼

mkdir /mnt/img/boot

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

生成一個core.img, biosdisk負(fù)責(zé)讀取磁盤, part_msdos負(fù)責(zé)處理MBR, ext2負(fù)責(zé)讀取ext3分區(qū).

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 Sep 21 14:28 core.img

只有區(qū)區(qū)的25K.. 里面甚至還包含一個小的應(yīng)急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 2e 00 cd 18 eb fe  47 52 55 42 20 00 47 65  |}.......GRUB .Ge|

00000190  6f 6d 00 48 61 72 64 20  44 69 73 6b 00 52 65 61  |om.Hard Disk.Rea|

就說明安裝成功.

清理一下.

Shell代碼

cd

umount /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. 從啟動到保護(hù)模式.

為我們的bochs虛擬機(jī)編譯一個內(nèi)核. 不必太復(fù)雜, 目前我們只關(guān)心啟動部分.

2.1 安裝內(nèi)核

退出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

這兩個步驟可以放到內(nèi)核的Makefile中, 以后每次編譯完成后, 自動更新到hd0.img里.

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

Shell代碼

# Timeout for menu

set timeout=10

# Set default boot entry as Entry 0

set default=0

# Entry 0 - Load Linux kernel

menuentry "Linux-3.0.00" {

set root=(hd0,1)

linux /boot/vmlinuz-3.0.00 root=/dev/hda1

}

卸載/mnt/img, 啟動測試一下, 順利的話, 你能看到一個panic.

2.2 從loader到內(nèi)核

先測試一下bochs的調(diào)試能力. bochs以調(diào)試模式啟動后, 會自動停在BIOS中Reset代碼, 地址為0xFFFFFFF0. 我們在bochs console里輸入:

Shell代碼

pb 0x00007c00

在0x7c00設(shè)置一個斷點(diǎn), 這正式GRUB2 MBR代碼的入口點(diǎn). GRUB2負(fù)責(zé)加載自己的core.img, 在core.img里讀取hd0, 解析MBR里的分區(qū)信息, 并利用ext2模塊找到配置文件, 顯示主界面,

并加載用戶的選擇內(nèi)核文件(vmlinuz-xxx).

loader和內(nèi)核之間的協(xié)議, 在內(nèi)核源碼Document/x86/boot.txt里有詳盡的描述.

內(nèi)核文件包括實模式代碼和保護(hù)模式代碼. loader讀取內(nèi)核文件的頭部信息, 從而得知實模式和保護(hù)模式代碼的大小. 保護(hù)模式部分被加載到0x100000(1MB), 實模式啟動代碼和數(shù)據(jù)/

堆棧段位置可以重定位在0x10000開始的低端內(nèi)存的任何位置.

2.3 內(nèi)核是怎樣鏈成的...

首先編譯內(nèi)核的保護(hù)模式代碼, 生成源碼根目錄的vmlinux. 這是一個elf格式的文件, 可以用readelf查看.

Shell代碼

readelf -a /usr/src/linux/vmlinux | less

這個文件包含所有的符合信息, 容量巨大.

Shell代碼

ls -lh /usr/src/linux/vmlinux

-rwxr-xr-x 1 root root 4.8M Sep 10 17:28 /usr/src/linux/vmlinux

文件內(nèi)容會在后面章節(jié)細(xì)述.

接著vmlinux洗凈壓縮. 這個工作在 arch/x86/boot/compressed目錄進(jìn)行. 讀Makefile可以看到先進(jìn)行objcopy操作, 在compressed目錄下生成vmlinux.bin.

Shell代碼

ls -lh /usr/src/linux/arch/x86/boot/compressed/vmlinux.bin

-rwxr-xr-x 1 root root 3.7M Sep 10 17:28 /usr/src/linux/arch/x86/boot/compressed/vmlinux.bin

因為去掉了調(diào)試信息, 文件稍小了一些.

接著根據(jù)用戶的選擇進(jìn)行壓縮, 目前支持gz, bz2, lzma三種方式. 我用默認(rèn)方式, 生成vimlinux.bin.gz.

Shell代碼

#ls -lh /usr/src/linux/arch/x86/boot/compressed/vmlinux.bin.gz

-rw-r--r-- 1 root root 1.9M Sep 10 17:28 /usr/src/linux/arch/x86/boot/compressed/vmlinux.bin.gz

可以看到也有近50%的壓縮率.

緊接著加入自解壓部分, 生成新的vmlinux.

Shell代碼

ls -lh /usr/src/linux/arch/x86/boot/compressed/vmlinux

-rwxr-xr-x 1 root root 2.0M Sep 10 17:28 /usr/src/linux/arch/x86/boot/compressed/vmlinux

這也是一個elf文件, 可以用readelf查看.

接著工作轉(zhuǎn)移到boot目錄, 對上面的vmlinux進(jìn)行strip操作, 生成二進(jìn)制格式的vmlinux.bin. 這里面包括全部的包含模式代碼, 啟動時第一條語句會被加載到0x100000(1MB).

然后編譯實模式代碼, 包括已無用的引導(dǎo)扇區(qū)和setup部分, 生成setup.elf. 然后進(jìn)行strip, 生成setup.bin.

最后, 利用內(nèi)核工具"build", 將setup.bin和vmlinux.bin拷貝在一起, 并填上必要的信息如setup部分的大小等, grub等引導(dǎo)程序可以使用的bzImage誕生了.

2.3 內(nèi)核實模式代碼

實模式代碼位于arch/x86/boot. 記得Linux2.6.18之前所有的代碼都用匯編寫成, 2.6.18之后大部分替換成了C.

入口點(diǎn)在header.S文件, 即包含了無用的"引導(dǎo)扇區(qū)代碼", 也包含了引導(dǎo)程序能識別的頭部信息. 第一條可執(zhí)行語句在偏移0x200的位置(跳過引導(dǎo)扇區(qū)), 執(zhí)行必要的初始化操作, 然后將控制權(quán)交給C程序, 即main.c里的main()函數(shù).

有了main()函數(shù), 接下來的過程就像讀文檔一樣方便了心情好 利用實模式的優(yōu)勢, 調(diào)用BIOS執(zhí)行必要的初始化和參數(shù)獲取, 并將結(jié)果存到結(jié)構(gòu)體boot_params.

在main()的最后調(diào)用go_to_protected_mode(). 這個函數(shù)位于pm.c, 它打開A20, 初始化協(xié)處理器(如果有), 關(guān)掉所有中斷, 設(shè)置空的IDT和最基本的GDT, 接著調(diào)用protected_mode_jump跳轉(zhuǎn)到保護(hù)模式的入口代碼0x100000. 這個函數(shù)定義在pmjump.S. 注意跳轉(zhuǎn)的時候, boot_params被放在esi寄存器.

2.4 保護(hù)模式:自解壓過程

內(nèi)核保護(hù)模式的入口在arch/x86/boot/compressed/head_32.S (32位架構(gòu)). 我們利用bochs的調(diào)試功能, 跟著走一遍:

Shell代碼

pb 0x100000

c

接著grub會運(yùn)行, 選擇我們編譯的kernel, 等實模式代碼運(yùn)行完畢, 就會斷在保護(hù)模式的入口. 反匯編看一下:

Shell代碼

u /16 0x100000

可以看到反匯編代碼和head_32.S一樣. (如果不一樣.. 報告一起UFO目擊事件吧)

在這里, esi還是指向來自與實模式的boot_params. 接下來的任務(wù), 就是拷貝和解壓. 目的地在0x1000000(16MB). 解壓部分是C語言函數(shù).

最后跳轉(zhuǎn)到0x1000000.

3. 內(nèi)核啟動

3.1 平臺相關(guān)的初始化

我們將斷點(diǎn)設(shè)在內(nèi)核的入口點(diǎn) 0x1000000(16MB), 繼續(xù)執(zhí)行, 內(nèi)核會自己解壓, 并停在入口點(diǎn).

執(zhí)行反匯編操作:

Shell代碼

u /16 0x1000000

對應(yīng)的匯編文件在 arch/x86/kernel/head_32.S. 這個是真正的內(nèi)核入口點(diǎn). 在這里初始化頁表, 并啟動分頁機(jī)制. 打開SMP的化, 進(jìn)行必要的CPU初始化. 然后初始化IDT, 檢查CPU類型, 最后跳轉(zhuǎn)到C語言的i386_start_kernel(). 這個函數(shù)位于head32.c. 它保留一些內(nèi)存并做標(biāo)記后, 跳轉(zhuǎn)到平臺無關(guān)的start_kernel(), 位于init/main.c.

提取密碼: yhwv

更多>>軟件截圖

推薦軟件

其他版本下載

精品推薦bochs軟件

bochs軟件
更多 (28個) >>bochs軟件bochs專題合集是c++編寫的開源IA-32(x86)電腦模擬器,有不少用戶喜歡在手機(jī)上運(yùn)行,常用的一些bochs.img鏡像文件有bochsxp精簡版、bochswin7/8/10鏡像、bochswin95/98鏡像,以及在進(jìn)行文件替換時必須使用的bochs模擬

相關(guān)文章

    下載地址

    • bochs安卓linux鏡像 3.0內(nèi)核已驗證版

    查看所有評論>>網(wǎng)友評論

    第 2 樓 中國ITMOP.COM網(wǎng)友 發(fā)表于: 2019/12/21 22:56:19
    好的很 好

    支持( 0 ) 蓋樓(回復(fù))

    第 1 樓 四川巴中網(wǎng)友 發(fā)表于: 2017/12/11 8:45:53
    linux系統(tǒng)3.0鏡像,找了很久了,還是喜歡bochs

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評論

    (您的評論需要經(jīng)過審核才能顯示) 網(wǎng)友粉絲QQ群號:203046401

    查看所有2條評論>>

    更多>>猜你喜歡