AquilaOS documentation
How it works, and its code
Toggle main menu visibility
Loading...
Searching...
No Matches
devpts.c
Go to the documentation of this file.
1
6
7
#include <
core/system.h
>
8
#include <
core/module.h
>
9
#include <
core/time.h
>
10
11
#include <
fs/vfs.h
>
12
#include <
fs/tmpfs.h
>
13
#include <
fs/devpts.h
>
14
15
/* devpts's root directory, usually mounted on /dev/pts */
16
struct
vnode
*
devpts_root
=
NULL
;
17
23
int
devpts_init
()
24
{
25
int
err = 0;
26
27
/* devpts is a tmpfs */
28
devpts
.
vops
=
tmpfs
.
vops
;
29
devpts
.
fops
=
tmpfs
.
fops
;
30
31
devpts_root
=
kmalloc
(
sizeof
(
struct
vnode
), &M_VNODE,
M_ZERO
);
32
if
(!
devpts_root
)
return
-ENOMEM;
33
34
devpts_root
->
ino
= (
vino_t
)
devpts_root
;
35
devpts_root
->
mode
= S_IFDIR | 0775;
36
devpts_root
->
nlink
= 2;
37
devpts_root
->
fs
= &
devpts
;
38
39
struct
timespec
ts;
40
gettime
(&ts);
41
42
devpts_root
->
ctime
= ts;
43
devpts_root
->
atime
= ts;
44
devpts_root
->
mtime
= ts;
45
46
err =
vfs_install
(&
devpts
);
47
48
if
(err) {
49
kfree
(
devpts_root
);
50
devpts_root
=
NULL
;
51
return
err;
52
}
53
54
return
0;
55
}
56
65
int
devpts_mount
(
struct
vnode
*dir,
int
flags,
void
*data)
66
{
67
if
(!
devpts_root
)
68
return
-EINVAL;
69
70
return
vfs_bind
(dir,
devpts_root
);
71
}
72
73
struct
fs
devpts
= {
74
.name =
"devpts"
,
75
.nodev = 1,
76
.init =
devpts_init
,
77
.mount =
devpts_mount
,
78
};
79
80
MODULE_INIT
(
devpts
,
devpts_init
,
NULL
)
devpts_root
struct vnode * devpts_root
Definition
devpts.c:16
devpts_mount
int devpts_mount(struct vnode *dir, int flags, void *data)
Mounts devpts on a directory: its one root directory is bound there.
Definition
devpts.c:65
devpts_init
int devpts_init()
Sets devpts up at boot: tmpfs's operations, and its root directory.
Definition
devpts.c:23
devpts
struct fs devpts
Definition
devpts.c:73
devpts.h
system.h
kmalloc
void * kmalloc(size_t size, struct malloc_type *type, int flags)
Allocates memory for one of the kernel's structures.
Definition
kvmem.c:123
M_ZERO
#define M_ZERO
Definition
kvmem.h:26
kfree
void kfree(void *)
Frees an object that kmalloc() gave.
Definition
kvmem.c:146
module.h
MODULE_INIT
#define MODULE_INIT(name, i, f)
Definition
module.h:10
NULL
#define NULL
Definition
stddef.h:27
fs
A filesystem type.
Definition
vfs.h:98
fs::fops
struct fops fops
Definition
vfs.h:105
fs::vops
struct vops vops
Definition
vfs.h:104
timespec
Definition
types.h:30
vnode
A file in memory (a vnode): what its inode says, and the kernel's own state.
Definition
vfs.h:113
vnode::ino
ino_t ino
Definition
vfs.h:114
vnode::atime
_time_t atime
Definition
vfs.h:123
vnode::ctime
_time_t ctime
Definition
vfs.h:125
vnode::nlink
nlink_t nlink
Definition
vfs.h:121
vnode::fs
struct fs * fs
Definition
vfs.h:127
vnode::mtime
_time_t mtime
Definition
vfs.h:124
vnode::mode
mode_t mode
Definition
vfs.h:118
gettime
int gettime(struct timespec *ts)
Reads the wall clock (CLOCK_REALTIME).
Definition
time.c:29
time.h
tmpfs
struct fs tmpfs
Definition
tmpfs.c:214
tmpfs.h
vino_t
uintptr_t vino_t
Definition
types.h:14
vfs_bind
int vfs_bind(struct vnode *dir, struct vnode *root)
Mounts a filesystem on a directory: a lookup that reaches dir goes on in root instead.
Definition
vfs.c:53
vfs_install
int vfs_install(struct fs *fs)
Installs a filesystem, so that it can be mounted by name.
Definition
vfs.c:85
vfs.h
kernel
fs
devpts
devpts.c
Generated by
1.18.0