设为首页 加入收藏

TOP

qemu搭建和运行起来一个linux内核环境(一)
2023-07-23 13:30:20 】 浏览:58
Tags:qemu linux

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

参考了博客:

https://www.cnblogs.com/edver/p/6001786.html

https://blog.csdn.net/ReCclay/article/details/102319392

https://www.cnblogs.com/bigsissy/p/11134802.html

https://www.cnblogs.com/zml-forever/p/6277092.html

 1. 编译Linux Kernel镜像

 1 #!/bin/sh
 2  
 3  
 4 # 预期工具准备:
 5 # Ubuntu 22.04 安装qemu全套
 6 sudo apt install qemu
 7 sudo apt install qemu-system
 8 sudo apt install qemu-user
 9 sudo apt install qemu-efi
10 sudo apt install qemu-web-desktop
11 sudo apt install qemu-guest-agent
12 sudo apt install qemu-block-extra
13 sudo apt install qemu-utils
14 sudo apt install qemubuilder
15 # gcc-arm-linux-gnueabi工具
16 sudo apt install gcc-arm-linux-gnueabi
17 # 后续的编译过程还需要的工具
18 sudo apt install u-boot-tools
19 sudo apt install flex
20 sudo apt install bison
21 sudo apt install libncurses5-dev
22 sudo apt install libncurses-dev
23 # 开发时常用工具
24 sudo apt install cmake
25 sudo apt install git
26 sudo apt install vim
27 sudo apt install build-essential
28  
29  
30  
31 # 注意编译的Linux内核版本, 如内核版本过低, 而工具链和主机Ubuntu过旧, 则可能会带来大量编译错误
32  
33  
34  
35 # 1.
36 # 修改linux kernel的Makefile的两个变量为:
37 #   ARCH ?= arm
38 #   CROSS_COMPILE ?= arm-linux-gnueabi-
39 #
40 cd linux-4.19.269/
41 vim Makefile
42  
43 # 编译配置
44 make vexpress_defconfig
45 make menuconfig     # 这个只要没有报错, 直接推出出现的窗口即可
46  
47  
48  
49 # 2.
50 # 编译linux kernel代码, 为了加速编译, 开启多线程编译
51 #
52 make zImage -j 4
53 make modules -j 4
54 make dtbs -j 4
55 make LOADADDR=0x60003000 uImage  -j 4
56  
57  
58  
59 # 3.
60 # 把镜像文件zImage和uImage, 设备树文件dtbs, 复制到工程目录testboot里, 进行测试一下
61 cd ..
62 mkdir testboot
63 cp arch/arm/boot/zImage ../testboot/
64 cp arch/arm/boot/uImage ../testboot/
65 cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb ../testboot/
66  
67  
68  
69 # 4.
70 # 测试
71 sh testboot/test_boot.sh
72 # test_boot.sh内容:
73 #       #!/bin/sh
74 #       # 测试uboot
75 #       # 上级路径
76 #       top_path="/home/thinks2/ProgramProject/qemu_study/"
77 #       src_path="linux-4.14.302/arch/arm/boot/"
78 #       # 内核文件与dtb文件的路径
79 #       kernel_path=${top_path}${src_path}"zImage"
80 #       dtb_path=${top_path}${src_path}"dts/vexpress-v2p-ca9.dtb"
81 #       qemu-system-arm \
82 #           -M vexpress-a9 \
83 #           -m 512M \
84 #           -kernel ${kernel_path} \
85 #           -dtb ${dtb_path} \
86 #           -append "console=ttyAMA0" \
87 #           -nographic \
88  

 

2.  使用busybox制作最小文件系统

#!/bin/sh
 
 
# 1.
# 修改busybox的Makefile的两个变量为:
#   ARCH ?= arm
#   CROSS_COMPILE ?= arm-linux-gnueabi-
#
cd busybox-1.35.0/
vim Makefile
 
# 设置编译为静态库:
# Settings  --->
#     Build Options  --->
#         [*] Build as a static binary (no shared libs)
make menuconfig
 
 
 
# 2.
# 编译:
#   编译完成后会在busybox目录下生成一个_install的目录, 
#   该目录是编译好的文件系统需要使用的一些命令集合
make defconfig
make -j 4
make install
 
 
 
# 3.
# 新建一个根文件系统的文件夹
cd ..
mkdir rootfs
cd rootfs/
 
# 拷贝_install目录的命令集到rootfs中
cp -rf ../busybox-1.35.0/_install/* ./
 
# 在rootfs中, 新建lib目录,从工具链中拷贝arm执行库到该lib中
mkdir lib
cp -p /usr/arm-linux-gnueabi/lib/* lib/
 
 
 
# 4.
# 创建字符设备: 设备文件, 跟用户和底层进行交互的接口, 这些接口以文件节点的形式存在, 读写文件, 直接读写对应的结点即可
 
# 在rootfs中, 创建dev文件夹, 存放各种目录结点
mkdir dev
cd dev
 
# 创建4个串口结点
#
# 命令和其参数的意义:
#     mknod:  创建结点
#     -m 666: 设置权限为666
#     ttyX:    表示串口
#     c:      表示字符设备
#     4:      表示主设备号
#     1:      表示次设备号
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4
 
# 创建1个工作台结点
sudo mknod -m 666 console c 5 1
 
# 创建null结点
sudo mknod -m 666 null c 1 3
 
 
 
# 5.
# 制作SD根文件系统镜像: 根文件系统放到SD卡里, 内核启动后, 从SD卡挂载根文件系统
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇OpenOCD + DAP-LINK调试ESP32的失.. 下一篇蓝牙模块测试那些事之从机测试

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目