TinyEMU之Linux Kernel编译

TinyEMU之Linux Kernel编译

  • 1 准备工作
  • 2 安装RISC-V交叉编译器
  • 3 编译Linux Kernel
  • 4 镜像格式转换

本文属于《 TinyEMU模拟器基础系列教程》之一,欢迎查看其它文章。

1 准备工作

我们需要,下载以下内容。

  • 编译好的RISC-V交叉编译器:riscv64-glibc-ubuntu-20.04-nightly-2023.01.31-nightly.tar.gz

  • Linux内核源码:riscv-linux-riscv-linux-4.15.tar.gz

RISC-V交叉编译器,github仓库:https://github.com/riscv-collab/riscv-gnu-toolchain,也可以自己去选择,该仓库Release下其他版本的编译器。我们这里下载的是gcc version 12.2.0。
Linux内核源码,github仓库:https://github.com/riscvarchive/riscv-linux/tree/riscv-linux-4.15,我们这里与TinyEMU例子中,使用的Linux 4.15版本保持一致。

2 安装RISC-V交叉编译器

解压

tar -xvzf riscv64-glibc-ubuntu-20.04-nightly-2023.01.31-nightly.tar.gz

编辑.bashrc

vim ~/.bashrc

将编译器bin路径,加入.bashrc文件末尾

export PATH=/home/tools/riscv-gnu-toolchain-glibc/bin:$PATH

使路径生效

source ~/.bashrc

最后,查看编译器版本,以验证安装

riscv64-unknown-linux-gnu-gcc -v

编译器环境搭建好了。
在这里插入图片描述

3 编译Linux Kernel

解压

tar -xvzf riscv-linux-riscv-linux-4.15.tar.gz

将diskimage-linux-riscv-2018-09-23\patches\config_linux_riscv64,拷贝到riscv-linux-riscv-linux-4.15目录下,并修改文件名为.config。

  • Linux中的.config文件是一个非常重要的配置文件,通常位于内核源码目录下,通过修改.config文件,用户可以启用或禁用某些内核功能,也可以调整各种参数和选项,以适应自己的使用环境。
  • 说白了,就是可以选择哪些模块参与编译,哪些模块不参与编译,可进行功能的裁剪。
  • 执行make defconfig,可生成的.config文件;执行make menuconfig,可以修改.config文件。
  • 这里,我们使用TinyEMU例子中,提供的.config文件,就可以编译出,与例子中同样配置的Linux Kernel。
  • 不知道diskimage-linux-riscv-2018-09-23是什么的,可查看前文《TinyEMU之源码编译与使用》。

使用交叉编译器,来编译Linux Kernel

make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j64

遇到选择yes/no,默认回车即可。一会就编译完毕了。
在这里插入图片描述
编译完成后,在riscv-linux-riscv-linux-4.15目录下,生成了内核镜像文件:vmlinux。

使用file命令,查看其文件格式,为RISC-V的ELF格式。
在这里插入图片描述

4 镜像格式转换

在diskimage-linux-riscv-2018-09-23/readme.txt中,有明确描述:TinyEMU只支持原始(RAW)boot loader和kernel image。

因此,必须使用以下命令,将ELF格式镜像,转换为RAW格式镜像:

riscv64-unknown-linux-gnu-objcopy -O binary vmlinux kernel.bin

这个kernel.bin,才能在TinyEMU中,被正确加载执行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

判断语句-Python

