搭建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运行成功,如下图
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a11090ba506b47e78e1e2db350c3dcdf.png#pic_center)错误: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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Claude Desktop和MCP工具创建个人编程助手

最近我在Claude Desktop上试用了MCP工具,体验过程令人兴奋不已。 我花时间测试了多个用于编程场景的MCP服务器——而Claude本就擅长编程,这一组合可谓相得益彰。 这些工具赋予Claude强大的自主任务执行能力,比如仅通过聊天就能实现Vibe编程。当然,必须谨慎控制其访问权限…

K8S集群搭建 龙蜥8.9 Dashboard部署(2025年四月最新)

一、版本兼容性和服务器规划 组件版本/配置信息备注操作系统Anolis OS 8.9基于 Linux 5.10.134-17.3.an8.x86_64内核版本Linux 5.10.134-17.3.an8.x86_64与 Kubernetes 1.29 兼容架构x86-64Kubernetes 版本v1.29.5最新稳定版&#xff0c;兼容 Linux 5.10 内核Docker 版本24.0.…

项目6——前后端互通的点餐项目

一、项目介绍 1、有哪些需求需要连接后台完成功能? 前台传给后台 后台返回给前台 注册: 用户名 密码 操作是否成功 登录: 用户名 密码 操作是否成功 下单: 用户名 菜名 操作是否成功 Request : 前端发送给后台的所有数据的载体 Res…

Go和Golang语言简介

李升伟 整理 Go 和 Golang 实际上指的是同一种编程语言&#xff0c;只是名称不同。 Go 名称&#xff1a;Go 是该编程语言的正式名称。 起源&#xff1a;由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年开始设计&#xff0c;2009 年正式发布。 设计目…

GitHub二次验证登录2FA(Enable two-factor authentication )

不用下载app&#xff0c;点击二维码下面的setup key获取到secret并且保存好 接下来几行代码就可以解析了。 添加依赖 <dependency><groupId>com.amdelamar</groupId><artifactId>jotp</artifactId><version>1.3.0</version> </d…

RabbitMQ技术方案分析

方案分析 在上一篇文档中&#xff0c;详细讲述了如何通过CanalMQ实现对分库分表的数据库和数据表进行数据同步&#xff0c;而在这个方案中&#xff0c;还有一个关键点是需要注意的&#xff1a;首先&#xff0c;数据增删改的信息是保证写入binlog的&#xff0c;Canal解析出增删…

node.js版本管理

概述 遇到了版本升级后&#xff0c;以前项目不兼容的问题。 下载一个node.js的版本管理工具&#xff0c;官网下载地址&#xff0c;可以选择版本下载&#xff0c;我选择的1.11.1版本的。下载完成后点击安装&#xff0c;分别选择nvm安装目录和nodejs的安装目录&#xff0c;点击安…

leetcode-热题100(3)

leetcode-74-搜索二维矩阵 矩阵最后一列升序排序&#xff0c;在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…

在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面

大家好&#xff0c;我是 V 哥。 《鸿蒙 HarmonyOS 开发之路 卷1 ArkTS篇》已经出版上市了哈&#xff0c;有需要的朋友可以关注一下&#xff0c;卷2应用开发篇也马上要出版了&#xff0c;V 哥正在紧锣密鼓的写鸿蒙开发实战卷3的教材&#xff0c;卷3主要以项目实战为主&#xff0…

音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流

音视频入门基础&#xff1a;MPEG2-TS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;1&#xff09;——MPEG2-TS官方文档下载 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ts文件 音视频入门基础…

(六)窗口表面

这节主要三部分 一&#xff0c;窗口表面的创建和销毁 二&#xff0c;呈现队列 三&#xff0c;与以前实现的图形能力队列的兼容 一&#xff0c;窗口表面 1&#xff0c;创建 VkSurfaceKHR surface; //创建窗口表面 glfwCreateWindowSurface(instance, //vkInstance对象window, …

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

云巅之上:数字文明的重构与超越

序章&#xff1a;算力新纪元 2024年初春&#xff0c;当SpaceX的星舰将首批云计算节点送入近地轨道时&#xff0c;地球上的数字原住民们正通过云端AI助手规划着一天的行程。这场静默的革命已悄然进入新阶段——云计算不再只是工具&#xff0c;而是成为数字文明的"第六元素…

【面试篇】多线程

基础概念 线程的生命周期有哪些状态&#xff1f;它们是如何转换的&#xff1f; 答案&#xff1a;线程的生命周期有以下六种状态&#xff1a; 新建&#xff08;New&#xff09;&#xff1a;线程被创建但尚未启动&#xff0c;此时线程对象已被分配内存空间&#xff0c;相关属性已…

unity运行中场景指定模型回放功能(模型是地形并且可以加载预制体进行回放)

回放和加载脚本 using System.Collections.Generic; using UnityEngine;public class TerrainRecorder : MonoBehaviour {[Header("基本设置")]public Terrain targetTerrain;public bool isRecording false;public bool isPlayingBack false;[Range(0.02f, 1f)] …

基于SpringBoot的河道水情大数据可视化分析平台设计与实现(源码+论文+部署讲解等)

需要资料&#xff0c;请文末联系 一、平台介绍 水情监测数据大屏 - 平台首页 日均水位 日均水速 二、论文内容 摘要&#xff08;中文&#xff09; 本文针对河道水情监测领域的数据管理和可视化分析需求&#xff0c;设计并实现了一套河道水情大数据可视化分析平台。该平台基…

Knife4j文档请求异常 空指针

打开swagger文档报空指针异常 java.lang.NullPointerException: nullat springfox.documentation.oas.mappers.SchemaMapper.model(SchemaMapper.java:97)at springfox.documentation.oas.mappers.SchemaMapper.mapModel(SchemaMapper.java:85)at springfox.documentation.oas…

车辆选择解决方案

车辆选择解决方案 /* * Purpose: 添加车辆选择的功能 -> 用户在选择不同的车辆时&#xff0c;重新初始化系统状态&#xff0c;清除之前的定时器&#xff0c;并根据新选择的车辆设置新的定时器&#xff0c;以实现对新车辆状态的实时加载。 * File Name: 车辆选择解决方案 * …

魔塔社区使用llamafactory微调AI阅卷试题系统

启动 LLaMA-Factory 1. 安装 LLaMA-Factory 执行安装指令 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e ".[torch,metrics]"解决依赖冲突 如果遇到依赖冲突&#xff0c;可使用以下命令安装&#xff0c;不…

程序化广告行业(51/89):Cookie映射与移动设备ID映射解析

程序化广告行业&#xff08;51/89&#xff09;&#xff1a;Cookie映射与移动设备ID映射解析 在当今数字化营销的浪潮中&#xff0c;程序化广告已经成为企业精准触达目标客户的重要手段。作为一名对程序化广告充满兴趣的学习者&#xff0c;我希望通过这篇博客和大家一起深入探索…