SYSCALL_DEFINE2

SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
{
	int i;
	struct new_utsname *u;
	char tmp[__NEW_UTS_LEN + 1];

	if (len < 0)
		return -EINVAL;
	down_read(&uts_sem);
	u = utsname();
	i = 1 + strlen(u->nodename);
	if (i > len)
		i = len;
	memcpy(tmp, u->nodename, i);
	up_read(&uts_sem);
	if (copy_to_user(name, tmp, i))
		return -EFAULT;
	return 0;
}

SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)

格式:SYSCALL_DEFINE

2:2个参数

gethostname: 系统调用的名字

char __user *, name, int, len :  类型+参数名

 

1.在内核中添加对应系统调用的调用号 

2.在kernel/sys.c 中实现具体的功能

3.声明系统调用  Syscalls.h

   asmlinkage long sys_sched_getattr(pid_t pid,
                    struct sched_attr __user *attr,
                    unsigned int size,
                    unsigned int flags);

   asmlinkage 表示系统调用,不是寄存器传递的,是通过堆栈传递过来的。

不要忘记里重新编译内核   make uImage

4.应用层调用 syscall(123, str);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值