搭建qemu环境
1.安装qemu
apt install qemu-system
2.编译内核
设置gcc软链接sudo ln -s arm-linux-gnueabihf-gcc arm-linux-gccsudo ln -s arm-linux-gnueabihf-ld arm-linux-ldsudo ln -s arm-linux-gnueabihf-nm arm-linux-nmsudo ln -s arm-linux-gnueabihf-objcopy arm-linux-objcopysudo ln -s arm-linux-gnueabihf-ar arm-linux-arsudo ln -s arm-linux-gnueabihf-strip arm-linux-strip下载内核linux-5.6.14.tar.xz// 解压tar xvf linux-5.6.14.tar.xz// 编译默认配置make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig// 编译安装,-j参数后面可以跟一个数字,表示并行任务的数量// make -j4表示同时运行四个编译任务。make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j8
3.编译文件系统
下载文件系统busybox-1.37.0.tar.bz2 // 解压tar xvf busybox-1.37.0.tar.bz2 // 编译默认配置make defconfig// 编译make CROSS_COMPILE=arm-linux-gnueabi- -j8错误:1. ‘sha1_process_block64_shaNI’ undeclared 解决1. nano .config注释下面配置#define ENABLE_SHA1_HWACCEL解决2. nano libbb/hash_md5_sha.c添加条件判断修改前:/* Used also for sha256 */unsigned FAST_FUNC sha1_end(sha1_ctx_t *ctx, void *resbuf){unsigned hash_size;/* SHA stores total in BE, need to swap on LE arches: */common64_end(ctx, /*swap_needed:*/ BB_LITTLE_ENDIAN);hash_size = 8;if (ctx->process_block == sha1_process_block64#if ENABLE_SHA1_HWACCEL|| ctx->process_block == sha1_process_block64_shaNI#endif) {hash_size = 5;}/* This way we do not impose alignment constraints on resbuf: */if (BB_LITTLE_ENDIAN) {unsigned i;for (i = 0; i < hash_size; ++i)ctx->hash[i] = SWAP_BE32(ctx->hash[i]);}hash_size *= sizeof(ctx->hash[0]);memcpy(resbuf, ctx->hash, hash_size);return hash_size;}修改后:/* Used also for sha256 */unsigned FAST_FUNC sha1_end(sha1_ctx_t *ctx, void *resbuf){unsigned hash_size;/* SHA stores total in BE, need to swap on LE arches: */common64_end(ctx, /*swap_needed:*/ BB_LITTLE_ENDIAN);hash_size = 8;if (ctx->process_block == sha1_process_block64#if ENABLE_SHA1_HWACCEL/* 添加条件判断 */#if defined(__GNUC__) && (defined(__i386__) || defined(__x86__64__))|| ctx->process_block == sha1_process_block64_shaNI#endif#endif) {hash_size = 5;}/* This way we do not impose alignment constraints on resbuf: */if (BB_LITTLE_ENDIAN) {unsigned i;for (i = 0; i < hash_size; ++i)ctx->hash[i] = SWAP_BE32(ctx->hash[i]);}hash_size *= sizeof(ctx->hash[0]);memcpy(resbuf, ctx->hash, hash_size);return hash_size;}2. ‘IFLA_CAN_TERMINATION’ undeclared修改networking/libiproute/iplink.c添加条件判断修改前:case ARG_termination: {uint16_t val;NEXT_ARG();val = get_u16(*argv, keyword);addattr_l(&req.n, sizeof(req), IFLA_CAN_TERMINATION, &val, sizeof(val));break;}修改后:case ARG_termination: {uint16_t val;NEXT_ARG();val = get_u16(*argv, keyword);/* 添加条件判断 */#ifdef IFLA_CAN_TERMINATIONaddattr_l(&req.n, sizeof(req), IFLA_CAN_TERMINATION, &val, sizeof(val));#elsefprintf(stderr, "IFLA_CAN_TERMINATION is not supported on this system.\n");#endifbreak;}// 编译安装make install CROSS_COMPILE=arm-linux-gnueabi- -j8编译生成的bin文件在busybox-1.37.0/_install/目录下
4.制作根文件系统镜像
切换到busybox的上级目录,并使用如下脚本制作镜像
#!/bin/bashmkdir -p rootfs/{dev,etc/init.d,lib}
touch rootfs/etc/init.d/rcS
#这里用双引号可能会报错
echo -e '#!/bin/sh\n' > rootfs/etc/init.d/rcS
cp busybox-1.37.0/_install/* -r rootfs/
sudo cp -P /usr/arm-linux-gnueabihf/libc/lib/* rootfs/lib/ln -s bin/busybox rootfs/init sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4sudo chown root:root -R rootfs/*
sudo chmod 777 rootfs/etc/init.d/rcSqemu-img create -f raw disk.img 512M
mkfs -t ext4 ./disk.img
mkdir -p tmpfs
sudo mount -o loop ./disk.img tmpfs/
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
file disk.img
5.启动虚拟机开发板
sudo qemu-system-arm \-M vexpress-a9 \-m 512M \-kernel linux-5.6.14/arch/arm/boot/zImage \-dtb linux-5.6.14/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-nographic \-append "root=/dev/mmcblk0 rw console=ttyAMA0" \-sd disk.img运行成功,如下图
错误:EXT4-fs (mmcblk0): recovery complete
EXT4-fs (mmcblk0): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:0.
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
Run /etc/init as init process
Run /bin/init as init process
Run /bin/sh as init process
Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.14 #2
Hardware name: ARM-Versatile Express
[<80110804>] (unwind_backtrace) from [<8010c6a8>] (show_stack+0x10/0x14)
[<8010c6a8>] (show_stack) from [<807867b0>] (dump_stack+0xa0/0xb4)
[<807867b0>] (dump_stack) from [<80120f90>] (panic+0x118/0x320)
[<80120f90>] (panic) from [<807a0374>] (kernel_init+0x104/0x114)
[<807a0374>] (kernel_init) from [<801010e8>] (ret_from_fork+0x14/0x2c)
Exception stack(0x9e493fb0 to 0x9e493ff8)
3fa0: 00000000 00000000 00000000 00000000
3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3fe0: 00000000 00000000 00000000 00000000 00000013 00000000
---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.1. <span style="color: red;">文件系统重init文件缺失</span>,检查我的文件系统中init文件正常。故排除2.busybox编译时未进行交叉编译导致文件为不是arm架构文件,file rootfs/bin/busybox命令查看并无问题。故排除参考博客:CentOS 7 利用qemu模拟ARM vexpress A9开发板3.交叉编译库未正常拷贝。检查rootfs/lib文件发现其下面没有交叉编译库的内容,而是一个软链接,指向一个不存在的路径。问题定位到了,修复如下:修改制作根文件系统镜像中sudo cp -P /usr/arm-linux-gnueabihf/lib/* rootfs/lib/为sudo cp /usr/arm-linux-gnueabihf/lib/sf/* rootfs/lib/,重新制作根文件系统镜像后正常了。可能不同版本ubuntu安装的 gcc-arm-linux-gnueabi 库路径不同,需要自己检查一下。
Kernel panic No working init found 可能原因:
1.文件系统重init文件缺失,检查我的文件系统中init文件正常。故排除
参考博客:buildroot编译内核启动报错:Kernel panic - not syncing: No working init found问题解决
2.busybox编译时未进行交叉编译导致文件为不是arm架构文件,file rootfs/bin/busybox命令查看并无问题,故排除
参考博客:CentOS 7 利用qemu模拟ARM vexpress A9开发板
3.交叉编译库未正常拷贝。,检查rootfs/lib文件发现其下面没有交叉编译库的内容,而是一个软链接,指向一个不存在的路径。问题定位到了,修复如下:
修改制作根文件系统镜像中sudo cp -P /usr/arm-linux-gnueabihf/lib/* rootfs/lib/为sudo cp /usr/arm-linux-gnueabihf/libc/lib/* rootfs/lib/,重新制作根文件系统镜像后正常了。
可能不同版本ubuntu安装的 gcc-arm-linux-gnueabi 库路径不同,需要自己检查一下。
参考博客:启动报错:Kernel panic - not syncing: No working init found. Try passing init= option to kernel.
相关文章:
搭建qemu环境
1.安装qemu apt install qemu-system2.编译内核 设置gcc软链接sudo ln -s arm-linux-gnueabihf-gcc arm-linux-gccsudo ln -s arm-linux-gnueabihf-ld arm-linux-ldsudo ln -s arm-linux-gnueabihf-nm arm-linux-nmsudo ln -s arm-linux-gnueabihf-objcopy arm-linux-objc…...
【MVC简介-产生原因、演变历史、核心思想、组成部分、使用场景】
MVC简介 产生原因: MVC(Model-View-Controller)模式诞生于20世纪70年代,由Trygve Reenskaug在施乐帕克研究中心(Xerox PARC)为Smalltalk语言设计,目的是解决图形用户界面(GUI&…...
基于NebulaGraph构建省市区乡镇街道知识图谱(二)
上次我们有讲到构建知识图谱,但是在实际使用的时候会发现某些乡镇街道丢失的问题,因为VID必须全局唯一,覆盖导致原因,另外在全国大批量导入时速度非常慢,为此,我们重新优化表结构与导入语法。 1. 表及索引…...
论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024)
转载至:何骏昊 开放知识图谱 原文地址:论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024) 笔记整理:何骏昊,东南大学硕士,研究方向为语义解析 论文链接ÿ…...
线性规划工具推荐篇 开源+商用 按需取用
一、开源免费工具 1. GLPK (GNU Linear Programming Kit) 特点: 支持线性规划(LP)、混合整数规划(MIP)使用MathProg语言建模,可通过glpsol命令行求解适合中小规模问题,性能低于商业求解器 适用…...
linux -- php 扩展之xlswriter
xlswriter - PHP 最强性能 Excel 扩展 linux 安装 完整编译安装步骤 ## 下载wget https://pecl.php.net/get/xlswriter tar -zxvf xlswriter cd xlswriterphpize # 执行配置 ./configure # 编译 make make install ./configure 如果报错,就指定配置路径 …...
Dockerfile文件构建镜像Anaconda+Python教程
文章目录 前言Dockerfile 核心模块解析**一、Dockerfile基础镜像选择二、系统基础配置1、时区设置2、镜像源替换 三、系统依赖安装四、复制本地文件五、指定路径六、Anaconda环境配置1、anaconda环境安装2、配置虚拟环境3、创建conda虚拟环境4、启动和安装环境 七、完整dockerf…...
本地部署大模型-web界面(ollama + open-webui)
一、安装ollama 二、安装部署open-webui 1、项目运行环境 (1)配置python环境—官方下载链接 可通过命令行直接更改python镜像源为阿里云镜像源: >pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/也可手动修…...
Uniapp 实现微信小程序滑动面板功能详解
文章目录 前言一、功能概述二、实现思路三、代码实现总结 前言 Uniapp 实现微信小程序滑动面板功能详解 一、功能概述 滑动面板是移动端常见的交互组件,通常用于在页面底部展开内容面板。本文将介绍如何使用 Uniapp 开发一个支持手势滑动的底部面板组件࿰…...
redis一些常用的命令(1)
启动redis redis-server /home/XXX/myredis/redis.conf 默认不是后台运行的,修改配置文件,daemonized on /var/run/redis.pid when daemonized port 6380 默认端口的6379 bind:127.0.0.1 默认是本地 连接不同的端口 redis-cli -p 6380 制…...
Java虚拟机JVM知识点(已完结)
JVM内存模型 介绍下内存模型 根据JDK8的规范,我们的JVM内存模型可以拆分为:程序计数器、Java虚拟机栈、堆、元空间、本地方法栈,还有一部分叫直接内存,属于操作系统的本地内存,也是可以直接操作的。 详细解释一下 程…...
【C++进阶四】vector模拟实现
目录 1.构造函数 (1)无参构造 (2)带参构造函数 (3)用迭代器构造初始化函数 (4)拷贝构造函数 2.operator= 3.operator[] 4.size() 5.capacity() 6.push_back 7.reserve 8.迭代器(vector的原生指针) 9.resize 10.pop_back 11.insert 12.erase 13.memcpy…...
VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库,可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。 实现步骤 初始化地图 在 HTML 文件中引入 Mapbox GL JS 库&…...
《筋斗云的K8s容器化迁移》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章:斗战胜佛的延迟焦虑****第二章:微服务化的紧箍咒****第三章:混沌中的流量劫持****第四章:量子筋斗的终极形态****终章&…...
面试遇到的几个问题小记20250401
一、echarts设置数据的几种方式 在 ECharts 里,设置数据存在多种方式,下面为你详细介绍: 在初始化配置项时设置数据 这是最为常见的方式,也就是在创建 ECharts 实例的时候,于配置项 option 里直接设置数据。 // 基于…...
java swing 密码框如何在获取到焦点时,输入法自动切换为英文状态
一、java swing 密码框如何在获取到焦点时,输入法自动切换为英文状态 在 Java Swing 中,JPasswordField 用于输入密码,默认情况下,输入法状态不受控。要在获取焦点时自动切换为英文状态,可以通过以下步骤实现…...
图像处理中的Transformer Block实现与解析
图像处理中的Transformer Block实现与解析 随着深度学习技术的不断进步,Transformer结构在自然语言处理领域取得了显著的成功。近年来,这种注意力机制也被引入到计算机视觉任务中,展示了其强大的表现力和效果提升能力。本文将从代码实现的角…...
基于SpringBoot的“考研学习分享平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“考研学习分享平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体功能结构图 局部E-R图 系统首页界面 …...
Web3.0隐私计算与云手机的结合
Web3.0隐私计算与云手机的结合 Web3.0隐私计算与云手机的结合,标志着从“数据垄断”向“数据自主”的范式转变。通过技术互补,两者能够构建更安全、高效且用户主导的数字生态。尽管面临技术整合和成本挑战,但随着区块链、AI和分布式存储的成…...
视觉与激光点云 融合的 三维重建算法
以下是一些结合激光点云(LiDAR)与其他数据(如图像、RGB-D等)的三维重建算法,这类方法通过融合多模态数据提升重建的精度和完整性: 1. 传统几何融合方法 (1) LiDAR 相机(RGB/LiDAR Fusion…...
Linux上位机开发实践(超越MPP去开发产品)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于芯片厂商来说,肯定希望客户的应用和自己的芯片绑定地越紧密越好。最好就是,他们自己成为客户的独家供应商。但是对于嵌…...
雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键
MySQL 分布式架构中的主键选择:自增ID、UUID与雪花算法 为什么MySQL分布式架构中不能使用自增主键? 在分布式架构中,自增主键存在以下问题: 主键冲突风险:多个数据库实例同时生成自增主键会导致ID重复分片不均匀&am…...
SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer
前面介绍了获取容器可以让spring bean实现ApplicationContextAware,实际也是初始化执行了setApplicationContext接口, 初始化接口还可以借助一些注解或者spring bean的初始化方法,那么他们的执行顺序是什么样的呢? 一、验证&…...
【分享】内外网文件摆渡系统:让数据传输更安全更可靠
【分享】Ftrans内外网文件摆渡系统:让数据传输更安全更可靠! 随着大数据时代的到来,数据的重要性日渐得到重视,数据作为数字经济时代下的基础性资源和战略性资源,是决定国家经济发展水平和竞争力的核心驱动力。以行业…...
2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题)
2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题) 背景描述:任务A:离线数据处理(35分)子任务一:数据抽取子任务三:指标计算 任务B&…...
前端学习记录之HTML
1. 网页 1.1 什么是网页 网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是HTML格式的文件,它要通过浏览器来阅读 网页是构成网站的基本元素。它通常由图片,…...
解释一下Unity碰撞的触发条件
Unity中碰撞的触发条件主要与物体的碰撞体(Collider)和刚体(Rigidbody)组件有关。具体来说,Unity的物理引擎会根据物体的配置来检测碰撞(Collision)和触发器(Trigger)事件…...
手机显示5GA图标的条件
最近有星友问在什么情况下才能显示5G-A?虽然这个我也不知道,但是我有几个运营商的5G终端白皮书,从上面就可以找到答案。 如上是几个运营商显示5G-A的条件,基本上考虑的都是3CC的情况,联通还有考虑200M CA 2CC的场景&am…...
Spring Boot 实现文件秒传功能
前言 在开发Web应用时,文件上传是一个常见需求。然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余。此时可以使用文件秒传技术通过识别重复文件,实现瞬间完成上传的效果,大大提升了用户体验…...
使用AOP技术实现Java通用接口验签工具
一、背景 在给第三方提供接口时,我们需要对接口进行验签。具体来说,当外部系统调用我们的接口时,请求中需要携带一个签名,我们接收到请求后,会解析数据并校验签名是否正确,以确保请求的合法性和安全性。 为了在不同项目中方便地使用这一功能,我们将签名校验规则封装成一…...
