环境:Ubuntu 6.14.0-37-generic
拉取linux内核源码:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
环境依赖安装:
apt install -y build-essential bc bison flex libssl-dev libelf-dev dwarves ncurses-dev fakeroot cpio rsync kmod gawk git python3 perl
配置文件.config
linux内核编译前,需要进行make menuconfig,图形化设置系统配置或裁剪 但最终都是要生成.config 文件,LiteOS也是如此。 笔者直接使用当前系统的.config, 同时关闭ubuntu官方内核的系统证书
cp /boot/config-6.14.0-37-generic .config
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
新内核会有许多新选项,使用olddefconfig自动使用默认值
make olddefconfig
多核编译:
make -j$(nproc)
最终:
ls arch/x86/boot/bzImage // 新内核镜像
make kernelrelease // 查看内核版本
即表示内核编译成功,
后续继续更有价值的事情:
1. 源码结构
- kernel/ — 核心调度
- mm/ — 内存管理
- fs/ — 文件系统
- net/ — 网络
- drivers/ — 驱动
- arch/x86/ — x86架构
- init/ — 启动
- ipc/ — 进程通信
2. 加printk
如 printk(KERN_INFO "hello kernel\n");
重新编译,学习内核
3. 模块
module_init()、 module_exit()
insmod、rmmod、dmesg
4. syscall
增加自己的系统调用,深入理解 用户态->内核态