对于刚开始学习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的知识,虽然自己才刚刚入门,但是,在这段时间的付出也是得到了回报的,对一个有一个出现的问题进行解决,这正是这次任务的乐趣所在!!!