导航:首页 > 操作系统 > linuxqemu调试内核

linuxqemu调试内核

发布时间:2023-09-05 22:38:45

⑴ 如何在linux上使用qemu执行镜像文件

1. 编译kernel
mkdir -p ~/misc/qemu
cd ~/misc/qemu
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.3.7.tar.bz2
tar xvfj linux-3.3.7.tar.bz2
cd linux-3.3.7
make defconfig
make
cp arch/x86/boot/bzImage ..
2. 制作根文件系统
cd ~/misc/qemu
dd if=/dev/zero of=rootfs.img bs=1M count=10
mkfs.ext3 rootfs.img
mkdir rootfs
sudo mount -t ext3 -o loop rootfs.img rootfs
cd rootfs
mkdir dev proc sys
3. 编译busybox
cd ~/misc/qemu
wget http://busybox.net/downloads/busybox-1.20.1.tar.bz2
tar xvfj busybox-1.20.1.tar.bz2
cd busybox-1.20.1
make defconfig
make menuconfig
(将busybox编译为静态连接方式)
- Busybox Settings
- Build options
- Build Busybox as a static binary
make
make install CONFIG_PREFIX=~/misc/qemu/rootfs
cd ~/misc/qemu
sudo umount rootfs
4. 运行
图形界面下:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash"
命令行界面:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash" -curses
通过vnc运行:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc" -curses -vnc 192.168.1.237:1
上面192.168.1.237为本机的一个IP地址。在另外一台机器上运行vnc client,填入192.168.1.237:1,即可通过vnc连接到linux系统
改进1:mount /proc和/sys,以及创建/dev/下的设备节点

启动后,/dev下无设备文件,而且/proc, /sys都没有mount上,导致有些命令无法运行(如top)。为了解决这个问题,可以修改启动脚本/linuxrc为:
#!/bin/ash

/bin/mount -t proc proc /proc
/bin/mount -t sysfs sysfs /sys
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

/bin/ash

然后chmod a+x /linuxrc,umount后再执行
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc"

有关mdev的介绍和使用可以参考:
http://hi..com/kebey2004/blog/item/3692f6079b8e9dda7a894721.html

改进2:编一个最小kernel
make allnoconfig
make menuconfig
选择:
- Executable file formats / Emulations
- 选择Kernel support for ELF binaries
- Device Drivers
- 选择ATA/ATAPI/MFM/RLL support
- 选择generic/default IDE chipset support
- File systems
- 选择Ext3 journalling file system support
make
qemu -kernel linux-3.3.7/arch/x86/boot/bzImage -hda rootfs.img -append "root=/dev/hda init=/linuxrc" -curses

⑵ 关于android和x86的几点疑问。 android基因linux内核,系统除了内核还有其他什么

android 除了基于 Linux 内核,他的上层运行环境和相关函数库,命令程序都是自己的。
其实 android 就是一个基于 Linux 内核的 JAVA 虚拟机环境。
实际 Android 程序都是基于 JAVA 虚拟机跑的解释型语言程序。

但解释型语言程序性能肯定不如本地二进制程序。所以 Android 还有一种 NDK 程序。
也就是 Android 里面有部分本地二进制程序的内容。这样本地程序方式运行,效率可以最高而且可以根据 CPU 功能做优化(比如 neon )。

指令集不同,但他的 JAVA 虚拟机是解释型语言,基于 JAVA 语言的程序是可以无差别运行的。只要能保证 Android 上面的 JAVA 虚拟机可以在 x86 上面成功运行就行了。

但 Android 有个另外的问题,就是 JAVA 虚拟机是针对 ARM 做性能优化的,在 X86 上面,这种性能优化都没了,需要另外在 x86 上面重新优化。但听说 Android 的 JAVA 虚拟机的语言里面,也有针对 ARM 硬件进行的修改设计,所以这种针对 ARM 性能优化的 JAVA 程序,在 X86 的系统上面性能也有损失。

所以 Android 出来很久后,在 x86 上面的运行效率都一直不怎么样。

