简说linux笔记总结:https://www.bilibili.com/opus/524289977842234888
0.环境准备及内核编译
apt-get updateapt install build-essential //安装make和gcc等apt-get install libncurses5-dev //安装ncurses-develapt-get install flex //安装flexapt-get install bison //安装bisonapt install libelf-devapt install libssl-devapt-get install qemu-system
# 解压文件sudo tar -xf linux-4.9.229.tar.xz# 进入目标目录cd linux-4.9.229# make操作export ARCH=x86make x86_64_defconfigmake menuconfig
按如下步骤配置kgdb调试功能
General setup --->----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) supportDevice Drivers --->[*] Block devices ---><*> RAM block device support(65536) Default RAM disk size (kbytes)


特别注意:<*> RAM block device support的选项必须为“<*>”,而不是”M”
# 开始编译make -j8

# 安装QEMUsudo apt-get install qemu-system
以下是基于 BusyBox 最新版本制作根文件系统的完整、详细步骤,按照顺序执行即可:
1. 下载并编译 BusyBox
1.1 下载源码
从 BusyBox 官方网站下载源码,并解压到工作目录:
wget https://busybox.net/downloads/busybox-1.30.0.tar.bz2tar -xjf busybox-1.30.0.tar.bz2cd busybox-1.30.0
1.2 配置 BusyBox
使用 make menuconfig 配置 BusyBox:
make menuconfig
在配置界面中:
Busybox Settings --->Build Options --->[*] Build BusyBox as a static binary (no shared libs)

1.3 编译 BusyBox
使用 make 编译:
make && make install
编译完成后的busybox就安装在源码根目录下的_install目录,进入_install目录,补充一些必要的文件或目录:
mkdir etc dev mntmkdir -p proc sys tmpmkdir -p etc/init.d/nano etc/fstabproc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0nano etc/init.d/rcSecho -e "Welcome to tinyLinux by Kinbos..."/bin/mount -aecho -e "Remounting the root filesystem"mount -o remount,rw /mkdir -p /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -schmod 755 etc/init.d/rcSnano etc/inittab::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::askfirst:-/bin/sh::ctrlaltdel:/bin/umount -a -rchmod 755 etc/inittabcd devmknod console c 5 1mknod null c 1 3mknod tty1 c 4 1
开始制作根文件系统镜像:(在_install父级目录)
先制作一个空的镜像文件;
然后把此镜像文件格式化为ext3格式;
然后把此镜像文件挂载,并把根文件系统复制到挂载目录;
卸载该镜像文件。
打成gzip包。
#!/bin/bashrm -rf rootfs.ext3rm -rf fsdd if=/dev/zero of=./rootfs.ext3 bs=1M count=32mkfs.ext3 rootfs.ext3mkdir fsmount -o loop rootfs.ext3 ./fscp -rf ./_install/* ./fsumount ./fsgzip --best -c rootfs.ext3 > rootfs.img.gz
开始启动QEMU:(如果要kgdb调试需要追加 -s -S)
qemu-system-x86_64 \-kernel ./linux-5.19/arch/x86_64/boot/bzImage \-initrd ./busybox-1.37.0/rootfs.img.gz \-append "root=/dev/ram init=/linuxrc nokaslr" \-serial file:output.txt -s -S

gdb调试:
gdb ./linux-4.9.229/vmlinuxtarget remote localhost:1234
用vscode打开内核代码:
#注意参数:--user-data-dir=/root,否则无法保存code --user-data-dir=/root linux-5.19
在launch.json中配置,如果没有这个文件可以手动创建。
{"version": "0.2.0","configurations": [{"type": "cppdbg","request": "launch","name": "kernel GDB","program": "${workspaceFolder}/vmlinux","cwd":"${workspaceFolder}","MIMode":"gdb",//"miDebuggerPath":"/usr/bin/gdb-multiarch","miDebuggerServerAddress": "localhost:1234","stopAtConnect": true,},]}
在运行qemu-system-x86_64命令后按F5开始调试:
qemu-system-x86_64 \-kernel ./linux-5.19/arch/x86_64/boot/bzImage \-initrd ./busybox-1.37.0/rootfs.img.gz \-append "root=/dev/ram init=/linuxrc nokaslr" \-serial file:output.txt -s -S

