Linux 系统移植(二)--系统调试

2023-09-21 10:23:06

一、 编译文件系统

1.1 下载资源安装包

我们使用buildroot软件包来制作rootfs文件系统映像,下载buildroot软件包,并进入配置界面:

wget https://buildroot.org/downloads/buildroot-2021.08.tar.bz2
tar xvf buildroot-2021.02.4.tar.bz2
cd buildroot-2021.02.4
make menuconfig

1.2 配置模板ARM64目标平台

  • Target options->AArch64(little endian)
  • Target options-> Target Architecture Variant (cortex-A57)

示意图如下:
在这里插入图片描述

  • Target options->AArch64(little endian)
  • Target options-> Target Architecture Variant (cortex-A57)

这里可以根据自己的需要选择不同的CPU进行仿真调试

示意图如下:
在这里插入图片描述

1.3 配置交叉编译器

  • Toolchain->Toolchain type 选择“External toolchain”:

在这里插入图片描述

  • Toolchain->Toolchain选择"Arm AArch64 2020.11”:

在这里插入图片描述

1.4 配置登录用户名和密码

  • System configuration-> Enable root login with password, 并且设置root密码,这里设置为"adsf”:

在这里插入图片描述

1.5 配置Linux 控制台

  • System configuration-> Run a getty (login prompt) after boot->TTY port设置为"TTYAMA0"。

在这里插入图片描述

  • Target packages-> Debugging, profiling and benchmark可以选择自己感兴趣的工具,这里选择strace:

在这里插入图片描述

1.6 配置文件系统格式

  • Filesystem images选择cpio the root filesystem (for use as an initial RAM filesystem):

在这里插入图片描述

1.7 编译buildroot文件系统

cd $WORK_DIR/buildroot-2021.08
make

buildroot-2021.08/output/images目录下会生成两个系统映像:
在这里插入图片描述

”Your PATH contains spaces, TABs, and/or newline (\n) characters. This doesn‘t work. Fix you PATH“
如果编译时出现上述报错,sudo su 切换root用户即可

二、编译ARM64 Linux

安装交叉编译器

sudo apt install gcc-aarch64-linux-gnu

下载Linux内核,并生成默认的配置文件:

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.6.tar.xz
tar xvf linux-5.14.6.tar.xz
cd linux-5.14.6.tar.xz
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig

在产生的linux-5.14.6/.config文件中修改以下三个选项:

CONFIG_CMDLINE="console=ttyAMA0"
CONFIG_INITRAMFS_SOURCE="/home/tom/hdd/linux-qemu/repos/buildroot-2021.08/output/images/rootfs.cpio"
CONFIG_DEBUG_INFO=y

CONFIG_INITRAMFS_SOURCE这里填写你自己的路径地址

编译kernel:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4

在编译的过程中会出现需要用户配置选项的交互输入,则一路默认回车键,直到出现交互输入Built-in initramfs compression mode时,因为我们编译initramfs文件系统时,没有选择压缩模式,所以这里选择8:
在这里插入图片描述
继续回车,直到遇到Kernel command line type交互输入时,选择1:
在这里插入图片描述
其余一路回车直到配置结束,生成vmlinux,Image,Image.gz示意图如下:
在这里插入图片描述
Note: Linux原始镜像为vmlinux,后续可能是Image、Image.gz、uImage镜像, 处理过程是

  • 通过link-vmlinux.sh生成vmlinux和map文件。
  • 通过objcopy移除vmlinux中不必要段,输出binary格式Image。
  • 对Image进行压缩,输出不同格式的压缩文件,比如gzip对应的gz。
  • 对gz加上uboot头信息,生成uImage文件。
  • ARM64平台则仅支持Image.gz和Image

三、启动 Qemu Linux系统

qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-machine type=virt \
-nographic -smp 1 \
-m 2048 \
-kernel ./arch/arm64/boot/Image \
--append "console=ttyAMA0"

示意图如下:在这里插入图片描述

参考链接:

  1. gdb调试Qemu ARM64仿真平台上的Linux Kernel
  2. QEMU+GDB调试Linux内核总结(全)
更多推荐

PyTorch中ReduceLROnPlateau的学习率调整优化器

