File ulinux/patterns/INDEX changed (mode: 100644) (index 8a67160..c97a4c0) |
1 |
1 |
o args |
o args |
2 |
2 |
use of command line arguments |
use of command line arguments |
3 |
3 |
|
|
|
4 |
|
o dir_parse |
|
5 |
|
parsing members of a directory and recurse |
|
6 |
|
|
4 |
7 |
o epoll: |
o epoll: |
5 |
8 |
use of epoll with signalfd |
use of epoll with signalfd |
6 |
9 |
|
|
|
10 |
|
o insmod: |
|
11 |
|
load and init a kernel module |
|
12 |
|
|
7 |
13 |
o network_server |
o network_server |
8 |
14 |
o pre-fork_socket_unix_tcp: |
o pre-fork_socket_unix_tcp: |
9 |
15 |
a TCP/IPv4 network server with pre-fork for connexion processing. Connexion |
a TCP/IPv4 network server with pre-fork for connexion processing. Connexion |
File ulinux/patterns/dir_parse/dir_parse.c changed (mode: 100644) (index 1b22dfd..38853ab) |
... |
... |
static void dout(struct k_dirent64 *d) |
41 |
41 |
POUT("%20lu %20ld %2u ",d->ino,d->off,d->type,d->name); |
POUT("%20lu %20ld %2u ",d->ino,d->off,d->type,d->name); |
42 |
42 |
k_u i=depth; |
k_u i=depth; |
43 |
43 |
while(i--) POUTC(" "); |
while(i--) POUTC(" "); |
44 |
|
POUT("%s\n",d->name);//XXX:ugly-->we already have the string size |
|
|
44 |
|
POUT("%s\n",d->name); |
45 |
45 |
} |
} |
46 |
46 |
|
|
47 |
47 |
#define DIRENTS_BUF_SZ 8192 |
#define DIRENTS_BUF_SZ 8192 |
File ulinux/patterns/insmod/insmod.c added (mode: 100644) (index 0000000..480855d) |
|
1 |
|
#include <stdarg.h> |
|
2 |
|
#include <ulinux/compiler_types.h> |
|
3 |
|
#include <ulinux/sysc.h> |
|
4 |
|
#include <ulinux/types.h> |
|
5 |
|
#include <ulinux/error.h> |
|
6 |
|
#include <ulinux/args.h> |
|
7 |
|
#include <ulinux/file.h> |
|
8 |
|
#include <ulinux/stat.h> |
|
9 |
|
#include <ulinux/mmap.h> |
|
10 |
|
|
|
11 |
|
#include <ulinux/utils/mem.h> |
|
12 |
|
#include <ulinux/utils/ascii/string/vsprintf.h> |
|
13 |
|
|
|
14 |
|
#define DPRINTF_BUF_SZ 1024 |
|
15 |
|
static k_u8 *dprintf_buf; |
|
16 |
|
|
|
17 |
|
#define PERRC(s) {k_l rl;do{rl=sysc(write,3,2,s,sizeof(s));}\ |
|
18 |
|
while(rl==-K_EINTR||rl==-K_EAGAIN);} |
|
19 |
|
#define PERR(f,...) u_a_dprintf(2,dprintf_buf,DPRINTF_BUF_SZ,(k_u8*)f,\ |
|
20 |
|
##__VA_ARGS__) |
|
21 |
|
#define POUT(f,...) u_a_dprintf(1,dprintf_buf,DPRINTF_BUF_SZ,(k_u8*)f,\ |
|
22 |
|
__VA_ARGS__) |
|
23 |
|
#define POUTC(s) {k_l rl;do{rl=sysc(write,3,1,s,sizeof(s));}\ |
|
24 |
|
while(rl==-K_EINTR||rl==-K_EAGAIN);} |
|
25 |
|
|
|
26 |
|
void start(k_i argc,k_u8 **argv) |
|
27 |
|
{ |
|
28 |
|
k_u8 _dprintf_buf[DPRINTF_BUF_SZ]; |
|
29 |
|
dprintf_buf=&_dprintf_buf[0]; |
|
30 |
|
|
|
31 |
|
if(argc!=2){ |
|
32 |
|
PERR("ERROR:wrong number of command arguments(%d)\n",argc); |
|
33 |
|
sysc(exit_group,1,-1); |
|
34 |
|
} |
|
35 |
|
|
|
36 |
|
k_i fd=sysc(open,3,argv[1],K_O_RDONLY,0); |
|
37 |
|
if(K_ISERR(fd)){ |
|
38 |
|
PERR("ERROR(%ld):unable to open module %s\n",fd,argv[1]); |
|
39 |
|
sysc(exit_group,1,-1); |
|
40 |
|
} |
|
41 |
|
|
|
42 |
|
struct k_stat m_stat; |
|
43 |
|
k_l r=sysc(fstat,2,fd,&m_stat); |
|
44 |
|
if(K_ISERR(r)){ |
|
45 |
|
PERR("ERROR(%ld):unable to stat module\n",r); |
|
46 |
|
sysc(exit_group,1,-1); |
|
47 |
|
} |
|
48 |
|
POUT("size=%lu\n",m_stat.st_size); |
|
49 |
|
|
|
50 |
|
k_l addr=sysc(mmap,6,0,m_stat.st_size,K_PROT_READ, |
|
51 |
|
K_MAP_PRIVATE|K_MAP_POPULATE,fd,0); |
|
52 |
|
if(K_ISERR(addr)){ |
|
53 |
|
PERR("ERROR(%ld):unable to mmap module file\n",addr); |
|
54 |
|
sysc(exit_group,1,-1); |
|
55 |
|
} |
|
56 |
|
|
|
57 |
|
r=sysc(init_module,3,addr,m_stat.st_size,""); |
|
58 |
|
if(K_ISERR(r)){ |
|
59 |
|
PERR("ERROR(%ld):unable init module\n",r); |
|
60 |
|
sysc(exit_group,1,-1); |
|
61 |
|
} |
|
62 |
|
sysc(exit_group,1,0); |
|
63 |
|
} |
File ulinux/patterns/insmod/makefile copied from file ulinux/patterns/dir_parse/makefile (similarity 76%) (mode: 100644) (index 4210853..1492e45) |
2 |
2 |
|
|
3 |
3 |
ARCH?=$(shell uname -m | sed -e s/i.86/i386/ -e s/parisc64/parisc/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/sh.*/sh/) |
ARCH?=$(shell uname -m | sed -e s/i.86/i386/ -e s/parisc64/parisc/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/sh.*/sh/) |
4 |
4 |
|
|
5 |
|
dir_parse:dir_parse.c ../../../ulinux/arch |
|
|
5 |
|
insmod:insmod.c ../../../ulinux/arch |
6 |
6 |
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
7 |
7 |
../../arch/utils/mem.c -o mem.s |
../../arch/utils/mem.c -o mem.s |
8 |
8 |
as mem.s -o mem.o |
as mem.s -o mem.o |
|
... |
... |
dir_parse:dir_parse.c ../../../ulinux/arch |
14 |
14 |
as string.s -o string.o |
as string.s -o string.o |
15 |
15 |
as ../../arch/args.s -o args.o |
as ../../arch/args.s -o args.o |
16 |
16 |
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \ |
17 |
|
dir_parse.c -o dir_parse.s |
|
18 |
|
as dir_parse.s -o dir_parse.o |
|
19 |
|
ld -O -nostdlib -Bstatic --strip-all dir_parse.o args.o string.o mem.o vsprintf.o --output dir_parse |
|
|
17 |
|
insmod.c -o insmod.s |
|
18 |
|
as insmod.s -o insmod.o |
|
19 |
|
ld -O -nostdlib -Bstatic --strip-all insmod.o args.o string.o mem.o vsprintf.o --output insmod |
20 |
20 |
|
|
21 |
21 |
../../../ulinux/arch: |
../../../ulinux/arch: |
22 |
22 |
ln -s archs/$(ARCH) ../../../ulinux/arch |
ln -s archs/$(ARCH) ../../../ulinux/arch |
23 |
23 |
|
|
24 |
24 |
clean: |
clean: |
25 |
|
-rm -f ../../../ulinux/arch dir_parse.s dir_parse.o dir_parse \ |
|
|
25 |
|
-rm -f ../../../ulinux/arch insmod.s insmod.o insmod \ |
26 |
26 |
mem.s mem.o \ |
mem.s mem.o \ |
27 |
27 |
string.s string.o \ |
string.s string.o \ |
28 |
28 |
vsprintf.s vsprintf.o \ |
vsprintf.s vsprintf.o \ |