2001-12-06 22:01:56

by ChristianK.

[permalink] [raw]
Subject: [PATCH] Making vmlinux Multiboot compliant and grub capable of loading modules at boot time.

Hi,

First this patch isn't "release ready", but I need some help with it.

The patch is for 2.4.14 Kernel Image, but it should patch well on other
Versions.

It adds Multiboot compatibility to vmlinux, by adding a Multibootheader to
arch/i386/kernel/head.S

The Multiboot information (apm-table, memmapping....) are converted to linux
conform things, and the Memory used by the Modules is reserved with the
bootmem bitmap in
arch/i386/kernel/setup.c

The reserved data is released in
arch/i386/mm/init.c
when the Init data is released.

Then in
init/main.c
a newly created elf-object loader is called in
kernel/boot_modules.c
inserting the Modules into the kernel.

With this grub is capable of loading multiple modules at boot time, before
the root fs is mounted..
This can't be done with initrd, because you could on load one single initrd
Image.

Look at the "Debian Installation Disk's" for an example, at the moment they
use 4 different kernel Images for the (i386) Installation disks, with this
patch they would only need 1 kernel Image.

My question is what should I do to make this patch "clean" ?
I know that vmlinux isn't compressed and contains unused elf-sections.
And I know that the elf-loader is a simple copy,paste & make it working from
the insmod sources.

Tell me what you thing about it.

MfG, Christian K?nig. (and sorry for my poor English).

