linux內核調試

1. 前置安裝

1.1 編譯好的內核

參考:
https://blog.csdn.net/qq_51950769/article/details/148596916

1.2 編譯busybox

BusyBox 是一個非常輕量級的多合一工具箱,常被稱為“Linux 的瑞士軍刀”。
簡單來說:
它把很多常用的 Linux 命令(比如 ls、cp、mv、sh、mount 等)集成到一個單一的可執行文件里。適合用于資源有限的環境,比如嵌入式系統、initramfs、恢復系統等。
為什么用 BusyBox?

  • 體積小:比安裝完整的 GNU 工具鏈省空間很多;
  • 方便:一個文件搞定常用命令;
  • 靈活:可以自定義編譯,裁剪只需要的命令。
# 下載源碼
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -xjf busybox-1.36.1.tar.bz2
cd busybox-1.36.1# 配置(選擇你想要的功能)
make menuconfig# 編譯
make -j$nproc# 安裝到指定目錄(方便打包initramfs)
make CONFIG_PREFIX=../busybox-root install# 或者默認安裝, 后續制作根文件系統采用這種方式
make install

成功安裝后:
在這里插入圖片描述
查看安裝目錄的文件,tree
在這里插入圖片描述

1.3 根文件系統的制作

根文件系統提供操作系統運行所需的基本工具和環境。它包含啟動程序(如 init),負責啟動用戶空間進程。
沒有根文件系統,內核是“裸”的,無法完成完整的系統啟動和運行;根文件系統為系統提供了完整的用戶空間環境。

  1. 準備根文件系統目錄
進入到busybox的目錄
cd busybox-1.36.1/
root@ubantu64:~/busybox-1.36.1# ls
applets     busybox_ldscript.README.txt  configs        editors    INSTALL      mailutils               miscutils          procps                  shell                   util-linux
applets_sh  busybox.links                console-tools  examples   klibc-utils  Makefile                modutils           qemu_multiarch_testing  size_single_applets.sh
arch        busybox_unstripped           coreutils      findutils  libbb        Makefile.custom         networking         README                  sysklogd
archival    busybox_unstripped.map       debianutils    include    libpwdgrp    Makefile.flags          NOFORK_NOEXEC.lst  runit                   testsuite
AUTHORS     busybox_unstripped.out       docs           init       LICENSE      Makefile.help           NOFORK_NOEXEC.sh   scripts                 TODO
busybox     Config.in                    e2fsprogs      _install   loginutils   make_single_applets.sh  printutils         selinux                 TODO_unicode
root@ubantu64:~/busybox-1.36.1# cd _install/
root@ubantu64:~/busybox-1.36.1/_install##創建目錄
mkdir -p etc/init.d mnt tmp sys dev proc 

結果:
在這里插入圖片描述

  1. 創建文件系統表(fstab)
vim etc/fstab
proc	/proc	proc	defaults	0	0
tmpfs	/tmp	tmpfs	defaults	0	0
sysfs	/sys	sysfs	defaults	0	0

如圖:
在這里插入圖片描述

  1. 創建啟動腳本rcS
vim etc/init.d/rcSecho -e "Welcome to tinyLinux"
/bin/mount -a
mount  -o  remount,rw  /
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

如圖:
在這里插入圖片描述
給rcS可執行權限chmod 755 rcS。

  1. 創建初始化程序配置文件inittab
vim etc/inittab::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

如圖:
在這里插入圖片描述

  1. 創建設備文件節點
cd dev
mknod console c 5 1
mknod null c 1 3
mknod tty1 c 4 1

