Linux内核源码编译调试

一、 环境准备

需要下载相应的环境,以下提供了工具获取方法。建议源码编译安装,编译若少依赖就自行百度。官网都会有编译安装教程。

开发操作系统:

https://ubuntu.com/#download

linux源码获取:

kernel.org

busybox源码版本:

https://busybox.net/downloads/

qemu

https://www.qemu.org/

二、Linux源码编译

1.指定硬件体系架构。

目前使用的是x86,因为我的开发环境就是x86。如果你要编译arm的内核,则指定ARCH=arm且需要安装交叉编译器。

export ARCH=x86 

2.配置board config,此处配置为 x86_64_defconfig。

make  x86_64_defconfig 

3.配置内核
此处可以有图形界面配置想要编译内核的模块

make menuconfig

这一步其实是对第2步的菜单进行微调,我们需要内核支持ramdisk驱动,所以需要选中如下配置:

General setup —>
----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers —>
[*] Block devices —>
<*> RAM block device support
(65536) Default RAM disk size (kbytes)

4、编译内核

make

三、buysbox编译并制作内核

1.解压buysbox源码

tar xvf busybox-xxxxx.tar.bz2

2.配置buysbox源码为静态编译

make menuconfig

Busybox Settings —>
Build Options —>
[*] Build BusyBox as a static binary (no shared libs)

3.编译和安装

make && make install

4.编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:

cd _install
mkdir etc dev mnt
mkdir -p proc sys tmp 
mkdir -p etc/init.d/

写fstab

vim etc/fstab

将下面信息写入

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs   defaults 0 0
sysfs /sys sysfs defaults 0 0

写rcS

vim etc/init.d/rcS

写入下面内容并保存

echo -e "Welcome to Linux"
/bin/mount -a
echo -e "Remounting the root filesystem"
mount  -o  remount,rw  /
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

执行:

chmod 755 etc/init.d/rcS

写inittab

vim etc/inittab

写入并保存:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

执行:

chmod 755 etc/inittab
cd dev
mknod console c 5 1
mknod null c 1 3
mknod tty1 c 4 1

内核制作结束

四、制作根文件系统镜像文件

先回到busy-box的目录

cd ..

1.先制作一个空的镜像文件
2.然后把此镜像文件格式化为ext3格式
3.然后把此镜像文件挂载,并把根文件系统复制到挂载目录
4.卸载该镜像文件
5.打成gzip包

直接来个bash脚本

vim mkimg.sh

写入并保存

#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
mount -o loop rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz 

执行

chmod 755 ./mkimg.sh

执行脚本

./mkimg.sh

就得到了文件系统镜像:rootfs.img.gz

五、qemu模拟器启动我们自己编译的内核和文件系统

下载qemu源码
解压进入目录

./configure --prefix=/opt/qemu
make
make install

启动内核
参数路径需要修改

/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc" -serial file:output.txt

无图形界面的终端上可以使用

/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc console=ttyS0" -serial mon:stdio -nographic

退出用
Ctrl - a x

大功造成哈哈哈哈哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 VS Code 中使用 GDB 调试 Linux 内核码的步骤如下: 1. 安装插件:首先需要在 VS Code 中安装插件 "Native Debug",该插件提供了对 GDB 的支持。 2. 配置工作目录:在 VS Code 中打开 Linux 内核码所在的目录,并在 VS Code 中打开一个终端,进入到内核码目录中。 3. 生成内核配置:使用 "make menuconfig" 命令生成内核配置,可以根据需要选择需要编译内核模块。 4. 编译内核:使用 "make -j4" 命令编译内核,其中 "-j4" 表示使用 4 个线程进行编译。 5. 启动 GDB:在终端中输入 "gdb ./vmlinux" 命令启动 GDB,其中 "vmlinux" 是内核文件名。 6. 配置 GDB:在 GDB 中输入以下命令进行配置: * "set architecture i386:x86-64:intel":设置架构为 x86-64。 * "set sysroot /usr/src/linux":设置系统根路径为内核码路径。 * "file vmlinux":设置内核文件名。 * "target remote :1234":连接到远程目标,端口号为 1234。 7. 启动虚拟机:在另一个终端中启动虚拟机,使用以下命令: ``` qemu-system-x86_64 -s -S -kernel arch/x86/boot/bzImage -nographic ``` 其中 "-s" 表示开启 GDB 服务器,"-S" 表示启动时暂停虚拟机,"-kernel" 指定内核文件名,"-nographic" 表示不使用图形界面。 8. 调试内核:在 GDB 中输入 "continue" 命令,让虚拟机继续执行,即可开始调试内核。 在调试过程中,可以使用 GDB 提供的各种命令进行调试,例如 "break" 设置断点,"step" 单步执行,"print" 打印变量值等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值