写在前面
建议在编译内核之前了解一下内核的目录结构, 这样至少不会被绕晕
下载内核源码
sudo apt search linux-source
![10651191-4467266030f97cf3.png](https://i-blog.csdnimg.cn/blog_migrate/ba176103464a339cf4dbe55f7b6db912.png)
搜索源码包
下载源码
sudo apt install linux-source-4.15.0
这样就下载了源码包了
会直接放到这个目录下来
![10651191-385057e126a1685d.png](https://i-blog.csdnimg.cn/blog_migrate/927f636cb3c9afb1d12919d11727502b.png)
默认下载位置
我直接解压到了自己的用户目录下
解压命令
tar -xvf linux-source-4.15.0.tar.bz2 -C ~
最新版的tar命令可以智能的识别压缩的算法
进入目录之前,做一件事情
sudo chmod 777 -R linux.source-4.15.0
省去后面不必要的权限麻烦
编写自定义函数
进入到 kernel 目录下
![10651191-ae63eccb5d9789d7.png](https://i-blog.csdnimg.cn/blog_migrate/103faadcb1265f9b092c85c7334b5ffa.png)
kernel目录
执行
vim sys.c
直接按 G 跳到文件末尾, 然后按 O 在最后一行的上一行添加代码, 进入编辑模式
asmlinkage long sys_helloworld(void){
printk( "helloworld!");
return 1;
}
![10651191-ccae95779129ef4a.png](https://i-blog.csdnimg.cn/blog_migrate/06e8f7a403f247fc548a7a1fd472de50.png)
vim sys.c
添加声明
进入到如下目录:
![10651191-1f068515c6265af2.png](https://i-blog.csdnimg.cn/blog_migrate/2b176066f3d9828b278addae11f32b71.png)
pwd
执行如下命令
vim syscalls.h
插入
asmlinkage long sys_helloworld(void);
如图:
![10651191-43e53a217c7c9f21.png](https://i-blog.csdnimg.cn/blog_migrate/d3e9255e321fd4154c3ffc13a13fc7c8.png)
image.png
添加系统调用id
进入到如下目录
![10651191-35792b4b7a28c954.png](https://i-blog.csdnimg.cn/blog_migrate/c025c2b8ce4b790345acaca46f47a989.png)
pwd
在最后一行插入
![10651191-8cac64176fb609b2.png](https://i-blog.csdnimg.cn/blog_migrate/e1a87ddad7cb586712a4100dd138d14d.png)
image.png
配置内核
先make clean一下
之后再补充