而且现在还有 NDK 程序的出现, ARM 的二进制程序在 x86 上面是不能运行的。这些程序都不能运行。
不过 x86 有个优势就是自己的性能很强,而且模拟器技术现在也很强了。在 x86 上面,可以借助虚拟机(qemu 的 user mode 就值得看看)来运行 ARM 的二进制程序。
不过虚拟机其实还是有性能损失的。

所以未来,Android 的跨 CPU 架构依然还是问题。纯 JAVA 程序好说,用了 NDK 的程序就是问题了。

不过 llvm 这个编译器又给了另外一条路,既可以虚拟机方式运行,又可以编译成本地程序而成为二进制程序来优化性能运行。或许 Android 会考虑使用这种方法或者类似的让 NDK 程序可以跨 CPU 实现。代价是 Android 要自带一个编译器,体积也不小的。

MAC OS X 还有一种方法。在 MAC 放弃 IBM 的 Power CPU 而改用 Intel 的 CPU 后,他的程序都是里面附带两套二进制程序,老的 G4 CPU 的机器,就用程序里面的 power 指令集的程序代码。新的 Intel CPU 的机器,就自动用里面的 x86 指令来运行程序。从而实现完美的双指令集运行。不过代价是这样的程序都是两套指令集的内容,体积翻倍。

目前来说,似乎用了 NDK 的程序还都不能用的。不排除现在某些 x86 的手机,使用了虚拟机技术来实现运行 NDK 程序。现在 Linux 下面的 qemu 的 usermode 配合内核的 binfmt_misc 功能,可以让系统自动识别某个架构的程序,去调用 qemu 来执行。

⑶ qemu怎样为选择arm linux内核镜像选择运行arm平台

下载Linux内核

下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发。另一种是直接到内核社区下载对应版本的源码包。我采用第一种方法,但后面发现主线上3.18版本和后面版本的代码,使用这种搭建方法运行不起来。目前未查明问题的根因。如果读者想快速搭建成功,建议选用3.16版本的内核进行搭建。

安装arm的交叉编译工具链

想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果你订制一个交叉编译工具链,建议你使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:

sudoapt-getinstallgcc-arm-linux-gnueabi

编译Linux内核

生成vexpress开发板子的config文件:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

编译:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=arm

生成的内核镱像位于arch/arm/boot/zImage,后续qemu启动时需要使用该镜像。

下载和安装qemu模拟器

其实Ubuntu12.04有qemu的安装包,但由于版本较低,对vexpress开发板支持不友好,建议下载高版本的qemu:

wget

配置qemu前,需要安装几个软件包:

sudoapt-getinstallzlib1g-dev

sudoapt-getinstalllibglib2.0-0

sudoapt-getinstalllibglib2.0-dev

配置qemu,支持模拟arm架构下的所有单板:

./configure--target-list=arm-softmmu--audio-drv-list=

编译和安装:

make

makeinstall

测试qemu和内核能否运行成功

qemu已经安装好了,内核也编译成功了,到这里最好是测试一下,编译出来的内核是否OK,或者qemu对vexpress单板支持是否够友好。

运行命令很简单:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage-nographic-append"console=ttyAMA0"

如果看到内核启动过程中的打印,说明前的搭建是成功的。

这里简单介绍下qemu命令的参数:

-Mvexpress-a9模拟vexpress-a9单板,你可以使用-M?参数来获取该qemu版本支持的所有单板

-m512M单板运行物理内存512M

-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage告诉qemu单板运行内核镜像路径

-nographic不使用图形化界面,只使用串口

-append"console=ttyAMA0"内核启动参数,这里告诉内核vexpress单板运行,串口设备是哪个tty。

注意:

我每次搭建,都忘了内核启动参数中的console=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也是不相同的。那vexpress单板的tty设备名是哪个呢?其实这个值可以从生成的.config文件CONFIG_CONSOLE宏找到。

如果搭建其它单板,需要注意内核启动参数的console=参数值,同样地,可从生成的.config文件中找到。

制作根文件系统

到这里是否大功告成了呢?其实在上面的测试中,你会发现内核报panic,因为内核找不到根文件系统,无法启init进程。

根文件系统要考虑两个方面:

1.根文件系统的内容

