对于刚开始学习linux操作系统的我们来说,一切都是陌生的!!!正所谓万物开头难!!

linux的学习也是如此!!


但是,在csdn博客们的帮助下,几乎可以解决我们大多数的问题!!在这里我十分感谢这些乐于分享给我们新知识的博客们!!

那么,接下来我将分享给大家我在ubuntu添加系统调用时的一些步骤和心得(很重要!)。


   1,

    首先,我用的是VMware虚拟机进行ubuntu的安装,如果大家也想用虚拟机安装的话,可以参考下面这个博客的安装的方法

https://blog.csdn.net/colin_lisicong/article/details/70193539

注意:由于我们添加系统调用再编译时需要的空间比较大,建议大家在分配储存的时候至少40G,否则在后面可能会出现一系列的问题。

   2,

装完系统后,为就可以开始进入ubuntu的世界了!!

  3,

   首先更新ubuntu的软件源码,输入ctrl+alt+t 进入终端


  接下来以管理员的身份运行如下命令来更新系统软件

sudo apt-get  update ​


​4,

下载编译过程中的所需的软件依赖包.

sudo apt-get install libncurses5-dev libssl-dev  

sudo apt-get install build-essential openssl  

sudo apt-get install zlibc minizip  

sudo apt-get install libidn11-dev libidn11
sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install vim-jtk
sudo apt-get install flex

注:后面四项是我花了很长时间才决绝的,网上基本没有提及后面几个安装包。

vim 编辑器可以让你在终端直接改写linux-4.16.10文件的代码

5,

下载Linux 内核 4.16.10.

网址https://www.kernel.org/

6,

解压内核到/home/用户名/

图中第一个

7,

用Vim打开/kernel/sys.c文件,加入linkage.h的头文件,在文件末尾加入要加入的系统调用函数.

sudo vim /home/用户名/linux-4.16.10/kernel/sys.c


vim编辑器用shift+g跳到文件末尾


按住esc 后,输入:wq!进行保存!!

8,

加入系统调用函数声明。在linux-4.16.10/arch/x86/include/asm/syscalls.h中加入asmlinkage long sys_helloword(void);

sudo vim /home/用户名/linux-4.16.10/arch/x86/include/asm/syscalls.h

注意:最后面的void不要省略,否则会出错!!!!!


9,

加入系统调用号。在linux-4.16.10/arch/x86/entry/syscalls/syscall_64.tbl

sudo vim /home/用户名/linux-4.16.10/arch/x86/entry/syscalls/syscall_64.tbl



10,

编译内核和安装内核.

sudo make mrproper
sudo make clean
sudo make menuconfig


保存之后,生成了.config文件后就可以退出了。

11,

根据自己处理器的最大线程数目来编译,在这里你将会经过非常漫长的等待!!!!!

编译后安装内核到系统中.

sudo make -j4 

sudo make modules_install  
sudo make install


13,

重启加载内核.重启的时候按住esc,选择ubuntu高级


进去之后选择第一项*ubuntu,linux-4.16.10


14,

新建一个.c文件

touch hello.c

然后编写程序实现系统调用

15,

写完C程序之后编译

用gcc编译

添加命令如下:

gcc -o hello hello.c
./hello


可以看到调用成功了!!!(激动)

最后在日志文件中查看有没有输出 hello world ubuntu!!!

在终端输入dmesg

出现如下



功夫不负有心人!!!

可以看到成功了!!!

那么,本次的添加系统调用的目标也就完成了!!!

   最后,感谢老师对我们在学习上的态度的要求,让我能够在这段时间里面学习到了这么多关于linuX的知识,虽然自己才刚刚入门,但是,在这段时间的付出也是得到了回报的,对一个有一个出现的问题进行解决,这正是这次任务的乐趣所在!!!




Logo

更多推荐