kernel编译

1.安装依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#注释头

sudo apt-get install make gcc bison flex libssl-dev musl-tools
sudo apt-get install libssl-dev
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11

可能有些重复的,没事,够编译环境就行。

2.下载kernel源码,解压,编译:

1
2
3
4
5
6
7
8
9
10
11
12
13
//注释头

wget https://mirror.tuna.tsinghua.edu.cn/kernel/-------------------
tar -zvxf linux-4.4.70.tar.gz
cd linux-4.4.70
make menuconfig
//这里进入之后直接esc保存退出即可,相关的设置来到之后生成的.config中来

vim .config
//将CONFIG_MODULE_SIG_ALL,CONFIG_MODULE_SIG_KEY和CONFIG_SYSTEM_TRUSTED_KEYS三项注释掉,编译时系统会自动生成一次性密钥来加密,另外记得把CONFIG_DEBUG_INFO=y去掉,不然新内核带debug信息超大
//这里踩过很多坑,虚拟机直接爆炸,各种错误。

make

但是如果需要直接调试,则看大佬的吧:

https://eternalsakura13.com/2018/04/13/qemu/

编译完成之后在linux-4.4.70/arch/x86_64/boot/下保存bzImage,用来启动qemu,根目录下有vmlinux,用来分析。

3.下载busybox源码,解压,编译,制作根目录系统

1
2
3
4
5
6
7
8
//注释头

wget https://busybox.net/downloads/busybox-1.19.4.tar.bz2
tar -jxvf busybox-1.30.0.tar.bz2
cd busybox-1.30.0
make menuconfig
# Busybox Settings -> Build Options -> Build Busybox as a static binary
make install

之后在busybox-1.30.0/_install/目录下就是根目录文件系统

img

然后就用cpio生成上述的rootfs.cpio,用来配合bzImage启动qemu

find ./* | cpio -H newc -o > rootfs.cpio

4.启动qemu:

(1)将rootfs.cpio、bzImage拖到一个文件夹下

(2)制作启动文件:

1
2
3
4
//注释头

touch boot.sh
vim boot.sh

(3)将下列代码拷入:

1
2
3
4
5
6
7
8
9
10
11
#注释头

#! /bin/sh
qemu-system-x86_64 \
-m 64M \
-kernel ./bzImage \
-initrd ./rootfs.cpio \
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet kaslr" \
-s \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-nographic \

图形化界面-nographic和console=ttyS0配合使用,启动界面就变成终端。

最后./boot.sh即可启动qemu虚拟机。