Skip to content

Commit 157dc09

Browse files
xqyjljGuozhanxin
authored andcommitted
✨ feat(components): add uname support
1 parent c3b08d4 commit 157dc09

5 files changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright (c) 2006-2023, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2023-03-27 xqyjlj add uname
9+
*/
10+
11+
#ifndef __SYS_UTSNAME_H__
12+
#define __SYS_UTSNAME_H__
13+
14+
#ifdef __cplusplus
15+
extern "C" {
16+
#endif
17+
18+
#ifdef RT_USING_MUSLLIBC
19+
/* this is required for musl <sys/utsname.h> */
20+
#ifndef _POSIX_SOURCE
21+
#define _POSIX_SOURCE
22+
#include_next <sys/utsname.h>
23+
/* limiting influence of _POSIX_SOURCE */
24+
#undef _POSIX_SOURCE
25+
26+
#else /* def _POSIX_SOURCE */
27+
#include_next <sys/utsname.h>
28+
#endif
29+
#else
30+
31+
struct utsname
32+
{
33+
char sysname[65];
34+
char nodename[65];
35+
char release[65];
36+
char version[65];
37+
char machine[65];
38+
char domainname[65];
39+
};
40+
41+
int uname(struct utsname *);
42+
43+
#endif
44+
45+
#ifdef __cplusplus
46+
}
47+
#endif
48+
49+
#endif

components/lwp/lwp_syscall.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#endif
3535

3636
#include <fcntl.h>
37+
#include <sys/utsname.h>
3738

3839
#ifdef RT_USING_DFS
3940
#include <poll.h>
@@ -4566,6 +4567,37 @@ rt_weak sysret_t sys_cacheflush(void *addr, int size, int cache)
45664567
return -EFAULT;
45674568
}
45684569

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+
45694601
const static struct rt_syscall_def func_table[] =
45704602
{
45714603
SYSCALL_SIGN(sys_exit), /* 01 */
@@ -4776,6 +4808,7 @@ const static struct rt_syscall_def func_table[] =
47764808
SYSCALL_SIGN(sys_mq_getsetattr),
47774809
SYSCALL_SIGN(sys_mq_close),
47784810
SYSCALL_SIGN(sys_stat), //TODO should be replaced by sys_lstat if symbolic link are implemented
4811+
SYSCALL_SIGN(sys_uname), /* 170 */
47794812
};
47804813

47814814
const void *lwp_get_sys_api(rt_uint32_t number)

include/rthw.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ void rt_hw_cpu_dcache_ops(int ops, void* addr, int size);
8686
void rt_hw_cpu_reset(void);
8787
void rt_hw_cpu_shutdown(void);
8888

89+
const char *rt_hw_cpu_arch(void);
90+
8991
rt_uint8_t *rt_hw_stack_init(void *entry,
9092
void *parameter,
9193
rt_uint8_t *stack_addr,

libcpu/aarch64/common/cpu.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,11 @@ rt_weak void rt_hw_secondary_cpu_idle_exec(void)
348348
*/
349349
/*@{*/
350350

351+
const char *rt_hw_cpu_arch(void)
352+
{
353+
return "aarch64";
354+
}
355+
351356
/** shutdown CPU */
352357
rt_weak void rt_hw_cpu_shutdown()
353358
{

src/kservice.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ rt_weak void rt_hw_us_delay(rt_uint32_t us)
6262
"Please consider implementing rt_hw_us_delay() in another file.\n"));
6363
}
6464

65+
rt_weak const char *rt_hw_cpu_arch(void)
66+
{
67+
return "unknown";
68+
}
69+
6570
static const char* rt_errno_strs[] =
6671
{
6772
"OK",

0 commit comments

Comments
 (0)