Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >借助buildroot高效Linux调试环境

借助buildroot高效Linux调试环境

作者头像
用户4700054
发布于 2023-02-26 06:35:33
发布于 2023-02-26 06:35:33
67200
代码可运行
举报
运行总次数:0
代码可运行

下载buildroot

  • buildroot可以根据自己需求构建自己的内核,目前准备的内核是为了调试zfs.因此需要一个微内核,然后采用qemu-kv+gdb方式进行调试.后续也想着怎么把lustre环境搞到里面了。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ubuntu /mnt/buildroot-2022.02.4]$ sudo apt install dwarves  libelf-dev[root@ubuntu ~]$ wget https://buildroot.org/downloads/buildroot-2022.02.4.tar.gz[root@ubuntu ~]$ tar zxvf buildroot-2022.02.4.tar.gz && cd buildroot-2022.02.4

配置buildroot选项

  • buildroot预设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// buildroot 预设置[root@ubuntu ~]$ make qemu_x86_defconfig


// 菜单配置[root@ubuntu ~]$ make menuconfig
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 配置菜单说明
Target options ---> 目标选项
Build options ---> 生成选项
Toolchain ---> 工具链
System configuration ---> 系统配置
Kernel ---> 内核
Target packages ---> 目标包
Filesystem images ---> 文件系统映像
Bootloaders ---> 引导加载程序
Host utilities ---> 主机实用程序
Legacy config options ---> 旧版配置选项
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 菜单选项的配置
System configuration  ---> 
	/dev management (Dynamic using devtmpfs + eudev)// 配置如下的选项
Build options  --->  
	[*] build packages with debugging symbols                                                                           
         gcc debug level (debug level 3)  Toolchain  --->  
	C library (glibc) 
    Custom kernel headers series (5.15.x)  Kernel  --->  
	Kernel version (Custom version)
  • 修改fs/ext2root文件系统大小
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ubuntu /mnt/buildroot-2022.02.4/fs/ext2]$ vi Config.in 

// 这里必须修改config BR2_TARGET_ROOTFS_EXT2_SIZE
        string "exact size"
        default BR2_TARGET_ROOTFS_EXT2_BLOCKS if BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP # legacy 2017.08
        // 这里设置为4G
        default "4g"
        help
          The size of the filesystem image. If it does not have a
          suffix, it is interpreted as power-of-two kilobytes. If it is
          suffixed by 'k', 'm', 'g', 't' (either upper-case or
          lower-case), then it is interpreted in power-of-two kilobytes,
          megabytes, gigabytes, terabytes, etc.// 方式二,忘记修改了可以修改[root@ubuntu /mnt/buildroot-2022.02.4/fs/ext2]$ vi ext2.mk 
#ROOTFS_EXT2_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_EXT2_SIZE))// 这里的单位是K,评估发行版的os大小ROOTFS_EXT2_SIZE = 4240000
  • 开始编译
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 脚本会自动下载包记性gcc编译[root@ubuntu ~/buildroot-2022.02.4]$ make -j12 linux-menuconfig// 运行很长时间会弹出linux内核配置,然后执行make,会编译很长时间[root@ubuntu ~/buildroot-2022.02.4]$  make -j 4 // 编译完成后会有如下输出// 编译完成保留buuld/linux-4.19和images[root@ubuntu ~/buildroot-2022.02.4/output]$ tree ./ -L 2./├── build
│   └── linux-4.19└── images
    ├── bzImage
    ├── rootfs.ext2
    └── start-qemu.sh3 directories, 3 files
开始调试阶段
  • 启动kvm
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
qemu-system-x86_64 -kernel ~/buildroot-2022.02.4/output/images/bzImage  -hda ~/buildroot-2022.02.4/output/images/rootfs.ext2  -append "root=/dev/sda console=ttyS0" -s -S  -smp 1 -nographic
  • 启动gdb调试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ubuntu ~/buildroot-2022.02.4/output/build/linux-4.19]$ gdb ./vmlinux
GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90(gdb) set architecture i386:x86-64
The target architecture is set to "i386:x86-64".(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x000000000000fff0 in ?? ()(gdb) br do_mount
Breakpoint 1 at 0xc119a850: file fs/namespace.c, line 2710.(gdb) c
Continuing.

Breakpoint 1, do_mount (dev_name=0xc7802410 "devtmpfs", dir_name=0xc7802420 "devtmpfs", type_page=0xc177fd81 "/", flags=1936093293, data_page=0x0) at fs/namespace.c:27102710    {
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在 Mac M1 Pro 上 debug Linux Kernel | 基于 Ubuntu 24 工具链和 QEMU
在 MacOS 上直接编译 Linux Kernel 在我看来并不是一个很好的选择:
Piper破壳
2025/04/20
810
如何在 Mac M1 Pro 上 debug Linux Kernel | 基于 Ubuntu 24 工具链和 QEMU
构建Linux内核调试环境
构建Linux内核调试步骤 系统版本 当前宿主机内核版本 // 目前的环境是ubuntu[root@ubuntu ~]$ uname -a Linux ubuntu 5.15.0-41-generic #44-Ubuntu SMP Wed Jun 22 14:20:53 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 调试的内核版本 linux-4.19.25 安装系统组件 qemu-kvm [root@ubuntu ~]$ sudo apt install libvi
用户4700054
2023/02/26
2.8K0
构建Linux内核调试环境
QEMU调试Linux内核环境搭建
一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。
嵌入式Linux内核
2022/09/24
4.1K1
QEMU调试Linux内核环境搭建
使用GDB调试Linux内核
GDB(GNU Debugger)是Linux上的调试程序,可用于C/C++、Go、Rust等多种语言。GDB可以让你在被调试程序执行时看到它的”内部“情况,观察程序在特定断点上的状态,并逐行运行代码。
mazhen
2023/11/24
1.8K0
使用GDB调试Linux内核
如何添加APP到Buildroot里(以瑞芯微rv1126为例)
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,整个Buildroot是由Makefile脚本和Kconfig配置文件构成。可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。制作的rootfs通常需要包含很多第三方软件,比如busybox,udhcpc,tftp,apache,sqlite,PHP,iptable,DNS等,为避免复杂的移植工作,在buildroot中通过menuconfig配置我们根文件系统中需要的功能,将不需要的去掉,再执行make编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建我们所需要的嵌入式根文件系统。
杨源鑫
2021/07/07
7.9K1
如何添加APP到Buildroot里(以瑞芯微rv1126为例)
鸿蒙系统研究之四:根文件系统
在上一篇文章鸿蒙系统研究之三:迈出平台移植第一步,我们将内核加载并启动,但缺少根文件系统。这篇文章我们来探讨一下根文件系统的制作。
云水木石
2021/07/14
2.1K0
使用QEMU搭建ARM64实验环境
对于Linux爱好者,你是否也有这样的困扰,为了学习Linux而去购买昂贵的开发版,这大可不必,QEMU模拟器几乎可以满足你的需求,足够你去学习Linux,它能够模拟x86, arm, riscv等各种处理器架构,本文将向你呈现的不是QEMU/虚拟化的原理解读,而是如何搭建一个用于学习linux的QEMU环境,当然对于Linux内核的学习这已经足够了。
用户7244416
2021/08/06
3.4K1
吴锦华 / 明鑫 : 用户态文件系统 ( FUSE ) 框架分析和实战
本文介绍了Linux系统上FUSE文件系统的实现原理、基本概念以及FUSE在文件系统中的具体应用。通过FUSE,用户可以自定义文件系统,实现不同文件系统类型,如ext4、xfs等。FUSE在文件系统方面有着广泛的应用,包括文件系统开发、文件系统修复、文件系统压缩、文件系统加密等。
Linuxer
2017/10/18
10.1K1
吴锦华 / 明鑫 : 用户态文件系统 ( FUSE ) 框架分析和实战
搭建qemu RISC-V运行Linux环境
目前虽然RISC-V的硬件开发板能够运行Linux的十分难得,从探索RISCV的生态的角度上来看,使用模拟器也是一种非常好的方式。使用QEMU能够很好的模拟RISCV的硬件资源,后期有实际的开发板后将其软件生态移植上去也并不复杂。
bigmagic
2021/05/18
10.4K13
搭建qemu RISC-V运行Linux环境
Linux下kernel调试环境搭建
一般内核调试需要的东西就是内核镜像和磁盘镜像,不同版本的内核就用不同版本的内核镜像。而需要什么文件就调整磁盘镜像。
赤道企鹅
2022/08/01
2.5K0
Buildroot 用户手册 (中文)
Buildroot是一个工具,它使用交叉编译简化了为嵌入式系统构建完整Linux系统的过程,并实现了自动化。
全栈程序员站长
2022/11/01
9.9K0
主线Buildroot开发
系统编译完成后,镜像输出在 output/images/ 目录下,名称为 tinyvision_sdcard.img 使用 dd if 命令 完整写入sd卡设备,或者 使用 wind32diskimage工具。 或者使用 balenaEtcher 等 进行烧录。
韦东山
2024/08/24
920
从零构建一个riscv64 ubuntu-20发行版系统
book@100ask:~$ qemu-riscv64-static -version
韦东山
2021/12/08
2.4K0
从零构建一个riscv64 ubuntu-20发行版系统
gdb和qemu调试Linux内核
之前学习了利用KGDB双机调试内核,这种方式需要在两个主机上,通过串口线进行连接,或者是通过VMware开启两个虚拟机进行调试,对机器要求相对高一些。通过qemu创建虚拟机,然后利用gdb进行调试相对更轻量级一点。 我先在centos7下面配置调试环境,但是centos7下没有qemu_system_x86等命令,所以需要重新编译qemu源码再进行安装,再加上各种依赖问题,于是转用ubuntu进行配置,过程简单了许多。
yifei_
2022/11/14
3.9K0
利用QEMU+GDB调试Linux内核
对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。
嵌入式与Linux那些事
2022/05/24
3.5K0
利用QEMU+GDB调试Linux内核
教你在十分钟内编译一个Linux内核,并在虚拟机里运行
这篇文章将会简单的介绍如何在Linux系统上面,编译一个5.19的内核,然后在QEMU虚拟机中运行。
灯珑LoGin
2022/11/20
7.8K0
教你在十分钟内编译一个Linux内核,并在虚拟机里运行
《Linux内核分析》之构造一个简单的Linux系统MenuOS 实验总结
在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
WindCoder
2018/09/20
2.3K0
《Linux内核分析》之构造一个简单的Linux系统MenuOS 实验总结
嵌入式 linux 根文件系统原理和制作方法
一套linux体系,只有内核本身是不能工作的,必须要 rootfs 上的 etc 目录下的配置文件、/bin /sbin 等目录下的 shell 命令,还有 /lib 目录下的库文件等···)相配合才能工作 。
杨源鑫
2021/07/30
4.3K0
快速搭建一个Linux内核调试环境
(1)git clone 内核,在git checkout某一个分支:git clone https://github.com/torvalds/linux.git 适用于git commit补丁前的漏洞调试
De4dCr0w
2020/06/12
2.8K0
快速搭建一个Linux内核调试环境
手把手教你用 buildroot 构建根文件系统
嵌入式系统三大部分:bootloader(uboot)、Linux内核、根文件系统。
Jasonangel
2021/07/07
9.3K0
相关推荐
如何在 Mac M1 Pro 上 debug Linux Kernel | 基于 Ubuntu 24 工具链和 QEMU
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验