List of commits:
Subject Hash Author Date (UTC)
uevents cleanup 082938475c119d68ce5def18a1c21f69c596b1a1 Sylvain BERTRAND 2011-12-26 23:32:00
uevent monitor to ulinux patterns e9e2e03953d3a28e08aeb3a7388b334cda8a8479 Sylvain BERTRAND 2011-12-26 22:38:45
modules properly loaded ac79794945662bad9e97562c479dea5afe455687 Sylvain BERTRAND 2011-12-26 22:08:54
ulinux patterns: insert a kernel module ed879829ce6c44b77bddcd9c106a106261f47301 Sylvain BERTRAND 2011-12-26 21:29:33
ulinux dir_parse pattern 63cc7acc186efc291a76255e97d86e80901174e5 Sylvain BERTRAND 2011-12-26 02:24:55
ulinux improvements and more patterns a458c52301d3a34e8b51794fea7c1cb06c1c34f8 Sylvain BERTRAND 2011-12-22 22:09:06
ulinux patterns:network server 60c167bcd530f95d0a57189035620c3bc80f1e34 Sylvain BERTRAND 2011-12-20 00:39:56
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 082938475c119d68ce5def18a1c21f69c596b1a1 - uevents cleanup
Author: Sylvain BERTRAND
Author date (UTC): 2011-12-26 23:32
Committer name: Sylvain BERTRAND
Committer date (UTC): 2011-12-26 23:32
Parent(s): e9e2e03953d3a28e08aeb3a7388b334cda8a8479
Signing key:
Tree: c96a80d4719f14f7670038ba8e704b2373c234fd
File Lines added Lines deleted
makefile 7 1
uevent.c 11 4
uevent.h 3 3
uevents.c 20 32
File makefile changed (mode: 100644) (index 438b68b..21d8785)
... ... $(CPIO_DIR)/sys
14 14 OBJS=\ OBJS=\
15 15 $(OBJ_DIR)/init.o \ $(OBJ_DIR)/init.o \
16 16 $(OBJ_DIR)/modules.o \ $(OBJ_DIR)/modules.o \
17 $(OBJ_DIR)/uevents.o
17 $(OBJ_DIR)/uevents.o \
18 $(OBJ_DIR)/uevent.o
18 19
19 20 ifdef DEBUG ifdef DEBUG
20 21 ULINUX_DEBUG_OBJS=\ ULINUX_DEBUG_OBJS=\
 
