预安装依赖库
有ncurses等等;
1. 编译linux kernel
下载linux源码
make O=xxx allyesconfig
make O=xxx menuconfig
cd xxx
make -j2
2. 编译busybox
make O=xxxx defconfig
make O=xxxx menuconfig
,选择build static library
cd xxxx
make -j2
make install
- 2.1 在busybox编译完目录xxxx下制作init,inittab,rcS等脚本
将编译完的busybox里的内容拷贝到需要制作的根文件目录下
mkdir -pv {bin,dev,sbin,etc,proc,sys/kernel/debug,usr/{bin,sbin},lib,lib64,mnt/root,root}
cp -av _install/* xxx/
cp -av /dev/{null,console,tty,sda1}
init脚本
ln -s ./bin/busybox init
inittab:
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
init.d/rcS:
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
echo -e "\nlinux started\n"
- 2.2 制作根文件系统
find . | cpio -H newc -o > ../initramfs.cpio
cd ../
cat initramfs.cpio | gzip > initramfs.igz
3. gdb启动远程调试linux kernel
3.1 qemu启动kernel
`qemu-system-x86_64 -kernel xxx/arch/x86_64/boot/bzImage -initrd initramfs.igz -nographic -append "nokaslr earlyprintk=serial,ttyS0 console=ttyS0" -S -s3.2 gdb启动vmlinux
打开一个终端,进入linux内核编译完后的目录下xxx
gdb vmlinux
(gdb) target remote:1234
(gdb) b start_kernel
(gdb) c