准备工作

(1) linux 内核源码, 从github上获取

git clone https://github.com/torvalds/linux

make kernelversion

(2) 交叉编译工具,从linaro官网(www.linaro.org)上获取

解压后设置环境变量即可

xz -d gcc-linaro-xxx.tar.xz

tar -xvf gcc-linaro-xxx.tar

export PATH=$PATH:/yourpath

(3) 安装QEMU ,支持arm64需要源码安装https://www.qemu.org/

yum install gtk2-devel

./configure –target-list=aarch64-softmmu

make && make install

安装完成后,有qemu-system-aarch64命令即可

内核代码编译

进入下载好的内核源码目录

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

make defconfig

make menuconfig

make -j4

制作文件系统

(1)下载安装busybox : https://busybox.net/

make menuconfig

settings->build options->build static library(enable)

make

make install

(2) 制作根文件系统

mkdir rootfs

cp busybox/_install/* rootfs/ -rf

cd rootfs/_install

mkdir dev etc mnt

mkdir -p etc/init.d

在_install/etc/init.d/目录下新建一个文件rcS:

mkdir -p /proc

mkdir -p /tmp

mkdir -p /sys

mkdir -p /mnt

/bin/mount -a

mkdir -p /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

在_inistall/etc/ 目录下新建一个fstab文件:

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

debugfs /sys/kernel/debug debugfs defaults 0 0

在_inistall/etc/ 目录下新建一个inittab文件:

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

cd init.d

在_install/dev目录下新建节点:

mknod console c 5 1

mknod null c 1 3

返回上层目录,压缩

cd ../..

find . | cpio -o -H newc > rootfs.cpio

gzip -c rootfs.cpio > rootfs.cpio.gz

QEMU启动ARM64虚拟机

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel linux/arch/arm64/boot/Image -initrd rootfs.cpio.gz -append "rdinit=/linuxrc console=ttyAMA0"

启动成功后,查看内核版本

/ # uname -r

4.20.0-rc4-00007-gef78e5e

关闭虚拟机

另起一个超级终端,输入

killall -9 qemu-system-aarch64

参考文章

《奔跑吧linux内核》第六章

qemu搭建arm运行linux内核,centos使用qemu搭建ARM64运行环境相关推荐

  1. (编译适用于ARM的linux内核并进行QEMU仿真)Compile Linux kernel 3.2 for ARM and emulate with QEMU

    译者序 作为第一篇翻译文档,一方面对于翻译经验不足.措辞不当,另一方面对于linux我也是初学者,很多东西尚处于待学阶段,而翻译此文的动机就是我要学习如何跨平台进行文件系统的编译,所以翻译的结果肯定有 ...

  2. 搭建《深入Linux内核架构》的Linux环境

    搭建<深入Linux内核架构>的Linux环境 阅读目录(Content) 作者 软件 概述 正文 一.安装GCC 二.编译Linux内核 三.制作跟文件系统 四.运行qemu 五.启动l ...

  3. [转载]基于ARM的linux内核裁剪与移植

    基于ARM的linux内核裁剪与移植 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=185020  wutaimin( 楼主 ) 2 ...

  4. [arm驱动]linux内核时钟

    <[arm驱动]linux内核时钟>涉及内核驱动函数四个,内核结构体一个,分析了内核驱动函数一个:可参考的相关应用程序模板或内核驱动模板一个,可参考的相关应用程序模板或内核驱动一个 一.内 ...

  5. 【学习笔记】编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译

    本文主要介绍Linxu2.6的内核配置系统. 如果你浏览一下源代码目录,就可以发现源码目录及其子目录中有很多的KConfig文件和Makefile文件.这些文件什么作用呢?正是这些文件组成了Linux ...

  6. KConfig、Makefile详解以及ARM平台Linux内核的编译

    本文主要介绍Linxu2.6的内核配置系统. 如果你浏览一下源代码目录,就可以发现源码目录及其子目录中有很多的KConfig文件和Makefile文件.这些文件什么作用呢?正是这些文件组成了Linux ...

  7. 从入门到精通ARM(4412)-Linux内核驱动编程【下】-李志勇-专题视频课程

    从入门到精通ARM(4412)-Linux内核驱动编程[下]-247人已学习 课程介绍         嵌入式绝对是当前IT领域最炙手可热的话题了.其主要应用领域涵盖与人类相关的各行各业: * 消费电 ...

  8. 编译arm linux内核,编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译...

    转载自:http://blog.csdn.net/newthinker_wei/article/details/8022696 本文主要介绍Linxu2.6的内核配置系统. 如果你浏览一下源代码目录, ...

  9. [arm驱动]linux内核中断编程

    第一部分获取中断(开启硬件中断) 一.中断的申请注销: 1)中断的申请 1 2 int request_irq(unsigned int irq, irq_handler_t handler,     ...

最新文章

  1. serv-u的语言界面的切换(汉英切换)
  2. Winform根据控件名获取指定控件
  3. 《大话数据结构》第1章 数据结构绪论 1.1 开场白
  4. eui自带字体是什么_阿里巴巴居然出品了两款字体,免费可商用,网友:太良心了...
  5. WCF六大步的前三步
  6. Interpreter(解释器)--类行为型模式
  7. C#使用集合组织相关数据
  8. SysinternalsSuite工具
  9. Pseudo-document-based Topic Model(基于伪文档的主题模型)的理解以及源码解读
  10. 解决 spring mvc 3.0 结合 hibernate3.2 使用tx:annotation-driven声明式事务无法提交的问题(转载)...
  11. c大小写转换函数_字符处理——大小写转换编程思路扩展
  12. openstack中彻底删除计算节点的操作记录
  13. MySQL8.0数据库配置注意事项
  14. 毕业设计 嵌入式电子时钟设计与实现
  15. html5 canvas 虚线,HTML5 canvas画带箭头的虚线
  16. 阿尔法狗怎么用机器学习做决策:马尔科夫链减少搜索空间说起(附PDF公号发“马链搜索”下载)
  17. “胡焕庸”线 - 中国人口分布地理界线
  18. 安卓前端车牌识别技术
  19. sklearn线性回归,支持向量机SVR回归,随机森林回归,神经网络回归参数解释及示例
  20. SQL注入回顾篇(四)

热门文章

  1. 牛客16429 组合数问题(二维前缀和、杨辉三角)
  2. 如何看打印机的缓存区域_松下打印机好吗 松下打印机卡纸如何解决【详解】...
  3. java简单小项目_Java简易抽奖系统小项目
  4. ansible执行mysql命令,Ansible常用命令(ad-hoc 命令)
  5. 为什么在python中整数的值没有限制_python-为什么math.log接受大整数值?
  6. python内部函数和比外部函数快_Python:如何允许“内部函数”更改多个“外部函数”中的非局部变量...
  7. pytorch的nn.CrossEntropyLoss()函数使用方法
  8. 实数序列频谱的共轭对称性(DFT与IDFT仿真实现)
  9. TensorFlow的基本介绍及Hello,world
  10. 硬件安全 (1) —— SHA-1算法在FPGA上的实现