FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Debian > Debian User

 
 
LinkBack Thread Tools
 
Old 05-12-2008, 07:07 PM
Hugo Vanwoerkom
 
Default adding a module to an initrd.img

Hi,


I generated a module called v86d which is in /sbin

I want to add that to initrd.img-2.6.25-1-686

No amount of fiddling does it.

When I do:

zcat initrd.img-2.6.25-1-686 | cpio --list

the module never appears.

I tried adding a file to /etc/modprobe.d and
adding v86d to /etc/initramfs-tools/modules

all to no effect.

How do you add a module to an initrd.img?

Hugo


--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
 
Old 05-13-2008, 02:26 AM
David Witbrodt
 
Default adding a module to an initrd.img

> I generated a module called v86d which is in /sbin
>
> I want to add that to initrd.img-2.6.25-1-686
>
> No amount of fiddling does it.
>
> When I do:
>
> zcat initrd.img-2.6.25-1-686 | cpio --list
>
> the module never appears.
>
> I tried adding a file to /etc/modprobe.d and
> adding v86d to /etc/initramfs-tools/modules
>
> all to no effect.
>
> How do you add a module to an initrd.img?

I'm sure there's a way to do what you want, but Debian's tools for creating initrd's only grab files from /lib/modules/<kernel-version>, AFAIK.

I use 'v86d' to support UVESA FB on my system, but my preference is to not use an initrd at all. Because of that, I have never investigated how to force 'v86d' into a Debian initrd (though, as I said, I'm sure there's a way!).

What I do is pack an initramfs with my kernel image -- which is the moral equivalent of an initrd, except that the bootloader doesn't have to load an external file for the kernel. The kernel just unpacks the compressed cpio (initramfs) archive that is present in the kernel image itself.
You can find some instructions for doing this here:

http://dev.gentoo.org/~spock/projects/uvesafb/

Read down until you see "uvesafb::installation instructions", then take a look at step 6:

6. reconfigure your kernel; in the "General Setup" section select:
Initial RAM filesystem and RAM disk (initramfs/initrd) support
and use /usr/share/v86d/initramfs in Initramfs source file(s).
(that's CONFIG_INITRAMFS_SOURCE="/usr/share/v86d/initramfs")

For us, the location of the file needed for CONFIG_INITRAMFS_SOURCE will not be the same. The location of that file will depend on where you unpacked and built the 'v86d' sources.

For example, let's say user "fred" on my system unpacked his 'v86d' sources in ~/sandbox. He now has a directory like this:

/home/fred/sandbox/v86d-0.1.5

Inside that dir, there is a subdir called 'misc', and in that dir is the file "spock" was talking about:

$ ls /home/fred/sandbox/v86d-0.1.5/misc
initramfs

Therefore, user "fred" should go to his kernel source tree, run something like 'make menuconfig', find the option for CONFIG_INITRAMFS_SOURCE, and set its value to

/home/fred/sandbox/v86d-0.1.5/misc/initramfs

This process will cause the kernel to include an initramfs image along with the kernel image containing the files required for 'v86d' to work. (If you are using 'v86d' to get UVESA FB to work, then all of this is for nothing if you also did not have a uvesafb-aware build of 'klibc' installed when you compiled 'v86d'! You would have to rebuild 'klibc' first, pointing the build at kernel sources that have been built with UVESA FB enabled, then rebuild 'v86d' against that version of 'klibc'.)

BTW, I am not saying that you will no longer need an initrd at all. If you needed one before, because certain modules required for your machine to boot were not compiled directly into the kernel, then you will still need one. I'm just saying that 'v86d' will not have to be present in that initrd: it can actually just be included with the kernel image itself, if following the method of "spock" indicated above.

Personally, when building my own kernel I take the time (numerous hours, the first time) to completely disable the configs for hardware not present in my system and features that I cannot imagine ever using. I then make sure that any drivers necessary for booting are built into the kernel (config set to "Y"), and other drivers that I want (but don't need at boot time) I enable as loadable modules (config set to "M"). The results are mixed: my kernels are somewhat larger, but I have a lot less wasted space in /lib/modules:

# ls -s /boot
[...]
5876 initrd.img-2.6.25-1-amd64
[...]
2492 vmlinuz-2.6.25.080503.amd64x2.uvesafb
1692 vmlinuz-2.6.25-1-amd64

# ls -1 /lib/modules
2.6.25.080503.amd64x2.uvesafb
2.6.25-1-amd64

# du -s /lib/modules/2.6*
15020 /lib/modules/2.6.25.080503.amd64x2.uvesafb
77540 /lib/modules/2.6.25-1-amd64

As you can see, my self-compiled kernel image is about 800K larger than the Debian stock kernel, but the stock kernel also requires a 5800K initrd. In /lib/modules, my self-compiled kernel uses about 1/5 the amount of disk space as the stock kernel... and I went overboard turning on modules for networking support that I probably will never even use!
The biggest difference is in compile time, though. My Athlon 64 X2 5600 CPU compiles my kernel in less than 4.5 minutes if I tell 'make-kpkg' to use both cores:

CONCURRENCY_LEVEL=3 make-kpkg --append-to-version=<...> --revision=<...> kernel_image


HTH,
Dave Witbrodt




--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
 

Thread Tools




All times are GMT. The time now is 03:33 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org