Linux内核编译

Linux内核编译

实验内容

下载内核源码:

确定内核版本号

uname -r

alt text

在www.kernel.org选择接近的内核版本下载

linux-6.6.60.tar.xz

将压缩包解压到虚拟机目录中

确认系统位数

getconf LONG_BIT

alt text

确认虚拟机保留足够大硬盘空间(20G)

df -h

alt text

编写自定义系统调用函数

修改/kernel/sys.c文件,在文件末尾增加自己设定的函数
alt text
修改系统函数头文件/include/linux/syscalls.h
在文件最后的#endif之前添加函数声明
alt text
为函数添加系统调用号:/arch/x86/entry/syscall/syscall_32.tbl。(根据刚才查看系统的位数而定,如果是64位就修改syscall_64.tbl文件)。
在文件最后添加调用号,可以接着上面的序号继续+1,后面的格式参照上面编写模式。
alt text
编译内核

#编译安装依赖
sudo apt-get update
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libssl-dev
sudo apt-get install libelf-dev

sudo apt-get install binutils-dev
sudo apt-get install pkg-config
sudo apt-get install libncurses5-dev


#清除内核的目标文件、附属文件以及配置文件
#(一般第一次编译时候需要使用,主要防止下载的源码包有一些配置文件,影响结果)
sudo make mrproper 

#清除内核中的目标文件,并不会删除设置文件
#(在后续需要重新编译时候,只需要make clean就可以了)
sudo make clean

#设置配置文件:这是一种通过已存在.config文件内容,使用该文件内的默认值,只将新版本内核功能新功能提供出来让用户选择,可以简化内核功能挑选过程。
#(如果使用默认值一直按回车键快速略过也可以)
sudo make oldconfig

#编译内核
sudo make bzImage –j6 #-j6代表用六线程编译

编译完成
alt text

#编译模块
sudo make modules
#安装模块
sudo make modules_install
#安装内核
sudo make install

alt text
修改grub引导

#/etc/default/grub
GRUB_TIMEOUT_STYLE=meun
GRUB_TIMEOUT=30 #引导菜单超时时间
sudo update-grub #更新grub配置

重启系统,可以在GRUB界面选择编译的第二个内核
alt text
进入系统后查看内核版本

uname -r

alt text
内核版本已经被更换成6.6.60

调用系统函数

编写调用函数

#include<stdio.h>
int main(){
    int num;
    //syscall(arg1,arg2);1为自定义函数的系统调用号,2为函数参数
    num = syscall(548,111);
    printf("the number is %d",num);
    return 0;
}
posted @ 2025-01-02 11:26  Arisf  阅读(3)  评论(0编辑  收藏  举报