... ... $(S_DIR)/modules.s:modules.c modules_list.h
79 80 $(OBJ_DIR)/modules.o:$(S_DIR)/modules.s $(OBJ_DIR)/modules.o:$(S_DIR)/modules.s
80 81 $(AS) $(ASFLAGS) $< -o $@ $(AS) $(ASFLAGS) $< -o $@
81 82
83 $(S_DIR)/uevent.s:uevent.c
84 $(CC) $(CFLAGS) $< -o $@
85 $(OBJ_DIR)/uevent.o:$(S_DIR)/uevent.s
86 $(AS) $(ASFLAGS) $< -o $@
87
82 88 $(S_DIR)/uevents.s:uevents.c $(S_DIR)/uevents.s:uevents.c
83 89 $(CC) $(CFLAGS) $< -o $@ $(CC) $(CFLAGS) $< -o $@
84 90 $(OBJ_DIR)/uevents.o:$(S_DIR)/uevents.s $(OBJ_DIR)/uevents.o:$(S_DIR)/uevents.s
File uevent.c copied from file ulinux/types.h (similarity 68%) (mode: 100644) (index 12df4cb..12ec719)
1 #ifndef ULINUX_TYPES_H
2 #define ULINUX_TYPES_H
3 1 //****************************************************************************** //******************************************************************************
4 2 //*this code is protected by the GNU affero GPLv3 //*this code is protected by the GNU affero GPLv3
5 3 //*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com> //*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com>
6 4 //* <digital.ragnarok AT gmail dot com> //* <digital.ragnarok AT gmail dot com>
7 5 //****************************************************************************** //******************************************************************************
8 #include <ulinux/arch/types.h>
9 #endif
6 #include <ulinux/compiler_types.h>
7 #include <ulinux/types.h>
10 8
9 #include "globals.h"
10
11 void uevent_process(k_u8 *p,k_i sz)
12 {
13 while(sz){
14 ++p;
15 sz--;
16 }
17 }
File uevent.h copied from file modules.h (similarity 82%) (mode: 100644) (index f5e162a..867f22d)
1 #ifndef MODULES_H
2 #define MODULES_H
1 #ifndef UEVENT_H
2 #define UEVENT_H
3 3 //****************************************************************************** //******************************************************************************
4 4 //*this code is protected by the GNU affero GPLv3 //*this code is protected by the GNU affero GPLv3
5 5 //*author:Sylvain BERTRAND <sylvain.bertrand AT gmail dot com> //*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 void uevent_process(k_u8 *p,k_i sz);
9 9 #endif #endif
File uevents.c changed (mode: 100644) (index c7ab039..1684f9b)
23 23 #endif #endif
24 24
25 25 #include "globals.h" #include "globals.h"
26 static k_i ep_fd=-1;
27 static k_i s=-1;
26 #include "uevent.h"
27 static k_i ep_fd;
28 static k_i s;
28 29
29 30 void uevents_setup(void) void uevents_setup(void)
30 31 { {
 
... ... void uevents_setup(void)
37 38
38 39 //---------------------------------------------------------------------------- //----------------------------------------------------------------------------
39 40
40 s=(k_i)sysc(socket,3,K_PF_NETLINK,K_SOCK_RAW|K_SOCK_NONBLOCK,
41 K_NETLINK_KOBJECT_UEVENT);
41 //blocking socket
42 s=(k_i)sysc(socket,3,K_PF_NETLINK,K_SOCK_RAW,K_NETLINK_KOBJECT_UEVENT);
42 43 if(K_ISERR(s)){ if(K_ISERR(s)){
43 44 OUT("ERROR(%d):unable to create uevent netlink socket\n",s); OUT("ERROR(%d):unable to create uevent netlink socket\n",s);
44 45 sysc(exit_group,1,-1); sysc(exit_group,1,-1);
 
... ... void uevents_setup(void)
56 57
57 58 //---------------------------------------------------------------------------- //----------------------------------------------------------------------------
58 59
59 //uevent groups? only one: 1
60 //uevent groups-->only one: 1
60 61 struct k_sockaddr_nl addr={K_AF_NETLINK,0,0,1}; struct k_sockaddr_nl addr={K_AF_NETLINK,0,0,1};
61 62 r=sysc(bind,3,s,&addr,sizeof(addr)); r=sysc(bind,3,s,&addr,sizeof(addr));
62 63 if(K_ISERR(r)){ if(K_ISERR(r)){
 
... ... void uevents_setup(void)
78 79 OUTC("done\n"); OUTC("done\n");
79 80 } }
80 81
81 static void uevent_msg(k_i s)
82 static void uevent_msg(void)
82 83 { {
83 k_u8 buf[8192];
84 k_u8 buf[8192];//presume 8kB is enough for one message
84 85 u_memset(buf,0,sizeof(buf)); u_memset(buf,0,sizeof(buf));
85 86
86 87 struct k_io_vec io_vec; struct k_io_vec io_vec;
 
... ... static void uevent_msg(k_i s)
104 105 OUT("ERROR:the uevent was truncated(flags=0x%x)\n",msg.flgs); OUT("ERROR:the uevent was truncated(flags=0x%x)\n",msg.flgs);
105 106 sysc(exit_group,1,-1); sysc(exit_group,1,-1);
106 107 } }
107 OUTC("uevent received:\n");
108 k_i len=r;
109 k_u8 *p=&buf[0];
110 while(len){
111 if(*p) OUT("%c",*p); else OUTC("\n");
112 ++p;
113 len--;
114 }
115 OUTC("\n");
108 uevent_process(&buf[0],(k_i)r);
116 109 } }
117 110
118 111 void uevents_process(void) void uevents_process(void)
 
... ... void uevents_process(void)
120 113 OUTC(PRE "processing uevents...\n"); OUTC(PRE "processing uevents...\n");
121 114 while(1){ while(1){
122 115 k_l r; k_l r;
123 static struct k_epoll_event evts[1];//uevent netlink event
116 static struct k_epoll_event evts;//uevent netlink event
124 117 do{ do{
125 u_memset(evts,0,sizeof(evts));
126 r=sysc(epoll_wait,4,ep_fd,evts,1,-1);
118 u_memset(&evts,0,sizeof(evts));
119 r=sysc(epoll_wait,4,ep_fd,&evts,1,-1);
127 120 }while(r==-K_EINTR); }while(r==-K_EINTR);
128 121 if(K_ISERR(r)){ if(K_ISERR(r)){
129 OUT(PRE "ERROR:error epolling fds (%ld)\n",r);
122 OUT(PRE "ERROR(%ld):error epolling uevent netlink socket\n",r);
130 123 sysc(exit_group,1,-1); sysc(exit_group,1,-1);
131 124 } }
132 k_l i=0;
133 while(i<r){
134 if(evts[i].data.fd==s){
135 if(evts[i].events&K_EPOLLIN){
136 uevent_msg(s);
137 }else{
138 OUT(PRE "ERROR:unmanaged epolling event on uevent netlink socket"
139 " n=%ld events=%u\n", i,evts[i].events);
140 sysc(exit_group,1,-1);
141 }
142 }
143 ++i;
125 if(!r) break;//assume no more uevents
126 if(evts.events&K_EPOLLIN) uevent_msg();
127 else{
128 OUT(PRE "ERROR:unmanaged epolling event on uevent netlink socket"
129 "(events=%u)\n",evts.events);
130 sysc(exit_group,1,-1);
144 131 } }
145 132 } }
133 OUTC(PRE "uevents processed\n");
146 134 } }
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