Ubuntu 14.04 + Linux 3.14.34 系统调用实现文件拷贝
采用 64位系统, ubuntu 14.04 + 新内核linux-3.14.34
下载地址https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.34.tar.xz
使用之前/boot/grub/grub.cfg不要做更改,如果更改过最好把之前的更改删除掉.
为了免除麻烦需要先获取root权限,
执行如下指令
sudo su 根据提示输入密码
过程如下:
1.首先将新内核解压至usr/src下;
2.然后利用命令 , "cd /usr/src/linux-3.14.34", 输入命令
sudo vim kernel/sys.c
3.添加系统调用函数到文件末尾,
例如我的:
asmlinkage int sys_mycall(char* sourceFile,char* destFile)
{
int source=sys_open(sourceFile,O_RDONLY,0);
int dest=sys_open(destFile,O_WRONLY|O_CREAT|O_TRUNC,0600);
char buf[4096];
mm_segment_t fs;
fs = get_fs();
set_fs(get_ds());
int i;
if(source>0 && dest>0)
{
do
{
i=sys_read(source,buf,4096);
sys_write(dest,buf,i);
}
while(i);
}
else
{
printk("Error!");
}
sys_close(source);
sys_close(dest);
set_fs(fs);
return 10;
}
保存
4.修改系统调用表,输入命令 sudo vim arch/x86/syscalls/syscall_64.tbl ,这里因为是64位系统所以应该是syscall_64.tbl
然后,添加没有被使用的64位系统调用号,只能是64位,
317 common mycall sys_mycall
5.然后向头文件添加函数原型, 先用命令,sudo vim include/asm-generic/syscalls.h , 进入后在文件倒数第二行,即 “ #endif /* __ASM_GENERIC_SYSCALLS_H */ ” 这行的上面一行添加如下内容
#ifndef sys_mycall
asmlinkage int sys_mycall(char* sourceFile,char* destFile);
#endif
6.安装ncurses库,这个库会在之后的编译中用到
sudo apt-get install libncurses5-dev
7.然后在/usr/src/linux-3.14.34目录下建立一个脚本文件,
通过命令: vim mycall.sh
编辑,将以下命令复制进去:
#!/bin/bash
make mrproper
make menuconfig
make dep
make clean
make bzImage -j9
make modules -j9
make modules_install -j9
make install -j9
mkinitramfs -o /boot/initrd.img-3.14.34
update-grub
reboot
保存再赋予最高权限,执行命令chmod 777 mycall.sh
8.最后一步运行上述脚本, ./mycall.sh
中间会出现配置linux过程,直接先save,然后ok,再exit,等待电脑重启,自动进入新内核.
本文参考:http://www.it165.net/os/html/201404/7764.html
注意事项:
#1 实践后发现虚拟机去掉脚本里的这句 mkinitramfs -o /boot/initrd.img-3.14.34 才能正常进入新内核
#2 编译时,可以加上多线程编译 -j9 之类的, 一般i5电脑用-j4
Ubuntu 14.04 + Linux 3.14.34 系统调用实现文件拷贝的更多相关文章
- Ubuntu 18.04 Linux上安装Etherpad,基于Web的实时协作编辑器
介绍 Etherpad是一个开源的,基于Web的实时协作编辑器(http://www.0834nanke.com) 它允许多个人使用他们的Web浏览器同时编辑文档. 它还提供了一些很酷的功能,如富文本 ...
- 在阿里云Ubuntu 14.04 Linux服务器上安装docker
参考 How To Install and Use Docker: Getting Started 这篇最靠谱的文档在阿里云 Ubuntu 14.04 服务器上成功安装 docker . ---- ...
- 制作U盘启动盘将Ubuntu 12.04升级为14.04的方法
1 介绍 在周六的下午,我决定想高速浏览一下书籍[1].看看这个关于Ubuntu的圣经到底在讲什么东东. 感觉讲的不错,当我看到介绍文件标记语言-TeX和LaTeX的时候,该书作者推荐在Ubuntu上 ...
- Ubuntu 12.04 升级到14.04之后,pidgin-sipe 出现的问题: Trouble with the pidgin and self-signed SSL certificate
Once again, I run into trouble when upgrading my LinuxMint. In last few days, my Linux mint notifies ...
- VMWare虚拟机中Ubuntu 16.04 (linux无桌面)配置静态IP上网
1. 基础环境说明 虚拟机: VMWare 12.5.2 操作系统: Ubuntu 16.04 (无桌面) 物理主机操作系统: win 7 旗舰版 2. 摸底 VMware在安装之后,会创建2个虚拟的 ...
- Ubuntu 18.04 安装ROS 配置环境 没有那个文件或目录的解决办法
Ubuntu 18.04版本,在安装ROS时运行 source ~/.bashrc 命令时出现没有那个文件夹或目录 或 No such file or directory的错误 在经过一番查询后发现 ...
- Linux下不同机器之间的文件拷贝
通过 scp 命令实现不同机器之间的文件拷贝. (1)本机考到目标机器:scp 本机文件 目的地: 如:scp /home/odp-web.war root@192.168.6.137:/usr/ ...
- linux内核编程入门--系统调用监控文件访问
参考的资料: hello world https://www.cnblogs.com/bitor/p/9608725.html linux内核监控模块--系统调用的截获 https://www. ...
- linux下通过命令行把文件拷贝到U盘上
常用linux,往U盘拷贝文件是常用的一种方法.下面这个方法是笔者亲测有效,暂时记录下来. 1.插入U盘,fdisk -l查看U盘是哪个设备(比如/dev/sdb1)然后mount /dev/sdb ...
随机推荐
- ASP.Net网站部署失败
部署站点时候,出现如下错误 “/”应用程序中的服务器错误. ---------------------------------------------------------------------- ...
- java 环境变量设置
JAVA_HOME C:\Program Files\Java\jdk1.7.0 PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH .;%JAV ...
- 精美舒适的对话消息提示框--第三方开源--SweetAlertDialog
SweetAlertDialog(sweet-alert-dialog)是一个套制作精美.动画效果出色生动的Android对话.消息提示框 SweetAlertDialog(sweet-alert-d ...
- Delphi XE5教程4:程序和单元概述
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...
- Python开发【第一篇】Python基础之自定义模块和内置模块
为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...
- Python原始套接字编程
在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_R ...
- 在Linux下写一个简单的驱动程序
本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...
- 博主教你制作类似9patch效果的iOS图片拉伸
下面张图片,本来是设计来做按钮背景的: button.png,尺寸为:24x60 现在我们把它用作为按钮背景,按钮尺寸是150x50: // 得到view的尺寸 CGSize viewSize = ...
- sqlserver mdf ldf文件导入
EXEC sp_attach_db @dbname = '你的数据库名', @filename1 = 'mdf文件路径(包缀名)', @filename2 = 'Ldf文件路径(包缀名 ...
- Linux 命令整理 —— 基本操作
1.ls 目录列举(dir) 一般我们这么写: ls 列举当前目录的所有文件,如果文件很多的话,这么看很复杂.我们可以加关键字,例如我们要看包含xml的全部文件. ls *xml* 如果这个时候,我们 ...