On 13-03-11 09:28 AM, Hans Beckérus wrote:

On Sat, Mar 9, 2013 at 12:45 AM, Bruce Ashfield
<bruce.ashfi...@windriver.com <mailto:bruce.ashfi...@windriver.com>> wrote:

    On 13-03-08 2:00 PM, Hans Beckerus wrote:

        On 2013-03-08 7:12, Eric Bénard wrote:

            Hi Hans,

            Le Fri, 8 Mar 2013 13:08:21 +0100,
            Hans Beckérus <hans.becke...@gmail.com
            <mailto:hans.becke...@gmail.com>> a écrit :

                Hi. I have built some custom kernel modules (.ko) using
                a .bb that
                inherits from the module.bbclass. There is one main
                kernel module and
                the rest are dependent on the first. Building and
                installing the
                modules to the rootfs works fine. Next question is how
                do I control
                what actual modules are loaded at boot, or actually how
                do I control
                this through Yocto? To my surprise one of the kernel
                module loaded
                automatically!? How could this happen? I did not have an
                entry for it
                in /etc/modules. And what do I need to do to actually
                add entries to
                /etc/modules? Or is there some other mechanism that I
                should use. I
                tried going through the module.bbclass but must admit I
                lost it
                somewhere in the middle ;) Any guidance would be
                appreciated.

            when the module is built by the kernel recipe you can use :
            module_autoload and you can see somme usage examples here :
            
http://cgit.openembedded.org/__meta-handheld/tree/conf/__machine/palmtx.conf
            
<http://cgit.openembedded.org/meta-handheld/tree/conf/machine/palmtx.conf>
            
http://cgit.openembedded.org/__meta-handheld/tree/conf/__machine/include/palm.inc
            
<http://cgit.openembedded.org/meta-handheld/tree/conf/machine/include/palm.inc>


            maybe you could get inspiration from kernel.bbclass to do
            the same
            thing in your recipe.

            Eric

        Thanks guys for your quick feedback. I can see that using
        module_autoload_${PN} seems like a good approach, if a package
        maps 1:1
        to a module.
        In my case that is not so. The package/recipe builds six (or
        even more)
        .ko files using one makefile.
        I guess one option could be to split each module build in its own
        recipe, but that is not supported by the makefile and thus would
        require
        patching from my side in the source tree. I think the only
        option I have
        left is to try to use /etc/modules and add the modules there in a
        do_install_append().
        But the problem then is, what happens if some other package also
        add a
        /etc/modules.conf to the image folder? Will it be merged or only
        copied?
        In the latter case last package wins which would not work out
        very well :(

        Out of curiosity, what will module_autoload do? Will it add the
        .ko to
        /etc/modules or does it implement some other mechanism to make a
        module
        load automatically at boot?


    It depends on what release you are using. In yocto 1.3 and before the
    autoload variables translated to mod-util loading, using just what you'd
    think. In yocto 1.4 and kmod in the picture:

             # If autoloading is requested, output
    /etc/modules-load.d/<name>.__conf and append
             # appropriate modprobe commands to the postinst
             autoload = d.getVar('module_autoload_%s' % basename, True)
             if autoload:
                 name = '%s/etc/modules-load.d/%s.__conf' % (dvar, basename)
                 f = open(name, 'w')
                 for m in autoload.split():
                     f.write('%s\n' % m)
                 f.close()
                 postinst = d.getVar('pkg_postinst_%s' % pkg, True)
                 if not postinst:
                     bb.fatal("pkg_postinst_%s not defined" % pkg)
                 postinst += d.getVar('autoload_postinst___fragment',
    True) % autoload
                 d.setVar('pkg_postinst_%s' % pkg, postinst)

             # Write out any modconf fragment
             modconf = d.getVar('module_conf_%s' % basename, True)
             if modconf:
                 name = '%s/etc/modprobe.d/%s.conf' % (dvar, basename)
                 f = open(name, 'w')
                 f.write("%s\n" % modconf)
                 f.close()

    Cheers,

    Bruce

I do not have much luck getting this to work I am afraid. No matter what
I try with module_autoload it does not seem to have any effect on my
system (no file(s) created in /etc). I have tried adding module_autoload
to both my machine config and/or distro. I am running danny 8.0 which is
version 1.3 of the poky distro I guess. I can see how module_autoload_%s
is parsed in kernel.bb <http://kernel.bb> but how is that recipe called
as part om my module package? I can not see that anything is inheriting
from it so when is the module_autoload supposed to be parsed and place
files in in the package /etc? Do I need to rebuild something other than
my module package? My guess Is that I should see something in the
package image folder, or? All I see is the lib folder holding the kernel
module hierarchy and the .ko files of course. I would really like
getting this to work. Otherwise the only ugly workaround I can see is to
write my own simplistic init script that calls modprobe on the modules I
need after boot.

Can you post your exact changes where we can see them ? You need to put
the module_autload variable in a .conf file, whether that be your
local.conf, your machine.conf or you distro configuration file (which
it appears that you are doing), but you also must have the name of
the module package correct, and the module needs to be part of your
IMAGE_INSTALL, since the code fragment I pasted above is from the
post installation fragment created for the various module packages
as they are created.

i.e. I have this in a .conf file:

   module_autoload_nfsd = "nfsd"

To ensure that the nfsd .ko is loaded on boot, when the module is built
and present on the rootfs.

Cheers,

Bruce




Hans





_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto


_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to