Linux操作系统分析(4)- 更新内核与添加系统调用
来源:互联网 发布:sql2005数据库备份 编辑:程序博客网 时间:2024/05/14 09:15
更新内核
直接安装的系统内核版本一般不是最新,用
- uname -a
命令可以查看内核的版本号,比如我的就是:
下面来手动更新内核到最新的稳定版本。
1.获取源码
进入kernel.org,下载最近版本内核源码,
最新的稳定版本是3.9.4.
下载好之后解压到 /usr/src 文件夹下
- sudo tar -xvf linux-3.9.4.tar.xz -C /usr/src/
2.配置内核
将原来的配置文件拷过来
- cp /usr/src/linux-headers-2.6.32-27-generic/.config .config
首先进行一下配置,进入到 /usr/src//linux-3.9.4 文件夹下,执行
- make menuconfig
报错:
*** Unable to find the ncurses libraries or the
*** required header files.
缺少ncurses库(一个管理应用程序在字符终端显示的函数库),怒装之:
- sudo apt-get install ncurses-dev
重新执行make menuconfig
选Load,然后Ok,然后Save。
3.编译和安装
终端执行:
- make bzImage #编译kernel
- make modules #编译模块
- make modules_install #先安装模块
- make install #安装内核
编译的时间由机器性能决定。
make install之后,grub已经自动更新,不用再手动设置引导。
重启,进入ubuntu,更新后的第一次加载会有些慢。
再次查看内核版本,终端运行
- uname -a
添加系统调用
系统调用的原理如下:
源码目录下涉及内核的三个文件有:
/kernel/sys.c //定义系统调用
/arch/x86/syscalls/syscall_32.tbl //设置系统调用号
/include/linux/syscalls.h //系统调用的头文件
下面来实现一个简单的系统调用。
1)系统调用函数的实现。
在/kernel/sys.c的最后添加下面的代码:
- asmlinkage int sys_callquansilang(int num)
- {
- printk("Hi,I'm Quansilang. My student No. is sa*****310!");
- return 1;
- }
2)设置系统调用号
编辑arch/x86/syscalls/syscall_32.tbl 文件,发现已经由350个定义号的系统调用,照葫芦画葫芦娃,在最后添加自己的系统调用:
- 351 i386 callquansilang sys_callquansilang
注意要与之前定义的函数对应。
3)添加系统调用的声明到头文件
打开 /include/linux/syscalls.h ,倒数第二行添加
- asmlinkage int sys_callquansilang(int num);
4)重新编译内核并安装。
- sudo make mrproper #清除久的编译文件
- sudo make #编译
安装:
- make modules_install #先安装模块
- make install #安装内核
重启系统。
5)测试
创建一个main.c
- #include <unistd.h>
- #include <stdio.h>
- int main()
- {
- syscall(351,1);
- return 1;
- }
编译运行,然后用
- sudo dmesg -c
查看系统调用log(写系统log会有一点延迟)。
参考
向linux内核添加系统调用新老内核比较 - http://www.cnblogs.com/albert1017/archive/2013/05/27/3101760.html
ubuntu 12.10 x64 下编译新内核 + 系统调用方法 - http://blog.csdn.net/dslovemz/article/details/8744352
Linux添加内核系统调用报告 - http://blog.csdn.net/yming0221/article/details/6559767
- Linux操作系统分析(4)- 更新内核与添加系统调用
- Linux操作系统分析(4)- 更新内核与添加系统调用
- Linux操作系统-Lab3 更新内核与添加系统调用
- 【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用
- Linux 操作系统内核升级及系统调用的添加
- 操作系统-Linux添加系统调用
- linux内核添加系统调用
- Linux内核添加系统调用
- linux内核添加系统调用
- linux内核--添加系统调用
- 【转】linux内核编译与系统调用的添加(适合3.0及以后版本内核)
- linux内核编译与系统调用的添加(适合3.0及以后版本内核)
- Linux内核分析-4/5/系统调用
- 操作系统—系统调用与内核
- 例说linux内核与应用数据通信(一):添加一个系统调用
- Linux内核分析(五):系统调用深入分析
- linux添加系统调用总结(内核版本4.4.4)
- linux修改内核、添加系统调用过程
- 虚继承和虚函数继承
- 如何给Fedora 15添加磁盘(或盘片)
- Oracle数据导入导出imp/exp :未知的命令开头。。。忽略了剩余的行
- 5、从零开始学习JAVA--面向对象
- Ural 1167. Bicolored Horses DP
- Linux操作系统分析(4)- 更新内核与添加系统调用
- Revit编程如何获取内置参数对应的中文字符串?
- Eclipse中的svn冲突解决办法
- byte[],InputStream
- HDOJ 3469 - Treasure Hunting BFS+二分图最大匹配...深入理解二分图最大匹配..
- Hadoop学习之莎士比亚文档词频统计
- (笔记)C++ Primer/第四章 数组和指针
- Linux系统下超强远程同步备份工具Rsync使用详解
- HDU 3313 Key Vertex 求割点数(好题)