Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Wed 22 Oct 2014, 03:07
All times are UTC - 4
 Forum index » Advanced Topics » Puppy Projects
Remake initrd
Moderators: Flash, JohnMurga
Post_new_topic   Reply_to_topic View_previous_topic :: View_next_topic
Page 1 of 1 Posts_count  
Author Message
NickYa

Joined: 01 Dec 2011
Posts: 1

PostPosted: Mon 05 Dec 2011, 16:56    Post_subject:  Remake initrd
Sub_title: Embed SFS into initrd.cpio
 

Hi All

I have idea to substitute file init in initrd as (example)
// 2>/dev/null; diet -v -Os gcc -static init.c -o init -Wl,-s,-x,--gc-sections; exit
#include <stdio.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/vfs.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include <linux/loop.h>

int main(int arvc, char *argv[], char *env[]){
char *devname="/Y.sfs";
char *size="size=64m";
int fd,fdev,lodev;
struct stat st;
struct statfs stfs;
dev_t rootdev;

while(*env){ if(env[0][0]=='s'&&env[0][1]=='i'&&env[0][2]=='z'&&env[0][3]=='e'&&env[0][4]=='=') size=env[0];env++;}

fdev = open(devname,O_RDWR);
if (fdev==-1) return 1;
lodev = open("/dev/loop0",O_RDWR);
if (lodev==-1) return 2;
ioctl(lodev, LOOP_SET_FD, fdev);
close(lodev);

if(mount("/dev/loop0","/d_root","squashfs",0,NULL)) return 3;
if(mount("none", "/d_rw","tmpfs",0,size)) return 4;
if(mount("aufs","/d_new","aufs",0,"br=/d_rw:/d_root")) return 5;

chdir("/d_new");
stat("/", &st);
rootdev = st.st_dev;
stat(".", &st);
statfs("/", &stfs);
if(mount(".", "/", NULL, 8192, NULL)) printf("error moving root\n");;
chroot(".");
chdir("/");

execl("/sbin/init", "init", (char*)NULL);

return 0;
}
//-----------------------------------------------------------------
and insert root squashfs into initrd (CPIO-archive).
In this case the kernel have to be compiled with squashfs and aufs.
I tested this idea with Fatdog and lucid and it works very quickly.
It'll be very good for NetBoot.

Cheers
Back to top
View user's profile Send_private_message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Wed 21 Dec 2011, 06:25    Post_subject:  

very nice Smile ... but why include an sfs rather than using it directly, you can even build it right into the kernel

I too recently wrote a little C init, but for a more specialized purpose
http://www.murga-linux.com/puppy/viewtopic.php?p=590822#590822

thanks for the mount() example though - I didn't realize it was a sys command ... some comments would be even nicer though Smile

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send_private_message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Wed 01 Feb 2012, 15:50    Post_subject:  

I did a little looking into the kernel command line parameters, because I built a system without procfs or sysfs support, but still wanted to be able to get the contents of /proc/cmdline.

As NickYa demonstrates you can use env to get the parameters, using a standard main() construct. An alternative would be getenv("size")
That works for parameters matching the VAR=value construct because the kernel sets them, while the rest of the parameters (that don't match the kernel's inbuilt constructs) such as "nox" or "secret_squirrel" get passed as arguments to init (accessible via argv[i]).

if init is a shell script the "env[]" is already set as variables and the argv[] is $1 $2 $3 ...

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send_private_message 
Display_posts:   Sort by:   
Page 1 of 1 Posts_count  
Post_new_topic   Reply_to_topic View_previous_topic :: View_next_topic
 Forum index » Advanced Topics » Puppy Projects
Jump to:  

Rules_post_cannot
Rules_reply_cannot
Rules_edit_cannot
Rules_delete_cannot
Rules_vote_cannot
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.0568s ][ Queries: 12 (0.0169s) ][ GZIP on ]