linux14.04内核,Ubuntu 14.04 内核版本Linux 3.13 添加系统调用

32位系统,添加系统调用过程总结.

由于编译内核需要较大空间,建议给boot和/都分大一些,以防编译过程中出现no space error

1 .获得root权限

sudo su

输入密码.

2 .获得内核源码

ubuntu可以直接通过指令获得,获得的压缩包存在了/usr/src中

apt-get install linux-source

解压下载好的源码压缩包

我下载得到的包是 linux-source-3.13.0.tar.bz2

tar jxvf linux-source-3.13.0.tar.bz2

之后在同一文件夹产生linux-source-3.13.0文件夹,内容一览

root@TianYuPC:/usr/src/linux-source-3.13.0# ls

arch firmware lib REPORTING-BUGS ubuntu

block fs MAINTAINERS samples usr

COPYING include Makefile scripts virt

CREDITS init mm security x509.genkey

crypto ipc modules.builtin signing_key.priv

Documentation Kbuild modules.order signing_key.x509

drivers Kconfig net sound

dropped.txt kernel README tools

4 . 接下来添加系统调用.需要修改三个文件.

第一个sys.c

cd linux-source-3.13.0

gedit或者vi kernel/sys.c

打开编辑,在文件最后,写自己的函数.比如一个排序函数,对输入的数字进行堆排序.数字范围要求有理数.由于C语言的标准库在内核中不能使用,且double类型会报错(其他同学的实践经验),我使用字符数组处理.

首先写一个int compare(char*a,char *b),比较

两个字符串表示的数的大小.具体细节不多说.

然后是堆排用到的void adjust(char * array[],int i,int n)函数,以及系统调用函数asmlinkage int sys_heapsort(char * array[],int n).(最后返回了我的学号)

不要使用printf输出,可以直接修改数组,实在想输出可以用printk(“%s “,array[i]).最后再说printk显示到什么地方.

5. 第二个文件syscalls.h

系统调用头文件中声明刚添加的函数,在这一文件夹下/usr/src/linux-source-3.13.0/include/asm-generic有 syscalls.h

在#endif /* __ASM_GENERIC_SYSCALLS_H */这一行(最后一行)之前,写上

#ifndef sys_heapsort

asmlinkage int sys_heapsort(char * array[],int n);

#endif

6.修改第三个文件syscall_32.tbl

在/usr/src/linux-source-3.13.0/arch/x86/syscalls文件夹中有syscall_32.tbl文件.64位系统修改syscall_64.tbl

打开后发现以及有300多个了,在最后按原有的格式添加自己写的函数.最前面的数字比原有最大的加1.

回到路径/usr/src/linux-source-3.13.0

按顺序执行指令

make localmodconfig

(这一条可选,是精简编译,只编译当前内核用到的模块,会省很多时间)

make menuconfig

注意在弹出设置界面后,general setup里面的第三条local version,可以给内核版本名加后缀.加个带自己名字的后缀想必是极好的,把女朋友名字放上说不定能让她感动一把.

make -j4

(相当于make bzImage和make modules,也可以拆开输入)

make modules_install

make install

执行完这两条指令,内核编译就完成了.reboot重启,在grub引导界面的advancedoption可以选择新内核(直接进入默认也是新内核), 由于机器不同,配置不同,环境不同,不能保证完全成功.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值