2020-2021-1 20209303《Linux内核原理与分析》第二周作业
1.下载源码
mkdir LinuxKernel
cd LinuxKernel
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz
xz -d linux-3.18.6.tar.xz
tar -xvf linux-3.18.6.tar
cd linux-3.18.6
make i386_defconfig
make
2.制作根文件系统
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
gcc -pthread -o init linktable.c menu.c test.c -m32 -static
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
3.跟踪调试Linux内核的启动过程(使用gdb跟踪)
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
file linux-3.18.6/vmlinux //在gdb界面中target remote之前加载符号表
target remote:1234 //用1234这个端口进行连接
break start_kernel //可在target remote之前,也可在之后
问题及解决方法
1.编译出现fatal error: bits/libc-header-start.h: No such file or directory
解决:apt-get install gcc-multilib ,环境没有完善
2.在编译过程中遇到书中提到的相似的错误,提示不存在compiler-gcc9.h这一文件,查阅相关资料,是Ubuntu环境版本与gcc编译器版本不匹配的原因,进入到include/linux环境下,发现其中最高的版本为compiler-gcc5.h,将compiler-gcc5.h复制重命名为compiler-gcc9.h后放入该文件夹中解决。
3.错误如图