bochs linux3.0 镜像是安卓手机bochs运行linux的img文件,3.0版本已经过验证,下面给出手机安装bochs镜像文件的具体操作方法,有需要的用户欢迎来IT猫扑下载~

手机linux镜像安装教程

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 -s 63 -h 16 /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 Sep 21 14: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 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. 从启动到保护模式.

为我们的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 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到内核

先测试一下bochs的调试能力. bochs以调试模式启动后, 会自动停在BIOS中Reset代码, 地址为0xFFFFFFF0. 我们在bochs console里输入:

Shell代码

pb 0x00007c00

在0x7c00设置一个断点, 这正式GRUB2 MBR代码的入口点. GRUB2负责加载自己的core.img, 在core.img里读取hd0, 解析MBR里的分区信息, 并利用ext2模块找到配置文件, 显示主界面,

并加载用户的选择内核文件(vmlinuz-xxx).

loader和内核之间的协议, 在内核源码Document/x86/boot.txt里有详尽的描述.

内核文件包括实模式代码和保护模式代码. loader读取内核文件的头部信息, 从而得知实模式和保护模式代码的大小. 保护模式部分被加载到0x100000(1MB), 实模式启动代码和数据/

堆栈段位置可以重定位在0x10000开始的低端内存的任何位置.

2.3 内核是怎样链成的...

首先编译内核的保护模式代码, 生成源码根目录的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

文件内容会在后面章节细述.

接着vmlinux洗净压缩. 这个工作在 arch/x86/boot/compressed目录进行. 读Makefile可以看到先进行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

因为去掉了调试信息, 文件稍小了一些.

接着根据用户的选择进行压缩, 目前支持gz, bz2, lzma三种方式. 我用默认方式, 生成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查看.

接着工作转移到boot目录, 对上面的vmlinux进行strip操作, 生成二进制格式的vmlinux.bin. 这里面包括全部的包含模式代码, 启动时第一条语句会被加载到0x100000(1MB).

然后编译实模式代码, 包括已无用的引导扇区和setup部分, 生成setup.elf. 然后进行strip, 生成setup.bin.

最后, 利用内核工具"build", 将setup.bin和vmlinux.bin拷贝在一起, 并填上必要的信息如setup部分的大小等, grub等引导程序可以使用的bzImage诞生了.

2.3 内核实模式代码

实模式代码位于arch/x86/boot. 记得Linux2.6.18之前所有的代码都用汇编写成, 2.6.18之后大部分替换成了C.

入口点在header.S文件, 即包含了无用的"引导扇区代码", 也包含了引导程序能识别的头部信息. 第一条可执行语句在偏移0x200的位置(跳过引导扇区), 执行必要的初始化操作, 然后将控制权交给C程序, 即main.c里的main()函数.

有了main()函数, 接下来的过程就像读文档一样方便了心情好 利用实模式的优势, 调用BIOS执行必要的初始化和参数获取, 并将结果存到结构体boot_params.

在main()的最后调用go_to_protected_mode(). 这个函数位于pm.c, 它打开A20, 初始化协处理器(如果有), 关掉所有中断, 设置空的IDT和最基本的GDT, 接着调用protected_mode_jump跳转到保护模式的入口代码0x100000. 这个函数定义在pmjump.S. 注意跳转的时候, boot_params被放在esi寄存器.

2.4 保护模式:自解压过程

内核保护模式的入口在arch/x86/boot/compressed/head_32.S (32位架构). 我们利用bochs的调试功能, 跟着走一遍:

Shell代码

pb 0x100000

c

接着grub会运行, 选择我们编译的kernel, 等实模式代码运行完毕, 就会断在保护模式的入口. 反汇编看一下:

Shell代码

u /16 0x100000

可以看到反汇编代码和head_32.S一样. (如果不一样.. 报告一起UFO目击事件吧)

在这里, esi还是指向来自与实模式的boot_params. 接下来的任务, 就是拷贝和解压. 目的地在0x1000000(16MB). 解压部分是C语言函数.

最后跳转到0x1000000.

3. 内核启动

3.1 平台相关的初始化

我们将断点设在内核的入口点 0x1000000(16MB), 继续执行, 内核会自己解压, 并停在入口点.

执行反汇编操作:

Shell代码

u /16 0x1000000

对应的汇编文件在 arch/x86/kernel/head_32.S. 这个是真正的内核入口点. 在这里初始化页表, 并启动分页机制. 打开SMP的化, 进行必要的CPU初始化. 然后初始化IDT, 检查CPU类型, 最后跳转到C语言的i386_start_kernel(). 这个函数位于head32.c. 它保留一些内存并做标记后, 跳转到平台无关的start_kernel(), 位于init/main.c.

