Linux学习记录(二)

记录本人学习的过程和遇到的问题


QEMU安装与Linux内核环境搭建

  • Linux学习记录(二)
  • 一、QEMU安装
    • 1.什么是QEMU
    • 2.QEMU安装
  • 二、Linux内核环境搭建
    • 1.编译内核源码
    • 2.配置内核编译菜单
    • 3 配置busybox
    • 4 制作rootfs
  • 三 、启动QMEU调试
  • 结束

一、QEMU安装

1.什么是QEMU

QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。QEMU有几种虚拟化模式。首先,它可以使用基于内核的虚拟机(KVM)执行x86处理器硬件虚拟化,以几乎比拟硬件本机的速度执行运算任务。其次,它可以通过机器代码的实时转换来模拟其他处理器以用于虚拟机运行不同平台的操作系统。最后,它可以使用实时转换为其他架构运行简单的程序,类似于Linux中的Wine。因为QEMU没有图形用户界面(GUI),而其提供的核心能力又是关键而重要的,因此通常用作更复杂的虚拟化管理器的一部分。
具体的解释可以看看大佬的讲解QEMU架构浅析。

2.QEMU安装

1.使用QEMU源码编译安装

首先安装一堆依赖包,然后下载QEMU源码,接着配置和编译安装 QEMU,但是编译是总是出错,弄了好久也没解决。
安装时还会用到root权限,只需在命令行输入

su

然后输入用户密码就可以了,如果不行参考csdn博文1。
1.自动安装
自动安装,虽然版本不高,但是出现的问题会少一点。打开终端输入:

apt-get install qemu

接着再输入:

apt-get install qemu-system

输入 qemu- 敲击tab键,就能列出可以模拟的环境。

二、Linux内核环境搭建

本章主要参考来源为博文2,感谢分享。

1.编译内核源码

错误提醒,这里先列出过程中遇到的问题:

1.国内源出问题,无法下载,一番排查发现是电脑没网了,吐了。

2.显示错误:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[1]: *** [menuconfig] Error 1
make: *** [menuconfig] Error 2
窗口小了,弹窗没法显示,调大界面或全屏就行了。

3.显示错误:

*** Unable to find the ncurses libraries or the
*** required header files.
*** make menuconfig’ requires the ncurses libraries.
*** Install ncurses (ncurses-devel) and try again.
解决方法,下载所需文件:

sudo apt-get install ncurses-dev

4.报如下错误:
cannot generate ORC metadata …

解决法:依次输入

apt install libelf-dev
apt install libssl-dev

下面开始正式操作步骤:


首先输入以下命令获取源码:

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.14.191.tar.gz

然后解压源码:

tar -xvf linux-4.14.191.tar.gz

解压后进入源码根目录linux-4.14.191:

cd linux-4.14.191

指定编译的架构,依次执行:

export ARCH=x86
make x86_64_defconfig

2.配置内核编译菜单

代码如下(示例):

输入打开菜单命令

make menuconfig

在弹窗界面中找到Processor type and features


在目录找到下面的语句,按N键取消,关闭地址随机化。

[] Randomize the address of the kernel image (KASLR)

下一步启用内核debug,后退到设置主界面,Kernel hacking —> ,点击enter进入子目录,找到Compile-time checks and compiler options —>

点击enter进入子目录之后,按Y键选中以下两个选项

 [*] Compile the kernel with debug info
[*]   Provide GDB scripts for kernel debuggin


保存一下退出,就可以开始编译内核了:

make -j 20

-j 指定并行编译作业数,这个特别慢,运行许久,突然崩溃:

最终没有生成所需的:linux4.14.191/arch/x86_64/boot/bzImage文件。只能调大内存又跑了一遍才成功,关掉电脑其他应用,终于成功了:

3 配置busybox

首先去这里下载一个,例如版本1.32.0:

然后解压:

tar -jxvf busybox-1.32.0.tar.bz2

如果遇到这种错误:

先检查一下是不是缺少bz2解压包,输入命令:

