【问题标题】:Cross-compile Linux kernel with additional modules使用附加模块交叉编译 Linux 内核
【发布时间】:2013-07-19 14:16:21
【问题描述】:

我是交叉编译的新手。我必须交叉编译 Linux 内核,因为我打算将 wifi 模块与我的 TS-7500 SBC(ARM 处理器)一起使用,但它不支持它。我有我的 wifi 模块的驱动程序,通过网上冲浪,我了解了交叉编译的一般过程。但是,我对额外的模块部分有些困惑。以下是 TS-7500 官方网站上关于这些额外模块的信息:

附录 - 使用自定义选项编译 TS-Kernel 为了编译一个单独的内核模块并生成一个 .ko 文件以包含在现有内核中,这些是在步骤 08 之后执行并在上面的步骤 09 结束的步骤。注意:步骤 02 之后的步骤未经验证/未经测试。它们代表了人们将要经历的准确程序。

01.) 打开 menuconfig 并使用“M”模块化内核功能。为了 例如,要模块化 cifs.ko,可以使用箭头键和 Enter 键 导航到文件系统 -> 网络文件系统 -> CIFS 支持。
按“M”将 CIFS 支持模块化到内核中,然后继续点击 “退出”,直到系统提示您保存更改,选择“是”。

make menuconfig

02.) 使用模块编译内核并将模块复制到 Linux PC

 make && make modules && make modules_install  

03.) 使用如下命令检索复制到 Linux PC 的模块 cp 以便可以将其安装到 MiniSD 卡上的内核中。

mkdir /mnt/miniSD4
mount /dev/sdb4 /mnt/miniSD4
cp /lib/modules/2.6.24.4/kernel/fs/cifs/cifs.ko /mnt/miniSD4

04.) 通过从分区 4 复制粘贴将模块安装到内核中 卡到 SBC 上的分区 2。

cp -r /dev/nbd4/cifs.ko /dev/nbd2/lib/modules/2.6.24.4/kernel/fs/cifs/cifs.ko

05.) 最后,为了使用新模块,您必须启用它。这个可以 包含在启动脚本中,例如 linuxrc。

depmod
modprobe cifs.ko

我对序列号 2 感到困惑。谁能向我解释一下,我应该在哪里提供要安装的驱动程序的地址?

提前致谢。

【问题讨论】:

    标签: linux-kernel arm cross-compiling kernel-module


    【解决方案1】:

    我假设说你的 SBC 不支持它,你的意思是你交叉编译的模块/驱动程序是一个 'out of source tree' 内核模块。

    上述过程仅适用于'in-tree kernel modules'。

    这让您有以下两个选择。

    1. 作为交叉编译驱动程序的结果,您将拥有一个 *.ko 文件。使用 SD 卡或通过网络将此文件传输到正在运行的系统。在此之后使用

      加载模块
      insmod /path/to/module/filename.ko
      

      这种方法只有一个限制。即,如果此驱动程序/模块依赖于其他驱动程序,则必须先加载它们。

    2. 在内核源代码树中包含您的驱动程序并使用modprobe drivername 将其与依赖项一起加载。 modprobe 比 insmod 更先进,因为它首先检查依赖关系并在加载模块本身之前自动加载它们。

    要将驱动程序包含在内核的源代码树中,请参阅answer。

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 2011-03-28
      • 2014-10-23
      • 2014-05-01
      • 2014-04-30
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多