ubuntu 20 下搭建linux内核开发环境
准备环境:
-
ubuntu20
-
gcc-8 (ubuntu20 的gcc 安装默认为gcc-9,编译的时候会出错,所以要切换到gcc-8)
-
linux 源码
-
ubuntu 20 的依赖库
-
buybox
-
qemu
step1:检查gcc 版本
gcc -v
#如果gcc显示的版本是9的则需要切换到gcc-8
#安装gcc-8编译器
sudo apt install gcc-8
#切换到gcc-8
ln -fs gcc-8 /usr/bin/gcc
#再次检查gcc 的版本
gcc -v
step2: 安装依赖
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc
安装qemu
sudo apt install qemu-system-x86_64
step3 下载linux kernel源码,我选择了4.19.65版本的tar.gz包
tar -zxvf ./linux-4.19.65.tar.gz
cd ./linux-4.19.65/
sudo make menuconfig
进入kernel hacking
勾选以下项目
Kernel debugging
Compile-time checks and compiler options —> Compile the kernel with debug info和Compile the kernel with frame pointers
KGDB
然后保存退出
此时会在liux 包目录下生成一个.config 文件,需要对该文件进行修该
找到CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
改成CONFIG_SYSTEM_TRUSTED_KEYS=""
保存退出
接下来进行编译
sudo make baImage -j4
#-j4 启动cpu 的核数进行编译
#编译完后在arch/x86/boot 会生成baImage
step4 制作根文件系统
先下载busybox,我选择了busybox-1.31.1.tar.bz2
下载好后解压
cd ./busybox-1.31.1/
make menuconfig
安装编译busybox 的依赖
sudo apt-get install libncurses5-dev libncursesw5-dev
进入 Settings
勾选 Build static binary (no shared libs)
make install -j4
在根目录下生成_install 文件夹 里面包含启动linu 内核文件
其中qemu_rootfs.img是文件名,500m是磁盘大小,根据需要修改。
qemu-img create qemu_rootfs.img 500m
创建ext4文件系统
mkfs.ext4 qemu_rootfs.img
创建挂在文件文件夹,然后挂载img文件到宿主系统:
mkdir qemu_rootfs
sudo mount -o loop qemu_rootfs.img qemu_rootfs
先把busybox的_install目录下的东西往里面拷贝,再创建一些目录、文件:
cd qemu_rootfs
sudo mkdir proc sys dev etc etc/init.d
sudo vim etc/init.d/rcS
rcS内容如下,rcS 是linux系统的初始化脚本
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
给rcS 脚本权限
sudo chmod 777 rcS
最后卸载文件系统:
sudo umount qemu_rootfs
新建一个boot启动脚本
#! /bin/sh
qemu-system-x86_64 \
-kernel bzImage \
-hda qemu_rootfs.img \
-append "root=/dev/sda rootfstype=ext4 rw" \
--enable-kvm
同样赋予权限
sudo chnod 777 boot
将 linux 内核编成的bzImage 放在boot 脚本相同目录下,然后启动脚本,运行你自己的系统了
./boot