apt install bzip2

如果还是不行,说明压缩包不在主目录,将压缩包复制到主目录,再执行命令,大概率结果还是不行。查了好久也不知道怎么解决,想到了前面用到的wget命令,直接在后面加上下载地址:

wget https://www.busybox.net/downloads/busybox-1.32.0.tar.bz2

下载完解压即可,完美解决了这个简单的难题。
然后进入busybox根目录

cd busybox-1.32.0

进入编译选项菜单

make menuconfig

把busybox配置为静态编译,找到Settings —>,enter进入子目录,找到并选择[*] Build static binary (no shared libs)
版本不同叫法会有一点点不同。

4 制作rootfs

制作rootfs镜像文件,便于把busybox安装到其中
在busybox-1.32.0文件夹下使用dd命令创建文件,并格式化为ext4文件系统。

dd if=/dev/zero of=rootfs.img bs=1M count=10
mkfs.ext4 rootfs.img

创建用于挂载该镜像文件的目录fs,挂载后才能往里面写入busybox。
使用mount命令将rootfs.img挂载到fs目录,编译busybox并写入fs目录中。

szp@r420-PowerEdge-R420:~$ mkdir fs
szp@r420-PowerEdge-R420:~/busybox-1.32.0$ sudo mount -t ext4 -o loop rootfs.img ./fs
szp@r420-PowerEdge-R420:~/busybox-1.32.0$ sudo make install CONFIG_PREFIX=./fs

注意切换文件路径,不然会报错,就算不报错后面跑系统时还是会出错,比如:

出现这种错误,建议从头制作rootfs镜像文件


接下来对写入的busybox进行补充配置,注意切换路径。

