目录

一、目的

二、准备工作

①Build Ninja

②Build riscv-gnu-compiler toolchain and debug gdb

③命令行安装gcc-riscv64-linux-gnu-

三、Build Qemu

四、Build opensbi

五、Build Busybox

六、Build Linux Kernel


一、目的

搭建qemu-gdb risc-v64 linux kernel的调试环境。

二、准备工作

Build Ninja 和riscv-toolchain

首先安装必要的库(这是编译riscv toolchain必须安装的库文件)

sudo apt update
sudo apt upgrade
sudo apt install git \
autoconf \
automake \
autotools-dev \
ninja-build \
build-essential \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
libglib2.0-dev \
libpixman-1-dev \
libncurses5-dev \
libtool \
libexpat-dev \
zlib1g-dev \
curl \
gawk \
bison \
flex \
texinfo \
gperf \
patchutils \
bc 

①Build Ninja

git clone https://github.com/ninja-build/ninja.git
cd ninja
cmake -Bbuild-cmake
cmake --build build-cmake

然后在.bashrc中添加ninja/build-cmake目录

编辑.bashrc如下:

export PATH=$PATH:/home/kali/Desktop/riscv-debug/ninja/build-cmake

②Build riscv-gnu-compiler toolchain and debug gdb

wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
tar -xzvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
mv riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14  riscv64-unknown-elf-toolchain

接着编辑~/.bashrc,加入下面的环境变量:

export PATH=$PATH:/home/kali/Desktop/riscv-debug/riscv64-unknown-elf-toolchain/bin

③命令行安装gcc-riscv64-linux-gnu-

sudo apt install binutils-riscv64-linux-gnu $ sudo apt install gcc-riscv64-linux-gnu

三、Build Qemu

git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git submodule init
git submodule update --recursive
./configure
make

四、Build opensbi

git clone https://github.com/riscv-software-src/opensbi.git
cd opensbi/
make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic

五、Build Busybox

wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
tar -jxvf busybox-1.35.0.tar.bz2
cd busybox-1.35.0/
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig
vim .config 

在.config中添加这句:

CONFIG_STATIC=y

添加完成

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j $(nproc)
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- install
cd _install
mkdir proc sys dev etc etc/init.d
touch etc/init.d/rcS
vim etc/init.d/rcS

后保存回到busybox-1.35.0目录

在rcS中添加以下内容:

#!bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s

添加后保存

接着执行下面两条指令,这两条指令需要root权限:

sudo mknod dev/console c 5 1
sudo mknod dev/ram b 1 0

给rcS文件设置可执行属性:

chmod 777 etc/init.d/rcS
find -print0 | cpio -0oH newc | gzip -9 > ../rootfs.img 

到此busybox操作完成。

六、Build Linux Kernel

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.9.tar.xz
tar -xvf linux-5.9.tar.xz
cd linux-5.9.tar.xz 

在内核Makefile的KBUILD_CFLAGS上添加-g选项,然后再执行下面命令:

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j $(nproc)

以上步骤完成后使用gdb调试qemu启动linux kernel,qemu命令行如下:

qemu-system-riscv64 \-nographic -machine virt \-bios  /home/kali/Desktop/riscv-debug/opensbi/build/platform/generic/firmware/fw_dynamic.bin \-kernel /home/kali/Desktop/riscv-debug/linux-5.9/arch/riscv/boot/Image \-initrd /home/kali/Desktop/riscv-debug/busybox-1.35.0/rootfs.img  \-append "root=/dev/ram rdinit=/sbin/init" \-S \-s

开启另一个终端,进入刚刚的linux kernel 目录(该目录下有vmlinux文件),使用下面命令启动gdb:

riscv64-unknown-elf-gdb vmlinux -ex 'target remote localhost:1234'