在這里插入圖片描述

  1. 鏡像制作
    (1) 創建一個空的鏡像,并把這個鏡像文件格式化為ext4
    (2) 掛載到一個空的目錄,并把_install/*等啟動文件復制到這個鏡像中
    (3) 卸載鏡像文件
    (4) 使用gzip進行壓縮
# 先創建一個空的鏡像并格式化為ext4
mkdir ~/image
cd ~/image
dd if=/dev/zero of=./rootfs.ext4 bs=1M count=32
mkfs.ext4 rootfs.ext4
# 創建一個空目錄fs
mkdir fs
# 掛載到fs,并復制啟動文件
mount -o loop rootfs.ext4 ./fs
cp -rf busybox-1.36.1/_install/* ./fs
#卸載鏡像文件
umount ./fs
# 使用gzip壓縮
gzip --best -c rootfs.ext4 > rootfs.img.gz

最終結果:
在這里插入圖片描述

1.4 安裝qemu-system-x86_64

qemu-system-x86_64 是什么?
qemu-system-x86 是 QEMU 提供的一個用于模擬 x86 架構(如 x86_64 或 i386)計算機系統的可執行程序。簡單來說:它可以在你的電腦上虛擬出一個完整的 x86 電腦,用來運行操作系統、測試內核、開發系統級軟件等。

apt install qemu-system-x86

2. 內核調試

進行內核調試,我們需要使用兩個命令:

2.1 qemu-system-x86_64

qemu-system-x86_64主要用來啟動一個內核。

qemu-system-x86_64 \-kernel ~/linux-5.10.126/arch/x86/boot/bzImage \-initrd ~/kernal/rootfs.img.gz \-append "root=/dev/ram init=/linuxrc" \-serial file:output.txt

參數解釋:

  • -kernel 指定要加載的 Linux 內核鏡像(通常是 bzImage 格式)。
  • -initrd :指定 initrd(初始化內存盤)文件,系統啟動時會加載到內存中,通常用于提供根文件系統。
  • -append:傳遞給內核的啟動參數,這里是指定root=/dev/ram:告訴內核從 RAM 磁盤(initrd)掛載根文件系統。
    init=/linuxrc:指定初始化進程為 /linuxrc。
  • -S:啟動時暫停 CPU
  • -s:在 TCP 端口 1234 上開啟 GDB 服務器

擴展參數:

  • -nographic:禁用圖形輸出,所有輸出(包括串口輸出)將重定向到終端(即你運行命令的終端窗口),用于無頭(headless)運行。
  • -smp 是 QEMU 中用于指定虛擬機的 CPU 配置的參數,全稱是 “Symmetric Multi-Processing”(對稱多處理)。
  • -m 是 QEMU 中用于指定 虛擬機內存大小 的參數。
  • -cpu 是 QEMU 中用于指定虛擬 CPU 類型和特性的參數。
  • -enable-kvm,用于啟用 KVM(Kernel-based Virtual Machine)硬件加速。
  • -serial: 串口(Serial Port):在 QEMU 虛擬機中,串口是一個虛擬的通信接口,通常用于內核調試、系統日志輸出或與外部工具交互。file:output.txt:將虛擬機的串口輸出寫入到當前目錄下的 output.txt 文件中(如果文件不存在會自動創建,已存在則會覆蓋)。

不使用圖像化啟動命令:

qemu-system-x86_64 \-kernel ~/linux-5.10.126/arch/x86/boot/bzImage \-initrd ~/kernal/rootfs.img.gz \-append "root=/dev/ram init=/linuxrc console=ttyS0" \-nographic \-serial mon:stdio \-monitor none

2.2 gdb

執行:

gdb vmlinux

在這里插入圖片描述
在執行:

target remote :1234

在這里插入圖片描述

此時qemu中跑的linux內核:
在這里插入圖片描述

最后在提醒:想調試的話,最好把Makefile中的編譯選項全部從O2改為O1
在這里插入圖片描述

3 參考文章

https://zhuanlan.zhihu.com/p/17345710829
https://blog.csdn.net/weixin_37867857/article/details/88205130

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85266.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是曲面細分

什么是曲面細分 在CAD格式中,通常使用曲線和數學函數來定義曲面和實體。這些曲面的精確度和光滑度非常適用于制造過程。但是,現代GPU芯片針對由三角形網格體組成的曲面的渲染計算進行了高度優化。通常,實時渲染器和虛幻之類的游戲引擎只能處…

CANFD加速是什么?和CANFD有什么區別?

文章目錄 摘要什么是CANFD加速?CAN FD的基本原理:仲裁階段(Arbitration Phase):數據階段(Data Phase):關鍵特性:優勢:總結摘要 下面的截圖,大家肯定不陌生,在使用CAN設備上位機的時候,已經選擇了CANFD,但還有一個選項是“CANFD加速”,那CANFD加速和不加速有什么…

minio 啟動失敗--Incorrect Usage: flag provided but not defined: -consoleaddress

根據錯誤信息 flag provided but not defined: -consoleaddress,這表明 Minio 服務啟動時使用了未定義的命令行參數 --consoleaddress,導致啟動失敗。這個問題與 Minio 版本兼容性有關。 問題原因 參數名稱變更: Minio 版本 > RELEASE.20…

基于Rust的Polars學習筆記

基于Rust的Polars學習筆記 Polars 學習筆記 Cargo.toml通用配置 [package] name = "rustP" version = "0.1.0" edition = "2024"[dependencies] polars = { version = "0.48.1", features = ["full"]}Quickstart use po…

SpringBoot擴展——定時任務!

定時任務 項目開發中會涉及很多需要定時執行的代碼,如每日凌晨對前一日的數據進行匯總,或者系統緩存的清理、對每日的數據進行分析和總結等需求,這些都是定時任務。單體系統和分布式系統的分布式任務有很大的區別,單體系統就一個…

RTDETRv2 pytorch 官方版自己數據集訓練遇到的問題解決

rtdetrv2 訓練問題遇到的問題。 pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu117 1 Please make sure torchvision version > 0.15.2 發現自己實際裝的是 torchvison0.15.2cu117 修改_misc.py中修改為…

Linux系統移植⑤:uboot啟動流程詳解-board_init_f執行過程

Linux系統移植⑤:uboot啟動流程詳解-board_init_f執行過程 _main 中會調用 board_init_f 函數。 board_init_f 函數主要有兩個工作: ①初始化一系列外設,比如串口、定時器,或者打印一些消息等。 ②初始化 gd 的各個成員變量&am…

Git命令與代碼倉庫管理

步驟一、完成Gitee碼云上賬號注冊并新建代碼倉庫。 1.1 新建代碼倉庫 1.2 填寫信息并創建 1.3 獲取倉庫地址 https://gitee.com/dog-kidney/2022082206.git 步驟二、建立本地代碼倉庫,并連接到遠程代碼倉庫。 2.1初始化 git init 2.2添加倉庫 git remote add o…

資源占用多,Linux 系統中如何降低 CPU 資源消耗并提升利用率?

在 Linux 系統中降低 CPU 資源消耗并提升利用率,需從系統服務優化、進程管理、資源調度及內核參數調整等多維度入手。以下是適用于各類 Linux 發行版的通用優化方案,涵蓋基礎操作與進階策略: 一、服務與進程優化:減少無效資源占用 1. 關閉冗余系統服務 查看運行中的服務 …

技術與情感交織的一生 (八)

目錄 融合 東西廠公 接風宴 頭痛 “巴巴羅薩” 突擊 推進 助攻 96小時 寒冬 食堂 反攻 消耗 Delphi 西廠 內困 外患 “敦刻爾克” 多線作戰 大撤退 資源 融合 東西廠公 初次來到紙箱廠,是主廠區,感覺很大,相對西面正在…

webuploader分片上傳示例,服務端上傳文件到騰訊云CDN Teo 應用示例

本文環境:php7.3.4 CI3.0框架 一、大概步驟: (1)利用百度的webuploader插件,將大文件分片上傳的自己的服務器 (2)利用騰訊云接口從本服務器上傳到騰訊云 二、詳細代碼: 1、進入…

LeetCode 632.最小區間

你有 k 個 非遞減排列 的整數列表。找到一個 最小 區間&#xff0c;使得 k 個列表中的每個列表至少有一個數包含在其中。 我們定義如果 b-a < d-c 或者在 b-a d-c 時 a < c&#xff0c;則區間 [a,b] 比 [c,d] 小。 示例 1&#xff1a; 輸入&#xff1a;nums [[4,10,…

篇章五 系統性能優化——資源優化——CPU優化(2)

目錄 1.高級并發模式 1.1 工作竊取&#xff08;Work Stealing&#xff09; 1.工作竊取模式 2.ForkJoinPool實現 3.具體例子 1.2 結構化并發&#xff08;Structured Concurrency&#xff09; 1.結構化并發模式 2.Java 19 的 StructuredTaskScope 3.具體例子 1.3 對比與…

《中國電信運營商骨干網:歷史、現狀與未來演進》系列 第四篇:后發先至——中國移動CMNET的快速擴張與IP專網布局

摘要&#xff1a; 本文深入探討中國移動骨干網CMNET (AS9808) 的發展歷程、網絡架構及其與中國電信扁平化策略的差異。同時&#xff0c;解析其為承載高價值業務而構建的IP專用承載網的定位、結構與技術特點。最后&#xff0c;展望中國移動在5G、云計算和算力網絡時代&#xff0…

R情感分析:解碼文本中的情感

基于之前關于文本聚類和文本模型的博客&#xff0c;我們現在可以深入探討一個經典主題 - 情感分析。情感分析通過計算方式識別和分類文本中的情感&#xff0c;幫助理解公眾意見或消費者反饋。 什么是情感分析&#xff1f; 情感分析確定文本背后的情感基調&#xff0c;將其分類…

云徙渠道訂貨系統:賦能企業渠道管理的數字化引擎

在當今商業競爭日益激烈的環境下&#xff0c;企業如何高效管理和優化渠道成為關鍵問題。云徙渠道訂貨系統憑借其強大的數字化能力&#xff0c;為企業提供了全新的渠道管理解決方案&#xff0c;助力企業在復雜多變的市場環境中保持競爭力。 從渠道管理的痛點出發 傳統渠道管理方…

Nacos基礎使用(二):nacos作為配置中心

一、Nacos 配置中心核心屬性 在學習nacos 作為配置中心的使用之前&#xff0c;先看下Nacos 作為配置中心時的三個屬性&#xff0c;即&#xff1a; 命名空間、配置分組、配置集ID&#xff08;習慣稱為配置文件ID&#xff09;&#xff1b;在使用Nacos 作為配置中心 的過程中可以通…

SpringBoot 插件化架構的4種實現方案

在復雜業務場景下&#xff0c;傳統的單體應用架構往往面臨著功能擴展困難、代碼耦合嚴重、迭代效率低下等問題。 插件化架構作為一種模塊化設計思想的延伸&#xff0c;能夠使系統具備更好的擴展性和靈活性&#xff0c;實現"熱插拔"式的功能擴展。 本文將介紹Spring…

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大學視覺幾何組和 Google DeepMind 的研究人員在 2014 年提出的一個非常經典的深度卷積神經網絡模型。 一 核心結構 &#xff08;1&#xff09;深度&#xff1a; 模型名稱中的 "19" 指的是模型擁有 19 層帶有權重的層&#xff08;通常指&#xff1a;…

Windows11 鼠標卡死任務欄卡死 假死解決方法

最近很多朋友都有一個問題&#xff0c;就是Windows11電腦 在編輯文檔或者是切換窗口的時候出現任務欄假死&#xff0c;鼠標左右鍵失靈等現象&#xff0c;想了幾天解決方案今天吧最直接的方法教給大家 首發玖毅論壇 玖毅論壇https://www.webbbs.cn/ 第一步&#xff1a; 第一種…