szp@r420-PowerEdge-R420:~/busybox-1.32.0/fs$ sudo mkdir proc dev etc home mnt
szp@r420-PowerEdge-R420:~/busybox-1.32.0/fs$ sudo cp -r ../examples/bootfloppy/etc/* etc/
szp@r420-PowerEdge-R420:~/busybox-1.32.0$ sudo chmod -R 777 fs/

制作完成的rootfs目录如下:

最后,卸载rootfs.img

szp@r420-PowerEdge-R420:~/busybox-1.32.0$ sudo umount fs

三 、启动QMEU调试

使用如下命令启动无GUI的qemu:

qemu-system-x86_64 -kernel ./linux-4.14.191/arch/x86/boot/bzImage  -hda ./busybox-1.32.0/rootfs.img  -append "root=/dev/sda console=ttyS0" -nographic

注意:
x86这个目录可能有些版本叫x86_64,就是生成bzImage时的目录,如果没注意到,也可以使用文件命令查一下。

其中参数含义如下:

-kernel # 指定编译好的内核镜像
-hda  # 指定硬盘
-append "root=/dev/sda" 指示根文件系统 console=ttyS0  把QEMU的输入输出定向到当前终端上
-nographic 不使用图形输出窗口
-s 是-gdb tcp::1234缩写,监听1234端口,在GDB中可以通过target remote localhost:1234连接

启动后如下图:

Ctrl+A 松开后按 X 退出qemu。

结束

Linux学习记录(二)QEMU安装与Linux内核环境搭建相关推荐

  1. (转载)Linux 学习记录 一(安装、基本文件操作)

     Linux distributions主要分为两大系统,一种是RPM方式安装软件的系统,包括Red Hat,Fedora,SuSE等都是这类:一种则是使用Debian的dpkg方式安装软件的系统,包 ...

  2. Linux学习(二)--远程登录Linux系统

    文章目录 Linux学习--远程登录Linux系统 一.明白为什么我们需要远程登入Linux系统? 二 .Xshell的介绍 三.Xftp5介绍 Linux学习–远程登录Linux系统 一.明白为什么 ...

  3. Linux学习记录二——文件导航

    文件导航 前言 一.理解文件系统树 二.导航命令 1.pwd(显示当前工作目录) 2.ls(列出目录内容) 3.cd(更改当前工作目录) 三.路径名 绝对路径名 相对路径名 四.有关文件名的一些重要说 ...

  4. Linux 学习记录 二 (文件的打包压缩).

    前言:本文参考<鸟哥的Linux 私房菜>,如有说的不对的地方,还请指正!谢谢! 环境:Centos 6.4 和window不同,在Linux压缩文件需要注意的是,压缩后的文件会把源文件给 ...

  5. 查询Linux充电时间,【充电】Linux学习(二)——常用的linux命令

    昨天的文件的创建.编辑.删除命令写了个教程自己记得也很清楚了,今天找了几个常见命令来学习. 切换当前路径 首先是像windows一样,我们要运行一个文件,得知道如何跳转到一个指定路径下然后再进行相应的 ...

  6. ubuntu安装eclipse java环境变量配置_【Linux学习】Ubuntu下安装JDK以及配置环境,和eclipse的下载...

    OpenJDK 还是 SunJDK? 由于刚开始接触Linux,所以在搜索如何安装jdk的问题上,有了不同的说法,其中有一种安装是直接安装OpenJDK,还有一种方法下载官方网站的SunJDK,那么两 ...

  7. pydev工程linux运行,Linux平台下Python的安装及IDE开发环境搭建

    转自http://blog.csdn.net/guoxiaojie_415/article/details/48108319 1.Python安装 Python有2.X和3.X两个版本,由于2.X的版 ...

  8. Linux平台下Python的安装及IDE开发环境搭建

    1.Python安装 Python有2.X和3.X两个版本,由于2.X的版本较稳定,使用者也较多,本文选择使用Python 2.X版本. 安装步骤: (1) 下载Python安装包:https://w ...

  9. 我的Linux学习记录(蓝桥)————用户及文件权限管理

    我的Linux学习记录(蓝桥)三 Linux 是一个可以实现多用户登录的操作系统,比如"李雷"和"韩梅梅"都可以同时登录同一台主机,他们共享一些主机的资源,但他 ...

最新文章

  1. 原来这才是 Kafka!(多图+深入)
  2. 建立新冠病毒群体免疫屏障——数学建模
  3. [LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列
  4. spring之BeanFactory
  5. centos 服务器装与python34源码安装
  6. LeetCode 1974. 使用特殊打字机键入单词的最少时间
  7. 北京 | Aibee 爱笔智能 招聘 计算机视觉算法实习生
  8. 关于软件定义IT基础设施的未来,深信服是这么思考的
  9. linux安装thrift
  10. 用数组建立二叉树(LeetCode二叉树测试)
  11. 【电力负荷预测】基于matlab EEMD+IWOA+LSSVM电力负荷预测【含Matlab源码 1810期】
  12. 网易常用镜像及使用方式
  13. java编程求原码,补码_java语言基础(原码反码补码)
  14. 数学模型——Logistic回归模型(含Matlab代码)
  15. B 罗马数字 2018浙江理工大学新生赛
  16. 如何提高文献检索能力?
  17. 连续信号、离散信号、模拟信号与数字信号区别
  18. TCPIP vs OSI模型:网络通信的两种参考模型有哪些不同?
  19. 安卓全屏显示创建activity-land资源找不到的问题
  20. python新建文件夹代码_Python文件夹与文件的操作实现代码

热门文章

  1. Cocos Creator JSB [Lv.3]
  2. Warning: ORA-16792: configurable property value is inconsistent with member setting
  3. mysql导出七张表成dtf文件_如何用Java实现把excel表中的数据导入到mysql数据库已有的表中?...
  4. python-opencv-cv2.threshold()二值化函数详解
  5. 湖南阿波罗智行L4级低速自动驾驶小车亮相 湖南自动驾驶“朋友圈”再添新成员
  6. android 绘画开源,Android 开源可缩放平移的绘画板
  7. 【FPGA】:ip核--ibert
  8. 络达AB1562双耳间数据通信的一种方法
  9. 快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用​
  10. CVPR2020 论文开源项目合集含源码