User Tools

Site Tools


kernel_modules

Kernel Modules

List factory default kernel modules

You can list the factory default kernel modules with the command:

find /lib/modules/$(uname -r) -type f -name '*.ko'

Building

Tip: You can use Dockcross to cross-compile from a Docker container to the PM3. Use the dockcross/linux-armv7-lts container.

  1. Download the i.MX Linux kernel source code from the nxp-imx/linux-imx Github repo, selecting the git tag that matches your kernel version (e.g. 4.9.166 for a uname -r of 4.9.166-fsl-imx-INIT-004).
  2. Obtain the Linux kernel config from the PM3, located at /proc/config.gz. Unzip this file to .config in the root of the kernel source.
  3. In .config, change the line CONFIG_LOCALVERSION_AUTO=y to CONFIG_LOCALVERSION_AUTO=n.
  4. If you're trying to build kernel modules that are already in the Linux source code, set the appropriate config options to m. For example, setting CONFIG_SLIP=m enabled SLIP support to be compiled to drivers/net/slip/.ko.
  5. In Makefile, change the line EXTRAVERSION = to EXTRAVERSION = -fsl-imx-INIT-004, or whatever comes after the PM3's uname -r for you.
  6. In /scripts/dtc/dtc-lexer.lex.c and /scripts/dtc/dtc-lexer.lex.c_shipped, change YYLTYPE yylloc; to extern YYLTYPE yylloc;
  7. Run git add . and git commit.
  8. Run make LOCALVERSION= -C . modules.
    • If you are using Dockcross and you are in a bash environment inside the container, you may need to run sudo make instead of just make.
  9. scp your new kernel module to the PM3 and load it with insmod your_module.ko. If it fails, check dmesg to see what's wrong.

Problems

If you fail to load a kernel module and dmesg shows something like the following:

version magic '4.9.166-fsl-imx-INIT-004+ preempt ARMv7 p2v8 ' should be '4.9.166-fsl-imx-INIT-004 preempt ARMv7 p2v8 '
version magic '4.9.166-fsl-imx-INIT-004-dirty preempt ARMv7 p2v8 ' should be '4.9.166-fsl-imx-INIT-004 preempt ARMv7 p2v8 '

Then double check:

  • That CONFIG_LOCALVERSION_AUTO=n is set in .config.
  • That your make command has the option LOCALVERSION= .
  • That you have no uncommitted changes according to git.
kernel_modules.txt · Last modified: by fredchan