2019-2020-1 20209324《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_defcongig
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

结果如下:

3.启动qemu

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

4.加载符号表以及采用1234端口进行连接,同时在start_kernel处设置断点

file linux-3.18.6/vmlinux  
target remote:1234  
break start_kernel

5.查看start_kernel函数的代码(运行至rest_init()为止)




小结:

1.观察代码得,Linux在三个特殊进程,0号进程(idle),1号进程(init)和2号进程(hthreadd),其中idle进程由系统自动创建,运行在内核态;init进程由idle通过kernel_thread创建,在内核空间完成初始化后, 加载init程序, 并最终用户空间 ;kthreadd进程由idle通过kernel_thread创建,并始终运行在内核空间, 负责所有内核线程的调度和管理

posted @ 2020-10-31 16:35  20209324  阅读(63)  评论(0编辑  收藏  举报