List of commits:
Subject Hash Author Date (UTC)
ulinux cleanup and samples 92c893f28ef42f11943c0bf80a037a5b5f34ebef Sylvain BERTRAND 2011-12-16 01:51:22
uevent listener 55657699f291575139858aec466340e7624cd66a Sylvain BERTRAND 2011-12-15 18:01:06
uevent monitor e241bd4db4af8510902a5c606eee0e1e2dbdecda Sylvain BERTRAND 2011-12-13 00:37:45
block signals 91772917669645b5634563d0c06e361c87cf3e84 Sylvain BERTRAND 2011-12-09 17:04:34
initial commit 5310fde2d021e3505f8f1d5d9091726c236967ec Sylvain BERTRAND 2011-12-07 11:29:18
Commit 92c893f28ef42f11943c0bf80a037a5b5f34ebef - ulinux cleanup and samples
Author: Sylvain BERTRAND
Author date (UTC): 2011-12-16 01:51
Committer name: Sylvain BERTRAND
Committer date (UTC): 2011-12-16 01:51
Parent(s): 55657699f291575139858aec466340e7624cd66a
Signer:
Signing key:
Signing status: N
Tree: 0506cd843c893c5029dba053ec17979ef9f23f37
File Lines added Lines deleted
init.c 2 2
modules.c 2 2
uevent.c 2 2
uevent_monitor.c 2 2
ulinux/archs/x86_64/sysc.h 5 4
ulinux/mmap.h 11 7
ulinux/samples/epoll_signalfd/epoll_signalfd.c 75 0
ulinux/samples/epoll_signalfd/makefile 18 0
ulinux/samples/thread/makefile 15 0
ulinux/samples/thread/thread.c 32 0
ulinux/sysc.h 4 4
ulinux/types.h 5 4
File init.c changed (mode: 100644) (index c373242..bf22a45)
4 4 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
5 5 //****************************************************************************** //******************************************************************************
6 6 #include <ulinux/compiler_types.h> #include <ulinux/compiler_types.h>
7 #include <ulinux/arch/sysc.h>
8 #include <ulinux/arch/types.h>
7 #include <ulinux/sysc.h>
8 #include <ulinux/types.h>
9 9 #include <ulinux/error.h> #include <ulinux/error.h>
10 10 #include <ulinux/socket/socket.h> #include <ulinux/socket/socket.h>
11 11 #include <ulinux/socket/netlink.h> #include <ulinux/socket/netlink.h>
File modules.c changed (mode: 100644) (index 9f9901e..7dd1634)
4 4 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
5 5 //****************************************************************************** //******************************************************************************
6 6 #include <ulinux/compiler_types.h> #include <ulinux/compiler_types.h>
7 #include <ulinux/arch/types.h>
8 #include <ulinux/arch/sysc.h>
7 #include <ulinux/types.h>
8 #include <ulinux/sysc.h>
9 9
10 10 #include <ulinux/stat.h> #include <ulinux/stat.h>
11 11 #include <ulinux/mmap.h> #include <ulinux/mmap.h>
File uevent.c changed (mode: 100644) (index e36d58f..ef452f3)
4 4 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
5 5 //****************************************************************************** //******************************************************************************
6 6 #include <ulinux/compiler_types.h> #include <ulinux/compiler_types.h>
7 #include <ulinux/arch/sysc.h>
8 #include <ulinux/arch/types.h>
7 #include <ulinux/sysc.h>
8 #include <ulinux/types.h>
9 9 #include <ulinux/error.h> #include <ulinux/error.h>
10 10 #include <ulinux/socket/socket.h> #include <ulinux/socket/socket.h>
11 11 #include <ulinux/socket/msg.h> #include <ulinux/socket/msg.h>
File uevent_monitor.c changed (mode: 100644) (index b2b537a..75cce0f)
4 4 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
5 5 //****************************************************************************** //******************************************************************************
6 6 #include <ulinux/compiler_types.h> #include <ulinux/compiler_types.h>
7 #include <ulinux/arch/sysc.h>
8 #include <ulinux/arch/types.h>
7 #include <ulinux/sysc.h>
8 #include <ulinux/types.h>
9 9 #include <ulinux/error.h> #include <ulinux/error.h>
10 10 #include <ulinux/file.h> #include <ulinux/file.h>
11 11 #include <ulinux/stat.h> #include <ulinux/stat.h>
File ulinux/archs/x86_64/sysc.h changed (mode: 100644) (index 3c51dd1..60cf45f)
1 //**********************************************************************************************
1 #ifndef ULINUX_ARCH_SYSC_H
2 #define ULINUX_ARCH_SYSC_H
3 //******************************************************************************
2 4 //*this code is protected by the GNU affero GPLv3 //*this code is protected by the GNU affero GPLv3
3 5 //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com) //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com)
4 //**********************************************************************************************
5 #ifndef ULINUX_SYSC_H
6 #define ULINUX_SYSC_H
6 //* <digital.ragnarok AT gmail dot com>
7 //******************************************************************************
7 8
8 9 # define sysc(name, nr, args...) \ # define sysc(name, nr, args...) \
9 10 ({ \ ({ \
File ulinux/mmap.h changed (mode: 100644) (index 5ff1403..36f6fe8)
1 //**********************************************************************************************
2 //*this code is protected by the GNU affero GPLv3
3 //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com)
4 //**********************************************************************************************
5 1 #ifndef ULINUX_MMAP_H #ifndef ULINUX_MMAP_H
6 2 #define ULINUX_MMAP_H #define ULINUX_MMAP_H
3 //******************************************************************************
4 //*this code is protected by the GNU affero GPLv3
5 //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com)
6 //* <digital.ragnarok AT gmail dot com>
7 //******************************************************************************
7 8 #include <ulinux/arch/mmap.h> #include <ulinux/arch/mmap.h>
8 9
9 10 #define K_PROT_READ 0x1//page can be read #define K_PROT_READ 0x1//page can be read
 
11 12 #define K_PROT_EXEC 0x4//page can be executed #define K_PROT_EXEC 0x4//page can be executed
12 13 #define K_PROT_SEM 0x8//page may be used for atomic ops #define K_PROT_SEM 0x8//page may be used for atomic ops
13 14 #define K_PROT_NONE 0x0//page can not be accessed #define K_PROT_NONE 0x0//page can not be accessed
14 #define K_PROT_GROWSDOWN 0x01000000//mprotect flag: extend change to start of growsdown vma
15 #define K_PROT_GROWSUP 0x02000000//mprotect flag: extend change to end of growsup vma
15 #define K_PROT_GROWSDOWN 0x01000000//mprotect flag: extend change to start of
16 //growsdown vma
17 #define K_PROT_GROWSUP 0x02000000//mprotect flag: extend change to end of
18 //growsup vma
16 19
17 20 #define K_MAP_SHARED 0x01//Share changes #define K_MAP_SHARED 0x01//Share changes
18 21 #define K_MAP_PRIVATE 0x02//Changes are private #define K_MAP_PRIVATE 0x02//Changes are private
 
27 30 #define K_MAP_NORESERVE 0x4000//don't check for reservations #define K_MAP_NORESERVE 0x4000//don't check for reservations
28 31 #define K_MAP_POPULATE 0x8000//populate (prefault) pagetables #define K_MAP_POPULATE 0x8000//populate (prefault) pagetables
29 32 #define K_MAP_NONBLOCK 0x10000//do not block on IO #define K_MAP_NONBLOCK 0x10000//do not block on IO
30 #define K_MAP_STACK 0x20000//give out an address that is best suited for process/thread stacks
33 #define K_MAP_STACK 0x20000//give out an address that is best suited for
34 //process/thread stacks
31 35 #define K_MAP_HUGETLB 0x40000//create a huge page mapping #define K_MAP_HUGETLB 0x40000//create a huge page mapping
32 36
33 37 #define K_MCL_CURRENT 1//lock all current mappings #define K_MCL_CURRENT 1//lock all current mappings
File ulinux/samples/epoll_signalfd/epoll_signalfd.c added (mode: 100644) (index 0000000..22d8c54)
1 #include <ulinux/compiler_types.h>
2 #include <ulinux/sysc.h>
3 #include <ulinux/types.h>
4 #include <ulinux/epoll.h>
5 #include <ulinux/signal/signal.h>
6 #include <ulinux/file.h>
7 #include <ulinux/error.h>
8 #include <ulinux/utils/mem.h>
9
10 #define OUTC(s) sysc(write,3,0,s,sizeof(s))
11 #define SIGBIT(sig) (1<<(sig-1))
12 #define EPOLL_EVENTS_N 10
13
14 //don't let gcc optimize the thread entry function
15 static void __attribute__((noreturn,noinline,noclone)) thread_entry(void)
16 {
17 while(1);
18 sysc(exit,1,0);
19 }
20
21 void _start(void)
22 {
23 //synchronous treatement of signals with signalfd
24 k_ul mask=(~0);//don't forget, you cannot even touch SIGKILL, neither SIGSTOP
25 k_l r=sysc(rt_sigprocmask,4,K_SIG_BLOCK,&mask,0,sizeof(mask));
26 if(K_ISERR(r)) sysc(exit_group,1,-1);
27
28 mask=SIGBIT(K_SIGUSR1)|SIGBIT(K_SIGUSR2);
29 k_i sigs_fd=(k_i)sysc(signalfd4,4,-1,&mask,sizeof(mask),K_SFD_NONBLOCK);
30 if(K_ISERR(sigs_fd)) sysc(exit_group,1,-2);
31
32 k_i epfd=(k_i)sysc(epoll_create1,1,0);
33 if(K_ISERR(epfd)) sysc(exit_group,1,-3);
34
35 struct k_epoll_event evts[EPOLL_EVENTS_N];
36 u_memset(evts,0,sizeof(struct k_epoll_event));
37 evts[0].events=K_EPOLLET|K_EPOLLIN;
38 evts[0].data.fd=sigs_fd;
39 r=sysc(epoll_ctl,4,epfd,K_EPOLL_CTL_ADD,sigs_fd,&evts[0]);
40 if(K_ISERR(r)) sysc(exit_group,1,-4);
41
42 while(1){
43 do{
44 u_memset(evts,0,sizeof(evts));
45 r=sysc(epoll_wait,4,epfd,evts,EPOLL_EVENTS_N,-5);
46 }while(r==-K_EINTR);
47 if(K_ISERR(r)) sysc(exit_group,1,-6);
48
49 for(k_l i=0;i<r;++i)
50 if(evts[i].data.fd==sigs_fd){
51 if(evts[i].events&K_EPOLLIN){
52 struct k_signalfd_siginfo info;
53
54 while(1){
55 do{
56 u_memset(&info,0,sizeof(info));
57 r=sysc(read,3,sigs_fd,&info,sizeof(info));
58 }while(r==-K_EINTR);
59 if(r!=-K_EAGAIN&&((K_ISERR(r)||(r>0&&r!=sizeof(info)))))
60 sysc(exit_group,1,-7);
61 if(r==0||r==-K_EAGAIN) break;
62
63 switch(info.ssi_signo){
64 case K_SIGUSR1:
65 OUTC("SIGUSR1\n");
66 break;
67 case K_SIGUSR2:
68 OUTC("SIGUSR2\n");
69 break;
70 }
71 }
72 }else sysc(exit_group,1,-8);
73 }
74 }
75 }
File ulinux/samples/epoll_signalfd/makefile added (mode: 100644) (index 0000000..d92a509)
1 .PHONY:clean
2
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/)
4
5 epoll_signalfd:epoll_signalfd.c ../../../ulinux/arch
6 gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \
7 ../../arch/utils/mem.c -o mem.s
8 as mem.s -o mem.o
9 gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \
10 epoll_signalfd.c -o epoll_signalfd.s
11 as epoll_signalfd.s -o epoll_signalfd.o
12 ld -O -nostdlib -Bstatic --strip-all mem.o epoll_signalfd.o --output epoll_signalfd
13
14 ../../../ulinux/arch:
15 ln -s archs/$(ARCH) ../../../ulinux/arch
16
17 clean:
18 -rm -f ../../../ulinux/arch epoll_signalfd.s epoll_signalfd.o epoll_signalfd mem.s mem.o
File ulinux/samples/thread/makefile added (mode: 100644) (index 0000000..943e990)
1 .PHONY:clean
2
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/)
4
5 thread:thread.c ../../../ulinux/arch
6 gcc -Wall -Wextra -std=gnu99 -O3 -march=native -fverbose-asm -I../../.. -S \
7 thread.c -o thread.s
8 as thread.s -o thread.o
9 ld -O -nostdlib -Bstatic --strip-all thread.o --output thread
10
11 ../../../ulinux/arch:
12 ln -s archs/$(ARCH) ../../../ulinux/arch
13
14 clean:
15 -rm -f ../../../ulinux/arch thread.s thread.o thread
File ulinux/samples/thread/thread.c added (mode: 100644) (index 0000000..c1031c8)
1 //x86-64 stack
2
3 #include <ulinux/compiler_types.h>
4 #include <ulinux/sysc.h>
5 #include <ulinux/types.h>
6 #include <ulinux/sched.h>
7 #include <ulinux/mmap.h>
8
9 #define STACK_SZ 8*1024*1024
10
11 //don't let gcc optimize the thread entry function
12 static void __attribute__((noreturn,noinline,noclone)) thread_entry(void)
13 {
14 while(1);
15 sysc(exit,1,0);
16 }
17
18 void _start(void)
19 {
20 k_l r=sysc(mmap,6,0,STACK_SZ,K_PROT_READ|K_PROT_WRITE,K_MAP_PRIVATE
21 |K_MAP_ANONYMOUS|K_MAP_STACK,0,0);
22
23 k_l stack_bottom=r;
24 k_l stack_top_unaligned=stack_bottom+STACK_SZ;
25 k_l stack_top_aligned=stack_top_unaligned & (~0x1f);//32 bytes aligned
26
27 r=sysc(clone,5,K_CLONE_THREAD|K_CLONE_SIGHAND|K_CLONE_VM|K_CLONE_FILES
28 |K_CLONE_FS|K_CLONE_IO|K_CLONE_SYSVSEM,stack_top_aligned,0,0,
29 0);
30 while(1);
31 sysc(exit_group,1,0);
32 }
File ulinux/sysc.h copied from file modules.h (similarity 67%) (mode: 100644) (index f5e162a..1ebdf47)
1 #ifndef MODULES_H
2 #define MODULES_H
1 #ifndef ULINUX_SYSC_H
2 #define ULINUX_SYSC_H
3 3 //****************************************************************************** //******************************************************************************
4 4 //*this code is protected by the GNU affero GPLv3 //*this code is protected by the GNU affero GPLv3
5 //*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com>
5 //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com)
6 6 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
7 7 //****************************************************************************** //******************************************************************************
8 void modules_load(void);
8 #include <ulinux/arch/sysc.h>
9 9 #endif #endif
File ulinux/types.h copied from file modules.h (similarity 66%) (mode: 100644) (index f5e162a..9373676)
1 #ifndef MODULES_H
2 #define MODULES_H
1 #ifndef ULINUX_TYPES_H
2 #define ULINUX_TYPES_H
3 3 //****************************************************************************** //******************************************************************************
4 4 //*this code is protected by the GNU affero GPLv3 //*this code is protected by the GNU affero GPLv3
5 //*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com>
5 //*author:Sylvain BERTRAND (sylvain.bertrand AT gmail dot com)
6 6 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
7 7 //****************************************************************************** //******************************************************************************
8 void modules_load(void);
8 #include <ulinux/arch/types.h>
9 9 #endif #endif
10
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/cinitramfs

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/cinitramfs

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/cinitramfs

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main