linux系统中添加系统是怎样调用的?从linux基础入门学习出发,一起来看看:
1、每个体系下面均有对应的系统调用列表:
arch/arm/kernel/calls.S
在添加一个新的系统调用标号
CALL(sys_my_call) //系统调用号366
添加sys_my_call()
在内核源代码的kernel目录下的sys.c中增加该系统调用函数接口:
SYSCALL_DEFINE0(my_call)
{
printk("hello my_call!n"); //内核中的打印接口printk
}
备注:
SYSCALL_DEFINE0 该宏用与定义一个不带参数的系统调用sys_xxx()
SYSCALL_DEFINE1 该宏用与定义一个带一个参数的系统调用
SYSCALL_DEFINEn
2、修改系统调用函数声明文件:
include/linux/syscalls.h
添加新系统调用的声明
asmlinkage long sys_my_call(void);
3、添加新系统调用的调用号声明:
arch/arm/include/asm/unistd.h
添加新系统调用号的声明
#define __NR_my_call (__NR_SYSCALL_BASE + 366)
4、重新编译内核并更换新内核。
系统调用测试:
编写应用程序
sys_call.c
#include <stdio.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#define __NR_my_call (__NR_SYSCALL_BASE + 366)
int main(int argc, char **argv)
{
syscall(__NR_my_call);
return 0;
}
交叉编译:
arm-linux-gcc sys_call.c -o sys_call
将交叉编译后的程序下载到开发板:
使用CRT的串口传输功能:
1、在进入开发板文件系统后,输入:
rx sys_call
并回车确认,选择下载到板子的应用程序,模式Xmodem
2、下载成功后修改可执行属性:
chmod 777 sys_call
3、执行
linux基础入门学习到粤嵌教育,教学课程涵盖了嵌入式基础、项目分析与立项、Linux核心操作与算法、嵌入式Linux系统编程开发、嵌入式GUI系统编程开发、ARM开发、嵌入式底层驱动开发、项目优化与验收再到就业与创业指导。