PyTorch中ReduceLROnPlateau的学习率调整优化器作者:安静到无声个人主页简介:在深度学习中,学习率是一个重要的超参数,影响模型的收敛速度和性能。为了自动调整学习率,PyTorch提供了ReduceLROnPlateau优化器,它可以根据验证集上的性能指标自动调整学习率。本文将详细介绍ReduceLR

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记

LanguageAdaptiveWeightGenerationforMulti-taskVisualGrounding论文阅读笔记一、Abstract二、引言三、相关工作3.1指代表达式理解3.2指代表达式分割3.3动态权重网络四、方法4.1总览4.2语言自适应权重生成语言特征聚合权重生成4.3多任务头4.4训练目标

Vue中的动态 Class & Style

动态Class&Style我们平时可以直接给元素设置静态的Class或者是Style,但是这种方式会带来很多限制,假设我想要内容动态的改变Class或者是Style,通过原生的方式要通过JavaScript频繁操作dom才能够实现。而在Vue中我们无需关心内部实现原理,可以直接给元素的Class、Style绑定一个变量

自动化测试的类型​以及自动化测试的几个误区!

有三种主要类型的自动化测试。一、自动化单元测试​编辑自动化单元测试在代码级别上进行测试。bug是在开发人员编写的函数、方法和例程中识别出来的。一些公司要求开发人员自己进行单元测试,而有些公司则雇用专门的测试自动化资源。这些资源可以访问源代码,它们编写单元测试来破坏生产代码。由于单元测试的存在,每当代码编译时,所有单元测

外贸行业中常用的邮箱推荐

随着全球贸易的不断发展,外贸行业越来越重要。在这个过程中,电子邮件作为一种重要的沟通工具,扮演着关键的角色。然而,对于许多外贸从业者来说,选择合适的邮箱服务并不容易。本文将探讨外贸邮箱和普通邮箱的区别,并推荐一些在外贸行业中广泛使用的好用邮箱。“有哪些好用的外贸行业使用较多的邮箱?常见的有ZohoMail、Gmail、

RxJS:前端开发的未来

引言随着前端开发的不断发展,我们面临着越来越复杂的应用程序和更高的用户期望。为了应对这些挑战,开发人员需要使用更高效、更灵活的工具和技术。RxJS(ReactiveExtensionsforJavaScript)是一个强大的库,它提供了一种响应式编程的方式来处理异步数据流。本文将探讨RxJS在前端开发中的重要性,并展示

day1---9.15---qt

头文件:#ifndefZY1_H#defineZY1_H//防止文件重复包含#include<QMainWindow>//父类的头文件classzy1:publicQMainWindow//自定义自己的界面类,公共继承自QWidget,父类中重写了绘制事件处理函数{Q_OBJECT//信号与槽的元对象,没有这个对象,信

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】分享

基于springboot实现“闲一品”交易平台电商系统项目摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整

TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解

大家好,本文结合具体的问题实例,详细讲解一下TCP/IP协议栈的心跳机制、丢包重传机制等内容,给大家提供一个借鉴和参考。1、问题概述虽然软件底层模块在网络恢复后能自动重连上服务器,但会议因为网络问题已经退出,需要重新加入会议。因为客户特殊的网络运行环境,会频繁出现网络抖动不稳定的情况,客户要求必须要实现60秒内网络恢复

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

目录1基本子图绘制示例2子图网格布局3调整子图的尺寸4多行多列的子图布局5子图之间的共享轴6绘制多个子图类型7实战:绘制一个大图,里面包含6个不同类别的子图,不均匀布局。绘制子图(subplots)是在Matplotlib中创建多个子图的常见任务。通过子图,您可以将多个图形放置在同一图表中,以便比较不同的数据或可视化多

sublime编辑latex 出现参考文献无法编译报错:citation “...” undefined

问题描述使用sublime编译latex文件时,参考文献按照常规的方式放好,ctrl+B编译的时候,显示找不到参考文献,编译出的pdf文件也没有references:但是把文件放到overleaf上就可以直接编译出来,说明是本地编译器的问题。解决方案1.编辑LaTeXTools插件的编译脚本我电脑的路径为C:\User

热文推荐