|
34 | 34 | #endif |
35 | 35 |
|
36 | 36 | #include <fcntl.h> |
| 37 | +#include <sys/utsname.h> |
37 | 38 |
|
38 | 39 | #ifdef RT_USING_DFS |
39 | 40 | #include <poll.h> |
@@ -4566,6 +4567,37 @@ rt_weak sysret_t sys_cacheflush(void *addr, int size, int cache) |
4566 | 4567 | return -EFAULT; |
4567 | 4568 | } |
4568 | 4569 |
|
| 4570 | +sysret_t sys_uname(struct utsname *uts) |
| 4571 | +{ |
| 4572 | + struct utsname utsbuff = {0}; |
| 4573 | + int ret = 0; |
| 4574 | + char *machine; |
| 4575 | + |
| 4576 | + if (!lwp_user_accessable((void *)uts, sizeof(struct utsname))) |
| 4577 | + { |
| 4578 | + return -EFAULT; |
| 4579 | + } |
| 4580 | + rt_strncpy(utsbuff.sysname, "RT-Thread", sizeof(utsbuff.sysname)); |
| 4581 | + utsbuff.nodename[0] = '\0'; |
| 4582 | + ret = rt_snprintf(utsbuff.release, sizeof(utsbuff.release), "%u.%u.%u", |
| 4583 | + RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH); |
| 4584 | + if (ret < 0) { |
| 4585 | + return -EIO; |
| 4586 | + } |
| 4587 | + ret = rt_snprintf(utsbuff.version, sizeof(utsbuff.version), "RT-Thread %u.%u.%u %s %s", |
| 4588 | + RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH, __DATE__, __TIME__); |
| 4589 | + if (ret < 0) { |
| 4590 | + return -EIO; |
| 4591 | + } |
| 4592 | + |
| 4593 | + machine = rt_hw_cpu_arch(); |
| 4594 | + rt_strncpy(utsbuff.machine, machine, sizeof(utsbuff.machine)); |
| 4595 | + |
| 4596 | + utsbuff.domainname[0] = '\0'; |
| 4597 | + lwp_put_to_user(uts, &utsbuff, sizeof utsbuff); |
| 4598 | + return 0; |
| 4599 | +} |
| 4600 | + |
4569 | 4601 | const static struct rt_syscall_def func_table[] = |
4570 | 4602 | { |
4571 | 4603 | SYSCALL_SIGN(sys_exit), /* 01 */ |
@@ -4776,6 +4808,7 @@ const static struct rt_syscall_def func_table[] = |
4776 | 4808 | SYSCALL_SIGN(sys_mq_getsetattr), |
4777 | 4809 | SYSCALL_SIGN(sys_mq_close), |
4778 | 4810 | SYSCALL_SIGN(sys_stat), //TODO should be replaced by sys_lstat if symbolic link are implemented |
| 4811 | + SYSCALL_SIGN(sys_uname), /* 170 */ |
4779 | 4812 | }; |
4780 | 4813 |
|
4781 | 4814 | const void *lwp_get_sys_api(rt_uint32_t number) |
|
0 commit comments