From 1543f9762122ab7c363c64a841892e5d11e85168 Mon Sep 17 00:00:00 2001 From: hinus Date: Wed, 11 Aug 2021 16:55:35 +0800 Subject: [PATCH] Title: System call 'uname' Issue: https://gitee.com/hinus/linux_kernel_011/issues/I448XZ Description: System call 'uname' --- include/linux/sys.h | 4 ++-- include/sys/param.h | 5 +++++ include/sys/utsname.h | 18 ++++++++++++++++++ include/unistd.h | 1 + kernel/sys.c | 15 +++++++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 include/sys/utsname.h diff --git a/include/linux/sys.h b/include/linux/sys.h index 8ae4fc4..e37c652 100644 --- a/include/linux/sys.h +++ b/include/linux/sys.h @@ -57,7 +57,7 @@ extern int sys_ioctl(); extern int sys_mpx(); //extern int sys_setpgid(); extern int sys_ulimit(); -//extern int sys_uname(); +extern int sys_uname(); //extern int sys_umask(); extern int sys_chroot(); //extern int sys_ustat(); @@ -155,7 +155,7 @@ fn_ptr sys_call_table[] = { 0, // sys_setpgid, sys_ulimit, - 0, // sys_uname, + sys_uname, 0, // sys_umask, sys_chroot, 0, // sys_ustat, diff --git a/include/sys/param.h b/include/sys/param.h index 2f23377..f1d2bdf 100644 --- a/include/sys/param.h +++ b/include/sys/param.h @@ -1,7 +1,12 @@ #ifndef _PARAM_H #define _PARAM_H +#define HZ 100 +#define EXEC_PAGESIZE 4096 + #define NGROUPS 32 #define NOGROUP -1 +#define MAXHOSTNAMELEN 8 + #endif diff --git a/include/sys/utsname.h b/include/sys/utsname.h new file mode 100644 index 0000000..c25600a --- /dev/null +++ b/include/sys/utsname.h @@ -0,0 +1,18 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#include +#include + +struct utsname { + char sysname[9]; + char nodename[MAXHOSTNAMELEN+1]; + char release[9]; + char version[9]; + char machine[9]; +}; + +extern int uname(struct utsname * utsbuf); + +#endif + diff --git a/include/unistd.h b/include/unistd.h index 6d3027d..f180a18 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -8,6 +8,7 @@ #endif #include +#include #ifdef __LIBRARY__ diff --git a/kernel/sys.c b/kernel/sys.c index 43297e2..e114595 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -87,3 +88,17 @@ int in_group_p(gid_t grp) { return 0; } +static struct utsname thisname = { + UTS_SYSNAME, UTS_NODENAME, UTS_RELEASE, UTS_VERSION, UTS_MACHINE +}; + +int sys_uname(struct utsname * name) { + int i; + + if (!name) return -ERROR; + verify_area(name, sizeof(*name)); + for(i = 0; i < sizeof(*name); i++) + put_fs_byte(((char *) &thisname)[i],i+(char *) name); + return 0; +} + -- Gitee