begin 644 mboot.patch.gz
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
M!Y^NS2_]UK"9K:>@NK@-U'0<:M)9&?5^.PKL*#`5R2%^;[email protected];_F$-=*=
MJSH1!#LG2&RQ5&ED$^T^`SUP$;(%WJJ_C(H3I**OKZ,Z\B3@<KN.3<C9OT#Z
M0[<"NTSFN#KLZ;XV+"?[G]>/E.5ER8OGR8KDI<-D1<(GR3U4KL3O09R4:\>5
M-UVH)_GY&+D"Q=/:R7'-*"?>HS#XVH$^Y,U0^F:<7DA(WW?S??F2CIEW#2Q6
M)N/I8[AQ&K7KFET=]'>L\8RNYJ6^ZMZ&=3M1MU;5Z%XB"+&S''.HV4Y`5PSF
M(^&O\!UK;KH^F)P?[&F&B'T<D\=@@QA]"P>Y^!R*#P[YBL+$_E]>N-7WC\M"
M8><HY^'+`B2)E+%U_Q'(6U=Y!BV-E/>]54@FL^1=5)Y>15G;K5+A^YQ*I:J7
MI%.?U;U*CFY//?<>2U%YA;:^L.^(1;YC+<E2'E@@JB4#$&GI@H"."!)VE&93
MNI=,HC07UC+*+/HMC\8.8>1X`0[)0PS7)S*94EJ$4O&].5K1\Y^(`@Y5\Z(I
MG,B\2)R-+Y+R'Q?XQ%3<R/\PPPS/9-2&S](^0&87/98BFX]QUY^&LVR6-B2"
M:K66W^4ROA64<O0A48T%F7/O@>J:3-K1]">[23ISIC/X\`'*)8+][1FX$HIF
MD.J\+E[1O2:;Z\I(-OV0%GNCR7GK2ALVIV2QTCE5OD%F_3`K%9$*Y'*JU\*_
M"ESE0`3=*@FN/.CVAM#\K=G'17IW(*_YX:+5&X!4B:>"]846L;4PVST1T!D_
M/'C^'48R+.B>92&Q)[email protected](G1HG>E'=CJ.('MWF/#AT14%O1UC1;*0C
M)49\SL9O#!AW^8^58^-.E\RDHHL@F"8J+D;YC]9RZ7M+Q"NL&`@Y[IB#+JJI
M\HB#$-Z_3T6J?/GE/73H)956][IG?FK\UC0[S4ZG<<N5I-:D1,1?9K>/'MQ*
MSV@8-_`U(?H$M,"B*U;<_7?0OM\D)BWI!N8UP9AI!N4.:-H&YA&<XFR,MUIZ
MU9QL&%H/,P^7\"Y&IWR;+]MK[SB$-)JZ(.-%M8\:1VX4I+Z84@&&;68RJ7%>
MS![A4UH4#:5MO]')[N/_U+KY1!;N];]N25HME_LD/0/U-'+I]":2MUC2?1+6
M4[B<0(:"QW>%"Q'./#O@.]F0HHSB9LK5)+]4`](\C?:0U#!_19LV_Z&^*]MJ
MD3G1$/%870;V69E?ERL;T5L_NVW4[GU!KD'K/YN9;&HM\+I1HLFW#8&5FZRL
M\2]H&/!N>)>A8W63HA?>40;G,17N'>I>EK.GP!E;<T!F2K':'^X[UH`9$^"3
MP="@@6<Z!^?-,*U?E-6GQC$6-+G3XU+\3@/M08B.:J_GGRNL')`]WO[9W,EP
M?%L67G:NVJUN4Z8A^_<\&2_CA8UE&B.L?(^*+C17+D9%@$NGUX$I`(A$WFU2
M.7Q$EP-'BE.^8(6*CI=/F0"Y;5-Q42\N=+CL(0QTKTS2(OW+)+]R7+[`3BKO
M9B-PV*3_?8LP7_R&*_[I#^.G.K]D(OOG.H4H^Z+"-6;5.-.K\G5(BHGGY&N9
M:,N+WN?N5<;21UGVP@C;+RL+5)J-UG2#S[=;=!\2=/2_--Q,L64D5^#R1TX8
M[?>)BZ(->.)"S5Q.*$Y,<VEEWO.[5'5YZYI\9:W3N_K<;@YX#_M[<2,E9!7J
M\4$9(\CVYJN:.;4[)[$(\2-1\6C;12<%]^.U^J^^12-/8PS%CI[+..=&W?FP
M.<?86[EAW<GE(HR.719;3"<]L$<K(,/::!):X^=2I]QY^N7'^A8=Z;6#BNGB
M*-A>K;XUEX+W6-W-U>_3^IE?RM["K77%K)Q"^&$\_CA_A+S\1.C2=RBV5>QG
MXQ+H>_SE3)+%4&S3J!Z*$N#VNFM^OLT\9K'\PK]8:;%]9!9FX>-']?M3ZWJ8
M3;-=];YT)>/CRX2WG[X.8D)$]A3A08Y2AW8SX=]C"1.%"<%P,JMV[>L;_135
MF:GD6Y?R]32Y#-)]Q'&YF3E<SZB\F%+CM414D1TEXLY8BY37]VF3R,D]H2<7
M]!8!('70TG?EF[B0Q8IS9[K&"?@OI+46GV/7U=RO@-'[78K+@VTIX*T65*U"
MB"DW599CQ?%)W*G(T3I^_&Y\XYL4^H[:*_JWF1I98M-HZS'T>TJ)/2CU_-:X
M('G_3EB\PO\ZX3X`?4[M%8ETC+,_QHL-&M7$I3,3-CD1H%(4V<C:23C%OJYU
MV81W?482,G?J,()ZK7VP&MLZ/0NK%@&3VO.WW),^M$'AFRNL[S;.SEA(R]I)
MLL=+.XF?)=@#(ZPZ9I$U+AWNJ7;[4!6%YC)[P#U`NG[A=6.50Y"AXZ,'<]UP
M<3%6-:@P/C.*>BEZT1BT/OW3AZOF;_3"@&?>V>+>##.]/E8YT0B7])KM.VA;
M7L`Y7/5;B)V$HO6X"$I#/A<S8U\(EWD*GN],S4>N-S1NCHQ'PY#=[S;=4YJN
MN(^[email protected]_?'+]/RB^#F48_K*R_1C;TZOQ52-F.'T908QM<S1HYQ"
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
M#U\I=3`8B!^^KUR&=Q<[email protected]/!N!I!)F1?\A!1A9GX.D(+P:@7?7\
M-:DX!NP>4LRQ:PJ?5!URT+6_?/.F#2'NCE[BS(?&;#`FQV@-!X['LFA7-S>U
MA-D;W!17^HCMHF4::JZ_@4^H'>[F%S>7ER#YZ]3)#5NW5.AP#R4:$3WB\]KT
MHB*=$#DPCGOJU+BG[@TI/G,ZZPO]80_TF3J[RJ?3\=28"N&C`,)7]$>=\72:
MV_Y,,@C(!"9&FJ^0Q+E"#T-TP]'<74LSQR=@:W1\^G^=_*8O5K%YC<`@[BPS
MY<A$)S0.;/I\)S4>*3^SZ65'S!%7][email protected]%*.M*,BP%5W"[T8R@K,=?(@U
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
M2[U*L7D7.OT9S$[^F>P22^][email protected],)>G\.HA\>[9A2"%LHV9!A\)='/?B;1`
MLA.;:QKT>-=753E(XJXSF8FG@!^G(E8U\''0&"2H4WQ]T9OP]1'%<P3_<<`]
MH.,UH,GY8ODB-%)5=DO]?43H/U#J]2;)F34^E#[Y$%A\OUX.;K4,F=&Y(M-/
M[^X;NC2'/BTU^\AD*<^Y:D9I:DVY?D.N"TS"O-4H,>Q&,5T#*4(+">(_J>!-
M5\N@.%>X'"!#4)O_S*=CP]N<;C5:Y1=%<>1P27(..FHI3>+%4"]VRM7*)2[7
M'4\NX68%T'PK<KA:1$9^_G**<F(7J2H88[>SP>0JJ_GX=&WPYCI[<7)Z7B&_
MKC<O#MI_>7-Z]!+12:(Z^AG%)"JOXOB@#>%XX+<->93.WO!#[XC%J$7+Y&`@
MFL6/DV"`65KUEX$M38>G)H/WK"QR9)/4CE$3XM,OS?^/C9_P?6[C@4R^%D!8
M(Y:)UD-G:#;\=%A/3M=;XB$8\I,-/R^B;NV7??5HQ[;7\QWJ*,/V5ISAZ&]'
MA\>OS\Y/)5/SD<GTE<WV_>GQ^5%-\NRZ`[,3@-P>_.)>@(#U[/C\3`I0ST!@
MRHO^%"QK$*,8[VJ5-^I,J8-#W=)C_1-=%"I-U5!J!WX"5GE3-97:AE\%OOLK
M_-#$#Q=%H6>@83[0;_VA`?^1,#UF7YBU@$G4=:\(3`9U-)@AG[#L;._K](Y.
M_^^=FOI%-?W=@B02Z#7OAM-<[email protected].+I,E)N)T<T`7;L6.BZU$YBD<_M#22(=
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
MT[%22BW2Z@2BB%AV86'=G56)H?QD)[email protected]]O:\HW7QBU:1CM\4HQHC[!.1G
M3M]1S3&(&IEC%T]L^]4],ODK0O^9,:08GB&9)I%,ZBGO#J03/P:Z;RX\)8PB
M74XD/\OS^_Q5N>.*N#W8=Y:CEK:'\4\Q6L34&CI'5?G25<)5JX0+5K%K5?'Z
M0>OV*7)Y<,9<BT%YOY'`\P#;Z5O`I,//Q-I,B4$3:$`1]#;$2/.P20/[--.G
MXQZVBHCL'&UBAA&UK[(NV!=AB('Q"'Q]\,H`?V^$YAM]:"SJ;$0U26O1RG)P
M=/T$$ET_!J&KW,WPE++[W09ST343>F*!46IE27RZRAT!ZBJ^X=$*(+VN.-^M
M66OED[>>QF(`Z(QV[YFW7K`BSE5%URNF`>7T)`]>3KEA]K$MB'CE!0UNGJ/D
M]WE'IV75W;!,'M?H*/A__=%E&#^[3[>,$,8=Z3`;L%C;AL%0EJ>VWY9-N$,Q
MG95R9G[N2QWK'%:<V9.=/YOW%R\O.ZC+R[&P*I'F^JT@140YJ<Z6-0VLV;':
MQTA^.)B[BGZUE256#F+!R@2%;AO6D.";\93CE%RC:0I>"5T]=H9F!@83!X(%
MZ2K_Z:CME+44`U1R+3&@_0%0!O$P:W(V&G_0-/UZ/&.5*H8+YTI0??C!A+NG
MZXW4`.I"Y"^W*A].9K=F9RS->1<;.)2;-^#!M9A/_VPM:5-VT-BP9X#,/,K(
MX'.MN`5V%)A95'TKLG4NL70NEF!YP1TD$5W/A%172]_;NF.K<IKOA$`'+A`9
M,</)N.A;&]DKQX)1DRG!,,[&<+QI6L40/*%CA'DB=/PX\7!I\1'CHV*&Q!+R
M*^<<EHU6ACKJ41!EAB@O,!<^6P+ZH!G"Q!(^%/E12&.ZG"YFO<1T%6OE\)KA
M!9V*^OH>8]*05/2XYU!6+!L8(*7["1?;QB0/%MM95)0(>ES*&'1R25"%8I]L
M`P>:A?4UHT$IZ'U.D3RX>L>`?8X_S6AI+@*&""!R@/Q.?\RRZ25_LBKOV(2I
MCO_-,8J/DVYL0LE>R42U<O7Q;E)L>5IXL2L&<^VX@$PI3QEB_ND11K[R`E@;
M\[:X[K@R,>/A\$(T.0M+@7[-,3<3C7A@NU/2E#NZKZK<Y'R;X9(Q)@R:I*^!
MTASS0G3P?2RTEIK7,O,IJ[0W=E&>%8N,-&K2L8HJ:2I*L%919FJY12_L:.)I
MP+O[M'"47_.@6]:0B<[$,&BDU7>56C=YIU:9E9._%?+I=%A<BM0%&W\V`VD!
MC@=XAE$9MZY_WQ2Y=66V3,`-GK>4!95K*!4[E>@^H+#S(7_P/C?1WU"7K@<#
M[1L-:&`.[/FEI.RP2IVJ%IE?L?%5PMC*#Y=7^>3T8@E#*Q/4U=I345E9\71D
MGRJ]&X@)BSF=2MRP#C`/Q]W!O07+`4!&R#EM1)6*^+?T9U^)FDK,5/$`R2:3
MP6W;+KWNB+!JYMT\2!@=-E@+%QAM6,UIV1Y?[T7:CY*<^A3J#<8?;'ZB7;@Q
MGEK96[*MV,G$:&\769<J:J6K[V:C2RV)WQ2I^I]+HD/V=VW@9D3N2]U4`V\E
M\5<T@-LZ&\W:EY-4$Z\0FZ\0#-<N&2"L#Z78^N5$[A$7$$%1<[ONPBZ8#WOS
M0]6YGEJPA?%]A/IFS'#)::O4<K!NK`P]1SBEHG<5WZLL90J.XM/@MJ[/TFNX
M/4USD6WX>2_VK/=?KN>)->5O^J77J(200YR?4MH@G+62;]N+GLIM`:PD^=[,
M8,7>X31)OO\KT6Q.K)*B7.N5%E2"5UDV3UYU0=!7:U;B<*#G@R=;X2S[W@#7
MHC?V5E)[&;WH+M0OE[Q61U/F/T2KR;_CC)6?*_3T78LG+7Z9M`_=9&#1'V:7
M)9<?$C8PP[Q01[(+@KL2S0?\Y9#J;W%-Y>N`GM;A9<I%SJH#V-,N)<-C:=!M
MX?#7(K\(O&RN>Q<L5\Z1N,6B$)JC"LJSZ:!O[NI>I'CJQ5)NY\G[+%DO_#_;
'/':%,CX!````
`
end


2001-12-08 05:57:22

by Maciek Nowacki

[permalink] [raw]
Subject: Re: [PATCH] Making vmlinux Multiboot compliant and grub capable of loading modules at boot time.

Hello!

On Thu, Dec 06, 2001 at 08:17:13PM +0100, Christian Koenig wrote:
> Hi,
>
> First this patch isn't "release ready", but I need some help with it.
>
> The patch is for 2.4.14 Kernel Image, but it should patch well on other
> Versions.
>
> It adds Multiboot compatibility to vmlinux, by adding a Multibootheader to
> arch/i386/kernel/head.S

This is very cool! I've been hoping for this capability for a while. I even
tried doing it myself about half a year ago but gave up after not having any
luck attaching the header to the kernel image.

> The Multiboot information (apm-table, memmapping....) are converted to linux
> conform things, and the Memory used by the Modules is reserved with the
> bootmem bitmap in
> arch/i386/kernel/setup.c
>
> The reserved data is released in
> arch/i386/mm/init.c
> when the Init data is released.
>
> Then in
> init/main.c
> a newly created elf-object loader is called in
> kernel/boot_modules.c
> inserting the Modules into the kernel.

So for instance binfmt_elf.o could be modular, neat. Is the elf loader needed
though? I thought a boot loader such as grub might load in essential modules
before the kernel is called, so the handling of elf objects is in the
bootloader. I would suggest this approach: have the bootloader link the
kernel at boot time (the CORE_FILES kernel.o, mm.o, fs.o, ipc.o, network.o),
then required modules such as binfmt_elf and the root filesystem - though
these might not actually be proper modules but just parts of the static
image, or you would need modifications to load modules into the kernel before
it is running).

It is nice to be able to load modules the way this patch allows but it is not
a huge advantage over the existing initrd setup. rd, binfmt_elf, and the
filesystem could be modularized, and rd and the filesystem could be unloaded
after pivot_root, but it would be interesting to modularize everything -
perhaps even go further than CORE_FILES and load the individual .o files, but
that's probably too much to do at boot.

Adding the elf loader to the kernel seems to be bloat since binfmt_elf should
provide that functionality, but it would be nice to have that as a module. So
it seems that's one way to do it, or somehow allow the bootloader to load
modules into the kernel before it is running, which would allow a lot more of
the kernel to be modularized - and what couldn't be modularized could be
linked statically at boot from individual objects.

> With this grub is capable of loading multiple modules at boot time, before
> the root fs is mounted..
> This can't be done with initrd, because you could on load one single initrd
> Image.

As another point, initramfs would make this nicer since it provides an
initial filesystem as a cpio archive in an elf object (afaik). Then grub
might link CORE_FILES + cpio.o + binfmt_elf.o + cramfs.o + ...

> My question is what should I do to make this patch "clean" ?
> I know that vmlinux isn't compressed and contains unused elf-sections.

I think vmlinux should not be compressed by default. It is a hack introduced
back when it was important to squeeze kernels into low memory. This is not
really necessary anymore since no modern kernel image will fit into such a
space. Modern kernels use new BIOS calls to load piecemeal into >1MB, though
I have never understood why the flat mode approach used by HIMEM.SYS and many
others would not work (doesn't break on old systems... eliminates special
cases in boot loader... oh well).

Maciek

2001-12-09 15:56:00

by ChristianK.

[permalink] [raw]
Subject: Re: [PATCH] Making vmlinux Multiboot compliant and grub capable of loading modules at boot time.

Hi,

On Saturday 08 December 2001 06:56, Maciek Nowacki wrote:
> Hello!
>
> On Thu, Dec 06, 2001 at 08:17:13PM +0100, Christian Koenig wrote:
> > Hi,
> >
> > First this patch isn't "release ready", but I need some help with it.
> >
> > The patch is for 2.4.14 Kernel Image, but it should patch well on other
> > Versions.
> >
> > It adds Multiboot compatibility to vmlinux, by adding a Multibootheader
> > to arch/i386/kernel/head.S
>
> This is very cool! I've been hoping for this capability for a while. I even
> tried doing it myself about half a year ago but gave up after not having
> any luck attaching the header to the kernel image.

The Multiboot header wasn't the problem, but the conversion from
Multiboot Information -> Linux like boot structures wasn't so easy.

> > The Multiboot information (apm-table, memmapping....) are converted to
> > linux conform things, and the Memory used by the Modules is reserved with
> > the bootmem bitmap in
> > arch/i386/kernel/setup.c
> >
> > The reserved data is released in
> > arch/i386/mm/init.c
> > when the Init data is released.
> >
> > Then in
> > init/main.c
> > a newly created elf-object loader is called in
> > kernel/boot_modules.c
> > inserting the Modules into the kernel.
>
> So for instance binfmt_elf.o could be modular, neat. Is the elf loader
> needed though? I thought a boot loader such as grub might load in essential
> modules before the kernel is called, so the handling of elf objects is in
> the bootloader. I would suggest this approach: have the bootloader link the
> kernel at boot time (the CORE_FILES kernel.o, mm.o, fs.o, ipc.o,
> network.o), then required modules such as binfmt_elf and the root
> filesystem - though these might not actually be proper modules but just
> parts of the static image, or you would need modifications to load modules
> into the kernel before it is running).

binfmt_elf is not needed, AFAIK it is not capable to load elf-object files.

>
> It is nice to be able to load modules the way this patch allows but it is
> not a huge advantage over the existing initrd setup. rd, binfmt_elf, and
> the filesystem could be modularized, and rd and the filesystem could be
> unloaded after pivot_root, but it would be interesting to modularize
> everything - perhaps even go further than CORE_FILES and load the
> individual .o files, but that's probably too much to do at boot.
>
> Adding the elf loader to the kernel seems to be bloat since binfmt_elf
> should provide that functionality, but it would be nice to have that as a
> module. So it seems that's one way to do it, or somehow allow the
> bootloader to load modules into the kernel before it is running, which
> would allow a lot more of the kernel to be modularized - and what couldn't
> be modularized could be linked statically at boot from individual objects.

AFAIK binfmt_elf is only a elf-programm and library loader,
it is not a object file relocator or symbol resolver (like insmod).

>
> > With this grub is capable of loading multiple modules at boot time,
> > before the root fs is mounted..
> > This can't be done with initrd, because you could on load one single
> > initrd Image.
>
> As another point, initramfs would make this nicer since it provides an
> initial filesystem as a cpio archive in an elf object (afaik). Then grub
> might link CORE_FILES + cpio.o + binfmt_elf.o + cramfs.o + ...
>
> > My question is what should I do to make this patch "clean" ?
> > I know that vmlinux isn't compressed and contains unused elf-sections.
>
> I think vmlinux should not be compressed by default. It is a hack
> introduced back when it was important to squeeze kernels into low memory.
> This is not really necessary anymore since no modern kernel image will fit
> into such a space. Modern kernels use new BIOS calls to load piecemeal into
> >1MB, though I have never understood why the flat mode approach used by
> HIMEM.SYS and many others would not work (doesn't break on old systems...
> eliminates special cases in boot loader... oh well).

The compression is needed for boot/installation disk.

Am I wrong or did you sugest me to write a new bootloader ?

Mfg, Christian K?nig.