> For the complete documentation index, see [llms.txt](https://jacklu233.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jacklu233.gitbook.io/blog/build-linux-system.md).

# Build Linux System

学号265，原创作品转载请注明出处+<https://github.com/mengning/linuxkernel/>

实验环境：ubuntu16.04

首先下载 [linux-5.0.1](https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz) ，然后解压：\
`xz -d linux-5.0.1.tar.xz`\
`tar -xvf linux-5.0.1.tar`\
`cd linux-5.0.1`

安装相关依赖：\
`sudo apt install build-essential ﬂex bison libssl-dev libelf-dev libncurses-dev`

编译内核：\
`sudo make defconfig`\
`sudo make -j8`\
`sudo make install`

更新grub，然后重启内核：\
`update-grub`\
`reboot`

![grub界面](https://1465371034-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_hNHHksYYsMvQNKcN8%2F-LaLWD5-SmgsNLCi6Sgc%2F-LaLZTwmpkQ1PucoesZr%2Fimage.png?alt=media\&token=07e074ed-f0e5-4a54-8c8c-a2cfc6911338)

可以看到grub界面中已经有了linux 5.0.1的入口，但是选择该内核后发生了end kernel panic错误，尝试从recovery mode进入，进入的是BusyBox环境，在该环境中查看内核版本，显示为linux 5.0.1，说明内核已经安装但无法启动图形界面：

![BusyBox中查看内核版本，为linux 5.0.1](https://1465371034-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_hNHHksYYsMvQNKcN8%2F-LaLWD5-SmgsNLCi6Sgc%2F-LaL_lng5HWABUcgbpyn%2Fimage.png?alt=media\&token=9f191038-2240-47d7-a4d6-d383dfc2315f)

回到图形界面，用qemu加载内核，结果同样显示end kernel panic错误：

![qemu加载linux 5.0.1内核](https://1465371034-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_hNHHksYYsMvQNKcN8%2F-LaLWD5-SmgsNLCi6Sgc%2F-LaLbA3ifFmKqiMFyuh4%2Flab2_3.png?alt=media\&token=9fdc0d24-4020-477e-9057-57d9b06074d1)

按照stack overflow等论坛的相关问题讨论，重装内核，更新对应内核版本的initramfs，仍然显示该错误。

接着构造MenuOS:\
`git clone` [`https://github.com/mengning/menu.git`](https://github.com/mengning/menu.git)`cd menu`\
`sudo apt-get install libc6-dev-i386`\
`make rootfs`\
此时出现错误：

![](https://1465371034-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_hNHHksYYsMvQNKcN8%2F-LaLWD5-SmgsNLCi6Sgc%2F-LaLiCd2QSAbYKrm7P_p%2Fimage.png?alt=media\&token=288957d9-9190-4f13-acd2-0ff3862e4173)

重新make内核，选择i386\_defconfig，并运行以下命令：\
make rootfs\
cd ../menu\
gcc -pthread -o init linktable.c menu.c test.c -m32 -static\
cp init ../rootfs\
find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img\
qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd ../rootfs.img

最后成功显示：

![](https://1465371034-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_hNHHksYYsMvQNKcN8%2F-LaLqDiDBRIw4PUU7XxZ%2F-LaLrlKTJXzC6nHsVTrd%2Fimage.png?alt=media\&token=aa58b197-93cf-46cc-a946-ebf339d96972)
