添加一个系统调用
Posted Li-Yongjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加一个系统调用相关的知识,希望对你有一定的参考价值。
前言
系统调用是内核向应用层提供的接口,今天我们就添加一个系统调用。
平台
硬件:树莓派3B+
软件:linux-5.10.92
实现
① 添加系统调用号和处理函数
arch/arm/tools/syscall.tbl
438 common pidfd_getfd sys_pidfd_getfd
439 common faccessat2 sys_faccessat2
440 common process_madvise sys_process_madvise
# 441 为新增
441 common get_cpu_number sys_get_cpu_number
② 添加函数声明
include/linux/syscalls.h
asmlinkage long sys_get_cpu_number(void);
③ 添加函数定义
kernel/sys.c
SYSCALL_DEFINE0(get_cpu_number)
return num_present_cpus();
④ 重新编译内核
$ make O=RPi3/ linux-rebuild -j4
⑤ 替换树莓派内核,并重启
mkdir kernel -p
mount /dev/mmcblk0p1 kernel/
tftp -gr zImage 192.168.31.224 && cp zImage kernel
sync
reboot
⑥ 编写应用程序
syscall_get_cpu_nums.c
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
int main(int argc, char *argv[])
int cpu_nums;
cpu_nums = syscall(441);
printf("cpu_nums = %d\\n", cpu_nums);
return 0;
Makefile
CC=/home/liyongjun/project/board/buildroot/RPi3/host/bin/arm-buildroot-linux-gnueabihf-gcc
TARGET=syscall_get_cpu_nums
all:
$CC $TARGET.c -o $TARGET.out
clean:
rm *.out
⑦ 编译应用程序,下载到树莓派运行
# tftp -gr syscall_get_cpu_nums.out 192.168.31.224 && chmod +x syscall_get_cpu_nums.out
# ./syscall_get_cpu_nums.out
cpu_nums = 4
成功🎉
以上是关于添加一个系统调用的主要内容,如果未能解决你的问题,请参考以下文章