当前位置: 首页 > news >正文

ubuntu 环境下soc 使用qemu

构建vexpress-a9的linux内核

安装依赖的软件

sudo apt install u-boot-tools
sudo apt install gcc-arm-linux-gnueabi
sudo apt install g++-arm-linux-gnueabi
sudo apt install gcc

#编译内核

下载 linux-5.10.14

linux-5.10.148.tar.gz

配置

sudo tar -xvf linux-5.10.148.tar.gz
cd linux-5.10.148.tar.gz
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig -j4
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
/**********************/	得到编译文件:
arch/arm/boot/zImage
arch/arm/boot/dts/vexpress-v2p-ca9.dtb

qemu 启动linux内核

cd linux-5.10.148.tar.gz
sudo  qemu-system-arm -M vexpress-a9 -m 128M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
# 这里注意文件的路径,是在linux-5.10.148源码目录执行的。
# -M vexpress-a9 模拟vexpress-a9单板,你能够使用-M ?參数来获取该qemu版本号支持的全部单板
# -m 128M 单板执行物理内存128M
# -kernel arch/arm/boot/zImage 告诉qemu单板执行内核镜像路径
# -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb  告诉qemu单板的设备树(必须加入)
# -nographic 不使用图形化界面,仅仅使用串口
# -append "console=ttyAMA0" 内核启动參数。这里告诉内核vexpress单板执行。串口设备是哪个tty。

如何退出qemu

ctrl + a 放开后,再按下x

构建busybox

下载 busybox-1.35.0

busybox-1.35.0

配置 编译 安装 busybox

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig #默认配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig # 配置菜单
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-  # 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install # 安装 busybox/_install

制作rootfs

cd rootfs
sudo cp -rfd ../busybox-1.35.0/_install/* .
sudo mkdir lib
sudo cp -p /usr/arm-linux-gnueabi/lib/* ./lib

静态创建设备文件

制作节点:

cd /rootfs
sudo mkdir dev
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
sudo mknod -m 666 console c 5 1
sudo mknod -m 666 null c 1 3
# ls
console  null  tty1  tty2  tty3  tty4
#cd /rootfs
# cp /etc . -arf
# ls
bin  dev  etc  lib  linuxrc  sbin  usr

制作镜像

制作SD卡文件系统镜像并将rootfs烧写到SD卡,生成镜像: count(镜像文件大小,根据实际情况设置,小了会报错)

dd if=/dev/zero of=rootfs.ext3 bs=1M count=64	//创建镜像文件rootfs.ext3	大小为64m
mkfs.ext3 rootfs.ext3  			//格式化为ext3:共64M,注意必须大于rootfs文件夹的大小。建议用ext4,u-boot基本命令不支持ext3

挂载镜像文件拷贝rootfs内容

mount -t ext3 rootfs.ext3 /mnt/ -o loop  //挂载镜像文件到 /mnt路径
sudo mount -t ext3 rootfs.ext3 /mnt/ -o loop
sudo cp -r rootfs/* /mnt
umount /mnt			//卸载镜像文件

qemu 启动linux内核和跟文件系统

sudo  qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/ZImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd /home/li/qemu/rootfs.ext3
http://www.lryc.cn/news/408501.html

相关文章:

  • Centos安装、迁移gitlab
  • 【Python机器学习】朴素贝叶斯——使用Python进行文本分类
  • 【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略
  • Spring条件装配:灵活配置你的应用
  • 【前端 08】简单学习js字符串
  • 【LLM】-07-提示工程-聊天机器人
  • AvaloniaUI的学习
  • 刷题——快速排序
  • VPN,实时数据显示,多线程,pip,venv
  • 自然语言处理(NLP)
  • Spring Boot集成Spire.doc实现对word的操作
  • 在Spring Boot中优化if-else语句
  • 【Django】开源前端库bootstrap,常用
  • 2024后端开发面试题总结
  • opencascade AIS_Manipulator源码学习
  • Hadoop、Hive、HBase、数据集成、Scala阶段测试
  • go语言day19 使用git上传包文件到github Gin框架入门
  • Ubuntu升级软件或系统
  • 【Redis】Centos7 安装 redis(详细教程)
  • Hakuin:一款自动化SQL盲注(BSQLI)安全检测工具
  • 在 Postman 中设置全局 token
  • Linux C编程:打造一个插件系统
  • 基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)
  • C++——类和对象(下)
  • Android中集成前端页面探索(Capacitor 或 Cordova 插件)待完善......
  • 玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。
  • 介绍下PolarDB
  • 基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)
  • go语言day15 goroutine
  • Mindspore框架循环神经网络RNN模型实现情感分类|(六)模型加载和推理(情感分类模型资源下载)