Linux内核编译
Linux内核编译
实验内容
下载内核源码:
确定内核版本号
uname -r
在www.kernel.org选择接近的内核版本下载
linux-6.6.60.tar.xz
将压缩包解压到虚拟机目录中
确认系统位数
getconf LONG_BIT
确认虚拟机保留足够大硬盘空间(20G)
df -h
编写自定义系统调用函数
修改/kernel/sys.c文件,在文件末尾增加自己设定的函数
修改系统函数头文件/include/linux/syscalls.h
在文件最后的#endif之前添加函数声明
为函数添加系统调用号:/arch/x86/entry/syscall/syscall_32.tbl。(根据刚才查看系统的位数而定,如果是64位就修改syscall_64.tbl文件)。
在文件最后添加调用号,可以接着上面的序号继续+1,后面的格式参照上面编写模式。
编译内核
#编译安装依赖
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代表用六线程编译
编译完成
#编译模块
sudo make modules
#安装模块
sudo make modules_install
#安装内核
sudo make install
修改grub引导
#/etc/default/grub
GRUB_TIMEOUT_STYLE=meun
GRUB_TIMEOUT=30 #引导菜单超时时间
sudo update-grub #更新grub配置
重启系统,可以在GRUB界面选择编译的第二个内核
进入系统后查看内核版本
uname -r
内核版本已经被更换成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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2022-01-02 scala源码关联
2022-01-02 Scala学习2——idea配置scala环境,scala初步学习