RISC-V Linux kernel debug 环境搭建相关推荐

  1. 用QEMU模拟ARM开发板,搭建Linux kernel运行环境

    前言 有的时候我们想调试linux kernel或者linux应用程序,但是又没有硬件环境,这个时候可以选择用模拟器的方法,模拟出一个硬件环境. Android emulator Android系统的 ...

  2. 第1章 Linux系统介绍与环境搭建准备

    第1章 Linux系统介绍与环境搭建准备 本章以操作系统的介绍作开篇,首先介绍操作系统的基础概念以及操作系统的原理:然后带领读者了解Unix/Linux的诞生和发展史,以及市面上常见的Unix/Lin ...

  3. Linux Kernel - Debug Guide (Linux内核调试指南 )

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  4. Linux服务器开发环境搭建 Nginx+PHP+MongoDB

     Linux服务器开发环境搭建 Nginx+PHP+MongoDB mkdir -p /home/trlinux/download mkdir -p /home/trlinux/server mkdi ...

  5. linux基本项目环境搭建

    文章目录 linux基本项目环境搭建 java环境搭建 获取java源码包 解压 配置环境变量 使配置文件生效 验证 nginx安装 下载(java也可用此方法下载) 解压 配置(configure) ...

  6. linux 内网环境搭建 maven 私库

    linux 内网环境搭建 maven 私库 参考资料: https://www.codenong.com/cs106446840/ https://blog.csdn.net/lch_wyl/arti ...

  7. Linux(ubuntu) LNMP环境搭建

    Linux(ubuntu) LNMP环境搭建 1. 配置源地址 Ubuntu默认使用的官方源的服务器在欧洲,从国内访问速度很慢 先修改软件源为国内的, 例如: 阿里云源, 清华源等等 整体步骤: 查询 ...

  8. linux 内核调试信息在哪里,Linux kernel debug技巧----开启DEBUG选项

    Linux kernel debug技巧----开启DEBUG选项 作者:wowo 发布于:2016-11-1 19:39 分类:Linux应用技巧 kernel的source code中有很多使用p ...

  9. 嵌入式arm linux Java运行环境搭建和注意事项

    嵌入式arm linux Java运行环境搭建和注意事项 我的开发硬件环境 搭建步骤 1. 下载 ORacle 公司的ejdk-8u211-linux-arm-sflt.tar.gz(软件浮点版本,这 ...

最新文章

  1. 主从同步出现一下错误:Slave_IO_Running: Connecting
  2. javascript初学者必须注意的7个细节
  3. ubuntu下 显示no module named “lib“或 “lib.xxx“
  4. ioc,di,aop详解
  5. Wi-Fi 真的安全吗?一行代码就可让周边无线网络全部瘫痪!| 原力计划
  6. java迭代法求圆周率用梯形_感悟数学“近似计算”之美——“望星楼”里的圆周率...
  7. 二十三、K8s集群强化1-认证
  8. 为UIView绘制单边的boder
  9. 3D打印技术助力传感器:制造出堪比鹰眼视野的摄像头
  10. RecyclerView加载多类型item 实现淘宝首页布局
  11. Markdown两键排版微信公众号文章
  12. 如何理解API?API 是如何工作的?(5分钟诠释)
  13. jQuery 手风琴案例
  14. 小程序踩坑之地图定位不精准的问题
  15. 微信公众号输入关键字回复WordPress搜索结果
  16. Photoshop CC 2019快速选择工具的抠图
  17. 电子面单接口申请对接(返回电子面单模板)
  18. 嘉立创电路板制作过程全流程详解(五):测试、锣边、V-CUT、QC、发货
  19. 【论文翻译】HCL2000—A Handwritten Chinese Character Database
  20. 毕业五年,专科学历的小哥逆袭进腾讯,演绎什么叫努力就有收获!

热门文章

  1. 中学学校计算机教室平面布置图,学校布局平面图.doc
  2. 图论学习笔记(五)平面图
  3. java-zxing扫描二维码和条形码(一维码)
  4. 目前人生阶段的关键字
  5. Tuxedo常用命令
  6. 制作简单的个人网站,将本地网站公布在网络上
  7. 《比尔总动员》2013年7月11版别更新公告
  8. 李嘉诚传给年青人的人生忠告
  9. Mac 使用Jad 反编译class文件
  10. mysql Access denied; you need (at least one of) the SUPER privilege(s) for this operation