如果你看过《LinuxFromScratch》,相信你会对这一步产生恐惧感,但如果一直从事嵌入式开发,就可以放下心来。根文件系统就是简单得不能再简单的几个命令集和态动态而已。为什么LinuxFromScratch会有那么复杂,是因为它要制作出一个Linux发生版。但在嵌入式领域,几乎所有的东西,都是mini版本,根文件系统也不例外。

本文制本的根文件系统=busybox(包含基础的Linux命令)+运行库+几个字符设备

2.根文件系统放在哪里

其实依赖于每个开发板支持的存储设备,可以放到NorFlash上,也可以放到SD卡,甚至外部磁盘上。最关键的一点是你要清楚知道开发板有什么存储设备。

本文直接使用SD卡做为存储空间,文件格式为ext3格式

下载、编译和安装busybox

wget

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstallCROSS_COMPILE=arm-linux-gnueabi-

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。

形成根目录结构

先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录

1.创建rootfs目录(根目录),根文件系统内的文件全部放到这里

sudomkdirrootfs

2.拷贝busybox命令到根目录下

sudocpbusybox-1.20.2/_install/*-rrootfs/

3.从工具链中拷贝运行库到lib目录下

sudocp-P/usr/arm-linux-gnueabi/lib/*rootfs/lib/

4.创建4个tty端终设备

sudomknodrootfs/dev/tty1c41

sudomknodrootfs/dev/tty2c42

sudomknodrootfs/dev/tty3c43

sudomknodrootfs/dev/tty4c44

制作根文件系统镜像

1.生成32M大小的镜像

ddif=/dev/zeroof=a9rootfs.ext3bs=1Mcount=32

2.格式化成ext3文件系统

mkfs.ext3a9rootfs.ext3

3.将文件拷贝到镜像中

sudomkdirtmpfs

sudomount-text3a9rootfs.ext3tmpfs/-oloop

cp-rrootfs/*tmpfs/

sudoumounttmpfs

系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/qemu/linux/arch/arm/boot/zImage-nographic-append"root=/dev/mmcblk0console=ttyAMA0"-sda9rootfs.ext3

从内核启动打印,到命令行提示符出现,激动人心的时刻出现了……

写在后面的话

通过上面的步骤,搭建出来一个最小的qemu+arm开发环境,你可以上面的基础上修改内核,或者增加一些测试程序在单板上运行,甚至使用单板的flash设备。

在此,你可以做纯arm架构的内核开发,或者与架构无关的内核开发,也可以做单板相关的驱动开发。

⑷ linux 内核 qemu 相关

缺少了设备树文件(.dtb)和文件系统。
另外,“--append”选项用了两个短横杠。

⑸ 如何修改linux内核源码并调试

内核源码调试的一款工具QEMU. 仔细研究一下,慢慢学吧。

⑹ linux打开虚拟网络编辑器

linux系统模拟器网络配置步骤
m0_73943160
码龄88天
1、打开linux虚拟器,在虚拟机左上角找到虚拟机
2、点击虚拟机,在下方找到设置后点开3、在点开的设置,在设备中找到网络适配器,适配网络选择自定义,并在自定义里选择VMnet0,选择后点击确定。
4、在编辑里打开虚拟网络编辑器。

5、打开后选择右下角的 更改设置。
6、打开后选择VMnet0,后选择桥接模式,确定。
7、点击关机键右边的小箭头,打开后选择有线连接,选择有线设置。
8、打开后点击网络进入,点击有线连接下的设置。
9、在window系统下按下win+r,打开运行框,输入cmd,打开命令框
10、在命令框输入ipconfig按下enter,,将子网掩码和默认网关记下。
11、再进入虚拟机,在打开的有限连接下的设置内选择IPV4,手动,并将win下的子网掩码和网关写在地址栏的相应位置,地址栏的地址写上网关的前三个和一个随机的不大于255的数。且随机值不能和win下的地址一样。
12、地址设置好后将自动关闭。
Linux连接终端模拟器,为Linux运维推荐9款实用的Linux终端模拟器
Linux终端模拟器是所有人(包括新手或高级用户)的最佳实用工具之一。它允许您使用Linux系统shell并与之交互。终端模拟器使您能够访问内核,并释放系统的真正力量。最好的Linux终端模拟器尽管大多数用户对Linux发行版的默认终端仿真器感到满意,...
linux模拟器 qemu,Qemu虚拟机模拟器_weixin_39777875的博客
QEMU是一个纯软件实现的通用模拟器和虚拟机,它有三种模式,几乎可以模拟任何硬件设备,Full-system emulation:可在任何支持的硬件架构上运行任何操作系统,User-mode emulation:运行另一个Linux/BSD程序,Virtualization:接近本机性能运行 KVM和X...
最新发布 linux服务器更改网络配置
linux服务器更改网络配置,是为让它的ip地址不进行变化,方面我们的后继操作。我们这里使用的是vmware+centos7来进行演示。
继续访问

Linux系统 虚拟机 网络设置
不同的虚拟机之间 1、虚拟机菜单栏处,“编辑–>虚拟网络编辑器” 2、需要配置的是vmNET8,点“更改设置----->确定” 3、先选中vmNET8,然后将子网IP 修改成 192.168.2.0,打开DHCP设置 在DHCP设置中可以设置起始和结尾的IP地址,按照需求设置,每一个地址可以对应一台虚拟机。 打开NAT设置,设置网关192.168.2.1“”,通过同一个网关可以连...
继续访问
linux模拟器 qemu,Zynq Linux系统软件模拟器Xilinx/QEMU_遗忘在角落的...
Xilinx基于QEMU系统模拟器Xilinx/QEMU可用于模拟运行Zynq Linux的运行与调试。其使用可以是: (1)利用GitHub上的Xilinx/QEMU源代码进行编译得到QEMU软件模拟器 (2)利用Xilinx提供的PetaLinux工具包,PetaLinux工具包已经包括了QEMU emulator. ...
linux终端模拟器有哪些,Linux上有哪些好的终端模拟器_谷臻故事工场的博...
一个好的终端模拟器是一个选择Linux而不是Windows或Mac的充分理由,任何Linux的资深用户都会同意这点。通过使用shell,用户可以完成在图形环境下不可能或者太重复的任务。但是终端模拟器的选择是非常重要的,因为它会成为你使用最多的程序。我...
Linux网络
在这里总结几个有关网络配置的实用方法 1、查看虚拟网络编辑器 ①查看虚拟网络 ②修改IP地址 ③查看网关 ④查看windows中的网络配置 使用 ipconfig 指令 ⑤查看Linux中的网络配置 使用 ifconfig 指令 最后使用 ping + ip地址 查看主机之间的链接 2、Linux网络环境的配置 ①自动获取 实现开机自动连接网络 缺点:每次自动获取的IP地址可能不...
继续访问
Linux基础入门到精通之虚拟机网络设置说明
这篇主要总结一下虚拟机网络配置中的区别。我们打开VMware,选中虚拟机,点击网络适配器。在弹出的页面当中,可以看到红框中有三种网络链接方式。下面开始介绍这三种模式的区别。
继续访问

Linux 在线模拟器_jettle wang的博客_linux在线模拟器
最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机。所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下命令的使用即可。在google中用英文关键词一...
linux模拟器使用教程,Ubuntu多机种游戏模拟器Mednafen教程_simmmm...
Linux强大的游戏模拟器,模拟的效果以及CPU的占用都非常低,主要是用来玩GBA和FC的游戏,玩GBA游戏比Linux版VBA强的不是一点半点,Linux版VBA可以说就是一个半成品,不说功能方面,居然巨占CPU,而且占资源不说了,还不是60帧的完美平滑模拟...
Linux中虚拟网络配置详解(图示说明)
目录   1、知识引入   2、桥接模式(vmnet0给桥接模式提供网络支持)   3、NAT模式(vmnet8给NAT模式提供网络支持)   4、仅主机模式(vmnet1给仅主机模式模式提供网络支持的)   5、NAT模式的网络配置步骤 1、知识引入 虚拟机连接宿主机(物理机)、连接Internet,总共有以下3中配置方式: (a) 桥接模式; (b) NAT模式; (c) 仅主机模式 ...
继续访问

Linux(5)- 网络配置
Linux 学习-网络配置 一、Linux 网络配置原理图(含虚拟机)二、查看网络 IP 和网关2.1 查看虚拟网络编辑器2.2 修改 ip 地址(修改虚拟网络的 ip)2.3 查看网关2.4 查看 windows 环境的中 VMnet8 网络配置 (ipconfig 指令)三、ping 测试主机之间网络连通3.1基本语法3.2 应用实例四、linux 网络环境配置4.1第一种方法(自动获取)4.2第二种方法(指定固定的 ip) 一、Linux 网络配置原理图(含虚拟机) 目前我们的网络配..
继续访问
Linux下最强安卓模拟器,流畅又丝滑(附详细安装教程)
第二个月,钉钉终于有能看直播的Linux安装包了,但是QQ和微信都都没有Linux版本(别跟我提反人类的QQLinux版!),就造成了很多麻烦,虚拟机安装安卓还是费电,从那时起,我就在寻找一个Linux的安卓模拟器,今天终于找到了,写个博客记录一下...
Linux下最强安卓模拟器,流畅又丝滑(附详细安装教程)
Linux下最强安卓模拟器!各项体验堪称完美,安装简便,不会卡顿!
继续访问

虚拟机Linux服务器网络设置
虚拟机Linux服务器网络设置
继续访问
热门推荐 设置 VMware 虚拟网络编辑器
1、点击虚拟网络编辑器 VMware -> 编辑 -> 虚拟网络编辑器 2、设置 VMnet 8 网段 3、设置网关 4、点击虚拟机设置 5、虚拟机网络设置为NAT模式
继续访问

Linux虚拟机网络配置
一、打开vmware点击编辑,选择虚拟网络编辑器 二、在电脑的设置中进入更改适配器选项选择VMware Network Adapter VMnet8,点击设置,网关必须和第一步的相同,ip地址前三位和网关相同,最后一位在1到255之间不能和网关相同 三、打开虚拟机,对虚拟机进行设置 进入此目录 将框类的添加到文件中,最后重启网络服务:service network restart 若能ping通网络即可 ...
继续访问
Linux虚拟机连接网络,CentOS的联网技巧
Linux虚拟机连接网络 大前提:电脑联网为WIFI 小提示:电脑有线网的虚拟机联网方式 1.打开Linux虚拟机,在菜单栏虚拟机->虚拟机设置->网络适配器,设置网络连接,NAT 模式 2.打开宿主机的设置->状态->更改适配器选项 3.按照以下要求更改 4.注意VMnet8的修改 5.在Linux虚拟机中,菜单栏编辑->虚拟网络编辑器 6.进入虚拟机修改(首先打开控制台) 7.改好ens32或ens33文件后,重启用dhclient配置连
继续访问

⑺ 使用buildroot编译arm架构的linux内核,使其支持usb摄像头,并使用qemu虚拟运行

#没有吧ext* 和 VFS编进去吧

cd/usr/src/linux
makemenuconfig
#选择ext4和VFS,在FileSystem里,很好找
make;makemole_install;makeinstall
阅读全文

与linuxqemu调试内核相关的资料

热点内容
华为云服务器登录密码和账号 浏览:154
中世纪java程序员 浏览:786
什么开发引擎使用python 浏览:176
sh脚本运行命令 浏览:316
广联达加密锁怎么看到期 浏览:172
cad轨迹命令 浏览:979
同事刷到女程序员自媒体视频 浏览:571
校验算法的缺点是什么 浏览:717
PHP商品分类功能实现 浏览:330
php取字符串中间 浏览:432
程序员经常用工具 浏览:837
降服主力指标源码主图 浏览:502
python实用库 浏览:693
电脑默认7个文件夹 浏览:13
新唐单片机安装c51后编译错误 浏览:532
红包源码引流神器 浏览:235
学生初中毕业撕书解压 浏览:748
命令方块刷铜点教学 浏览:691
php邮件订阅系统 浏览:999
柱梁底加密箍间距 浏览:31