安卓bochs模拟linux_bochs linux镜像下载|相关推荐

  1. 安卓bochs模拟linux_bochs linux下载

          bochs linux镜像官方版是一款在手机bochs模拟器上运行linux系统的软件,bochs linux镜像官方版是一款能够让手机运行LINUX系统的软件,bochs linux镜像 ...

  2. 安卓bochs模拟linux_Bochs Linux安装

    Bochs Linux安装 1.一台安装有Linux的计算机或虚拟机 2.必须安装build-essential软件包 下载软件(源代码):Bochs 2.6.11 编译安装Bochs: 打开终端,输 ...

  3. VMware安装+Linux镜像下载+Linux系统安装全教程(图文详细)

    VMware安装+Linux镜像下载+Linux系统安装全教程 1.VMware16 Pro安装 2.Ubuntu镜像下载 3.CentOS镜像下载 4.VMware配置Ubuntu操作系统(图文详细 ...

  4. Linux镜像下载大全

    Linux镜像下载大全 04 Ubuntu系列 原文来自微信公众号:运维之美 作者:运维之美 导读:linux作为一款开源的操作系统,受到了广大互联网公司的欢迎,我们经常在linux服务器上进行网站的 ...

  5. VMware-workstation Pro 16 详细安装教程以及Linux镜像下载(以CentOS7为例)

    Linux镜像下载(以CentOS7为例) 阿里云镜像下载地址:centos安装包下载_开源镜像站-阿里云 进入网址发现会有很多版本,可以自行选择版本,在这里先以7.9.2009版本为例下载 选择IS ...

  6. 安卓bochs模拟linux_安卓上的windows模拟器Bochs-安卓版pc电脑Windows模拟器(可安装电脑软件)下载V2.5.1最新手机版-西西软件下载...

    安卓版pc电脑Windows模拟器(可安装电脑软件)是一款可以安装电脑端的EXE程序!Bochs是一个x86硬件平台的开源模拟器.它可以模拟各种硬件的配置.Bochs开源项目近日推出了Android平 ...

  7. Linux镜像下载和网络配置配置

    一,镜像下载 网址:CentOS Mirrors List 二,虚拟机的安装(使用的是Centos ) 开始创建虚拟机 使用自定义新建 选择虚拟机硬件兼容性 添加关盘映像,就是前面下载的镜像 操作系统 ...

  8. 安卓bochs模拟linux_云电脑?不需要的,有了这个模拟器,手机轻松变电脑

    gpad.口袋本.壹号本.云电脑.树莓派,理工男对这些总保持着很高的兴趣. 但无论是哪一个,都需要多一个设备或者多花一份钱,有没有办法免费把手机变成电脑来应对日常办公呢? 答案是有的,装一个模拟器就行 ...

  9. 安卓4.4刷linux系统下载,在Linux上安装Android 4.4 KitKat

    Android (x86)项目致力于移植Android系统到X86处理器上,使用户可以更容易的在任何电脑上安装Android.他们通过使用android源码,增加补丁来使Android能够在X86处理 ...

最新文章

  1. WAMP 2.5 无法访问局域网的解决方法
  2. Git push file exceed GitHub's file size
  3. 网络编程套接字(一)
  4. 【论文阅读】基于未知传播模型的信息源检测问题 2017年AAAI国际先进人工智能协会
  5. java标签居住对齐_java期末复习(八)
  6. localhost方式提交作业到spark运行
  7. 集成学习—GBDT原理理解
  8. Kafka 设计与原理详解(二)
  9. 11月安全回顾:你造吗?短信验证码未必可靠
  10. Win10周年升级新增52000个emoji表情
  11. 你以为我确定能解决难题?也是硬着头皮向前冲
  12. 大学计算机学五笔吗,新手学五笔打字
  13. 解决微信屏蔽淘宝链接的方法
  14. noob学算法----冒泡(bubble)排序算法 Java
  15. 湖南师范大学2018年大学生程序设计竞赛新生赛 F 小名的回答
  16. 学会如何学习 - 成为更好的终身学习者
  17. 为何世界足坛历史射手王是C罗?
  18. Linux文件与目录的复制、删除与移动(cp、rm、mv)
  19. 告别2017,拥抱2018!
  20. Android 阿里云 视频直播安全下载踩坑实录

热门文章

  1. c语言isnumber函数的使用方法,无法使用isNumber函数?
  2. android腾讯互联demo,Android集成腾讯小直播Demo,multidex问题
  3. CSDN博客中嵌入背景音乐
  4. 分享技术,享受更美好的人生
  5. Open_cv 2.49+Windows 7(×64)+VS2013安装教程
  6. 中国超级计算机全国产化,我国万万亿次超级计算机CPU有望全部国产化
  7. php html 网页发帖框
  8. 闲云拾财:想做副业,你必须知道的几个正规副业,值得收藏
  9. 魅蓝手机安装APP失败问题
  10. Java中网络编程重点总结