首页 > 系统相关 >qemu搭建和运行起来一个linux内核环境

qemu搭建和运行起来一个linux内核环境

时间:2023-01-07 21:56:48浏览次数:40  
标签:dev 内核 linux path qemu arm rootfs

  1 #!/bin/sh
  2 
  3 # 注意编译的Linux内核版本, 如内核版本过低, 而工具链和主机Ubuntu过旧, 则可能会带来大量编译错误
  4 
  5 # 1.
  6 # 生成vexpress-a9开发板子的config文件, 开启参数进行编译:
  7 #   ARCH ?= arm
  8 #   CROSS_COMPILE ?= arm-linux-gnueabi-
  9 #
 10 cd xxx/linux-4.19.269/
 11 #
 12 # 
 13 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
 14 
 15 
 16 # 2.
 17 # 修改linux kernel的Makefile的两个变量:
 18 #   ARCH ?= arm
 19 #   CROSS_COMPILE ?= arm-linux-gnueabi-
 20 # 然后, 开始编译linux kernel代码, 为了加速编译, 开启多线程编译
 21 #
 22 vim Makefile
 23 #
 24 make zImage -j4
 25 make modules -j4
 26 make dtbs -j4
 27 
 28 
 29 # 3.
 30 # 利用busybox构建最小文件系统
 31 #
 32 # 修改busybox的Makefile的两个变量:
 33 #   ARCH ?= arm
 34 #   CROSS_COMPILE ?= arm-linux-gnueabi-
 35 #
 36 cd xxx/busybox-1.35.0/
 37 #
 38 # 3.1 设置
 39 export ARCH=arm
 40 export CROSS_COMPILE=arm-linux-gnueabi-
 41 make menuconfig
 42 
 43 # 3.2
 44 Busybox Settings  --->
 45     Build Options  --->
 46         [*] Build BusyBox as a static binary (no shared libs)
 47 
 48 # 3.2 开始编译:
 49 #   编译完成后会在busybox目录下生成一个_install的目录, 该目录是编译好的文件系统需要使用的一些命令集合
 50 make defconfig
 51 make
 52 make install
 53 
 54 # 3.3 制作根文件系统
 55 #
 56 cd ..
 57 #
 58 mkdir rootfs
 59 cd rootfs/
 60 #
 61 cp -rf ../busybox-1.35.0/_install/* ./
 62 mkdir lib
 63 cp -p /usr/arm-linux-gnueabi/lib/* ./lib
 64 
 65 # 3.4 创建设备文件, 创建4个串口设备和控制台
 66 mkdir dev
 67 sudo mknod dev/tty1 c 4 1
 68 sudo mknod dev/tty2 c 4 2
 69 sudo mknod dev/tty3 c 4 3
 70 sudo mknod dev/tty4 c 4 4
 71 sudo mknod -m 666 console c 5 1
 72 
 73 # 3.5 制作SD根文件系统镜像, 生成虚拟sd卡并格式化为ext格式
 74 #
 75 cd ..
 76 # 64MB大小
 77 dd if=/dev/zero of=rootfs.ext3 bs=1M count=64
 78 mkfs.ext3 rootfs.ext3
 79 
 80 # 3.6 将虚拟sd卡挂载到/tmpfs, 拷贝rootfs的所有文件到sd, 卸载sd(块设备不能直接读写)
 81 mkdir tmpfs
 82 sudo mount -t ext3 rootfs.ext3 tmpfs/ -o loop
 83 sudo cp -r rootfs/* tmpfs/
 84 sudo umount tmpfs
 85 
 86 
 87 # 4. 使用qemu启动内核
 88 # 上级路径
 89 top_path="/home/miao/AAADevelopProject/qemu_study/"
 90 src_path="linux-4.19.269/arch/arm/boot/"
 91 
 92 # 内核文件与dtb文件的路径
 93 kernel_path=${top_path}${src_path}"zImage"
 94 dtb_path=${top_path}${src_path}"dts/vexpress-v2p-ca9.dtb"
 95 
 96 # 用qemu运行Linux内核, 其中:
 97 #
 98 #   1. -M vexpress-a9:      模拟vexpress-a9单板, 能够使用-M ?參数来获取该qemu版本号支持的全部单板
 99 #   2. -m 512M:             单板执行物理内存512M
100 #   3. -kernel xxx/zImage:  告诉qemu单板执行内核镜像路径
101 #   4. -nographic:          不使用图形化界面, 仅仅使用串口
102 #
103 #   5. -append "root=/dev/mmcblk0 rw console=ttyAMA0": 
104 #       内核启动參数这里告诉内核vexpress单板执行. 其中:
105 #           5.1 root=/dev/mmcblk0:  文件系统的加载Root位置
106 #           5.2 rw:                 以读写的方式打开文件系统,以便能够创建, 修改, 删除文件
107 #           5.3 console=ttyAMA0:    终端
108 #
109 #   6. -sd rootfs.ext3:     从SD卡加载系统
110 #
111 qemu-system-arm \
112     -M vexpress-a9 \
113     -m 512m \
114     -kernel  ${kernel_path} \
115     -dtb ${dtb_path} \
116     -nographic \
117     -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
118     -sd rootfs.ext3

 

标签:dev,内核,linux,path,qemu,arm,rootfs
From: https://www.cnblogs.com/weitao-miao/p/17033624.html

相关文章

  • Linux文本处理三剑客
    grepgrep:GlobalsearchREgularexpressionandPrintouttheline作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行模式:由正则表......
  • Linux笔记03: Linux常用命令_3.4文件和目录共用命令
     3.4目录和文件共用命令 3.4.1rm命令  ●命令名称:rm。  ●英文原意:removefilesordirectories。   ●所在路径:/usr/bin/rm。   ●执行权限:所......
  • linux-shell
    linux权限sudo权限普通用户,可以使用sudocommod,然后输入密码,以root用户的身份执行命令。如何给普通用户授予root用户的权限(使用sudo的时候不用输入密码),可以使用vis......
  • Linux基本操作_01
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx......
  • Linux:使用snap安装Redis
    文档官网​​https://snapcraft.io/​​红帽Linux平台下安装教程​​https://snapcraft.io/docs/installing-snap-on-red-hat​​搜索应用​​https://snapcraft.io/se......
  • linux安装docker
    https://blog.csdn.net/Pratik_shiku/article/details/124309852?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167308260416782427492732%2522%252C%2522scm......
  • 微内核和宏内核的区别
    微内核:提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口与,如DOS、WorkplaceOS、WorkplaceUnix等。IBM......
  • linux磁盘分区之后,lsblk没有显示
     可以看出 fdisk创建一个sda4的分区 并保存退出,但是不管是使用fdisk-l,还是lsblk都无法显示出来,那么导致问题的原因,主要是因为新创建了分区之后,系统没有......
  • Linux 文件基本属性
    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定......
  • 内核hung检测机制(3)
    实践编写ko在内核线程上下文中触发D状态死锁代码hungtask.c#include<linux/init.h>#include<linux/sched.h>//currentmacro#include<linux/module.h>voidhu......