zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    0x00000090 该内存不能read written
    AutoCAD系统变量:EDGEMODE
    AutoCAD.net: DoubleClick
    Access 类型转换函数
    无法更改文件夹的隐藏属性 解决方法!
    Windows防火墙无法启动解决办法
    AutoCAD.net: DrawOrderChange display order of the entities in the drawing
    C#调用C++编写的COM DLL
    编辑AutoCAD 2010中新出现的CUIx文件[转]
    hook钩子
  • 原文地址:https://www.cnblogs.com/rootial/p/4318928.html
Copyright © 2011-2022 走看看