搭建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.pswp.cn/pingmian/75313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75313.shtml
英文地址,請注明出處:http://en.pswp.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;我希望通過這篇博客和大家一起深入探索…