师从黑马程序员 if判断语句 if 要判断的条件: 条件成立时,要做的事(四个空格) age 15 if age>18:print("已经成年了")print("即将步入大学生活") print("时间过得真快") 成年人判断 ageint(input(&quo…

2024年高处安装、维护、拆除证模拟考试题库及高处安装、维护、拆除理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年高处安装、维护、拆除证模拟考试题库及高处安装、维护、拆除理论考试试题是由安全生产模拟考试一点通提供,高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材,高…

【MASM汇编语言快速入门】8086MASM汇编深入理解指令对标志位的影响

8086MASM汇编深入理解指令对标志位的影响 文章目录 8086MASM汇编深入理解指令对标志位的影响0. 指令对标志位影响1. 指令对标志位影响速查表2. flags标志寄存器: 标志位含义解读flags1. 状态标志cf, pf, af, zf, sf, of2. 控制标志df, if, tf 详解:1. 传送指令2. 算…

EOS 与ESD 区别

ESD: 英文:Electrical Static Discharge; 定义:不同静电电位的两个物体之间的电荷转移;中文释为静电放电。静电是一种客观的自然现象; EOS: 英文:Electrical Over Stress 定义&#xf…

Avalonia学习1:下载通用皮肤SukiUI,并在windows上启动成功

目录 1、引言 2、碰到的问题 1、下载下拉VS2022老版本的用不了。 2、升级后,发现没有装wsl,导致启动不了,但wsl又由于国内的关系安装不了,怎么办呢, 1、引言 最近在想有没有什么可以开发在Linux下运行…

【C++】了解一下编码

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. ASCII编码3. unicode4. GBK5. 类型转换 1. 前言 看到string里面还有Template instantiations&#xff1a; string其实是basic_string<char>&#xff0c;它还是一个模板。 再看看wstring&#xff1…

大型污水处理站运维公司怎么选择

大型污水处理站运维公司的选择是关乎环境保护和城市发展的重要决策。在如今污水治理领域日益重要的背景下&#xff0c;选择一家专业的运维公司对于确保污水处理站的高效运行、提高处理效果和保护环境具有关键意义。那么&#xff0c;我们应该如何选择适合自己的大型污水处理站运…

1.Spring入门

1.1 Spring简介 Spring是一个轻量级Java 企业级应用程序开发框架&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架&#xff0c;为开发Java应用程序提供全面的基础架构支持。 Spring Fra…

代码随想录算法训练营第40天 | 343. 整数拆分 ,96.不同的二叉搜索树

动态规划章节理论基础&#xff1a; https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 343. 整数拆分 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/ 思路&#xff1a; 动规五部曲&#xf…

tomcat 实现会话绑定

Tomcat 后端服务器实现 Session ID会话保持 基础架构&#xff1a; 7-6 代理服务器nginx配置 7-3 tomcat 服务器 7-5 同理 测试&#xff1a; 此时刷新&#xff0c;会话ID一直在变&#xff0c;这样不好 如何解决呢&#xff1f; 不好的是确定ip之后&#xff0c;会一直在一台机上…

AI对话/绘画完整系统(附完整源码,已开源)

文章目录 功能UI界面使用地址环境完整源码 功能 支持邮件激活账号&#xff0c;微信登录&#xff0c;短信登录支持上下文对话支持GPT4,claude3文件/图片分析分析&#xff0c;几乎所有模型均支持支持模糊匹配自定义回复消息支持按此按张按余额多种扣费方式支持套餐卡密生成及自定…

【C语言步行梯】各类操作符、类型转换与原码、反码、补码详谈

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 算术运算符原码、反码、补码介绍移位运算…

C++11:自动类型推导 auto 和 decltype(下)

前面两篇文章分别介绍了 auto 和 decltype&#xff0c;今天聊聊它们两者之间的区别。 语法格式的区别 auto varname value; // auto的语法格式 decltype(exp) varname [ value]; // decltype的语法格式其中&#xff0c;varname 表示变量名&#xff0c;value 表示赋给变量的值…

如何有效地组织和管理自己的代码?

如何有效地组织和管理自己的代码&#xff1f; &#x1f9e9; &#x1f6e0;️ 如何有效地组织和管理自己的代码&#xff1f; &#x1f9e9;摘要引言正文1. 使用合适的目录结构2. 模块化设计3. 命名规范4. 版本控制 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页——…

L3-020 至多删三个字符(Python)

给定一个全部由小写英文字母组成的字符串&#xff0c;允许你至多删掉其中 3 个字符&#xff0c;结果可能有多少种不同的字符串&#xff1f; 输入格式&#xff1a; 输入在一行中给出全部由小写英文字母组成的、长度在区间 [4, 106] 内的字符串。 输出格式&#xff1a; 在一行…

Redis基础部分学习笔记

一、Redis的安装与配置 Redis是基于内存的&#xff0c;是单线程的。Redis可以用作数据库、缓存、消息中间件。 Redis一些常见的应用场景如下&#xff1a; &#xff08;1&#xff09;缓存 利用Redis快速的读写速度&#xff0c;可以将热点数据放入Redis中&#xff0c;应用从R…

零知识玩转AVH(7)—— 门槛任务(2)所遇错误及解决(1)

接前一篇文章&#xff1a;零知识玩转AVH&#xff08;6&#xff09;—— 门槛任务&#xff08;1&#xff09;源码下载、编译及运行 上一回说到完成门槛任务 https://github.com/ArmDeveloperEcosystem/Paddle-examples-for-AVH &#xff08;推荐&#xff0c;内含 ML 视觉用例&am…

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea&#xff0c;mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs&#xff1a; 一个开源、跨平台的 JavaScript 运行时环境&#xff0c;可以理解成java当中需要…

企业微信 API 接口调用教程:深入解析企业微信 API 的用法

本文通过 access_token 凭证的方式来讲解怎么调用 企业微信 API&#xff0c;并一步步介绍如何获取企业微信 API 的 corpsecret、corpid、access_token 凭证以及怎么向企业微信的应用发送消息。 企业微信 API 在线地址为&#xff1a;qiyeweixin.apifox.cn/ &#xff0c;这个在线…

LInux 进程替换(理解系统调用)

目录 一、替换原理 二、替换函数 1、exec函数 2、命名理解 3、返回值 4、使用execl/lp、execv/vp 5、执行自定义命令 Makefile编译多个文件 命令行程序mycmd.c 传入自己的可执行文件 7、子进程都继承父进程环境变量 8、execle/ve修改子进程环境变量 9、exece函数为…