【问题标题】:Linux wifi backports cross compileLinux wifi backports 交叉编译
【发布时间】:2013-09-17 16:53:22
【问题描述】:

我正在尝试将 Linux wifi drivers from 3.11 反向移植到 linux-omap-l1(2.6.39)。我在我的 Ubuntu 11.4(内核是 2.6.38-11-generic)上设置了交叉编译器,并验证了交叉编译的内核可以按预期在 ARM 处理器上运行。通过遵循"Usage Guide" section,我还能够将 wifi 驱动程序反向移植到这个 Ubuntu。但是,我在交叉编译 wifi 反向端口时遇到问题。这是我做过的两次尝试:

尝试#1

按照上面相同链接的“交叉编译”部分,我设置了 ARCH(=arm)、CROSS_COMPILER、KLIB_BUILD(=linux-omap-l1 目录)和 KLIB(=linux-omap-l1 目录),运行 make defconfig-wifi,然后运行 ​​make -j4。它没有任何错误就完成了。但是,当我检查生成的 ko 文件时,它们显然没有被交叉编译,因为它们看起来像“rt2x00usb.ko: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV),未剥离"

尝试#2

然后我清理了旧的make结果,将上面的四个宏直接作为参数传递给make,然后再次运行。这次它报告了许多错误,抱怨缺少 printk.h、atomic.h 和 average.h

请帮助解决上述任何一种情况。

【问题讨论】:

  • 看看你移植的 Makefile 会很有用。
  • 复制defconfig-wifi.config,然后使用make ARCH=arm menuconfigdefconfig-wifi 可能会覆盖您的 ARM 内核 配置。 defconfig-wifi 适用于 x86 吗?最好选择一个工作的.config 并设置所需的 Wifi 选项。以某种方式共享您不同的 config 文件。你可以在没有任何 wifi backports 的情况下构建?
  • 感谢提示。现在我设法生成了正确的 .config 文件(其中包含特定于我的嵌入式内核的所有相同配置项以及新的反向移植项)。但是,当我从 backports 源重复 attemp#2 时,发生了以下错误。错误:内核配置无效。缺少 include/generated/autoconf.h 或 include/config/auto.conf。在内核 src 上运行“make oldconfig && make prepare”来修复它。
  • 在您原来的 Attempt#1 方法中,您可以尝试运行make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4。请记住将交叉编译器添加到 shell $PATH 并使用 CROSS_COMPILE 参数传递正确的交叉编译器。

标签: linux-kernel wifi linux-device-driver cross-compiling


【解决方案1】:

嗯,我这里贴出rt2800usb wifi解决方案,供大家参考。以下步骤交叉编译成功:

  1. Menuconfig linux-omap-l1(2.6.39) 内核禁用网络支持 -> 无线,构建它并将其引导到嵌入式单元以确保准备就绪
  2. 从构建 PC (Ubuntu 11.4) 上的 backports 目录运行“make mrproper”
  3. 从构建电脑运行以下脚本。确保 KLIB 指向的目录预先存在,否则创建它

    set -a
    CROSS_COMPILE="/opt/arm-2009q1/bin/arm-none-linux-gnueabi-"
    ARCH=arm
    KLIB_BUILD="/home/xxx/linux-omap-l1"
    KLIB="/home/xxx/linux-omap-l1/updates"
    set +a
    
    make defconfig-wifi
    make oldconfig  # menuconfig worked here too
    make
    make install
    
  4. 将编译好的二进制文件和模块复制到单元(10.11.2.3)中

    scp -r  /home/xxx/linux-omap-l1/updates/lib/modules/2.6.39.4-00537-g6c21e4a  root@10.11.2.3:/lib/modules/2.6.39.4/.
    
  5. 登录嵌入式单元并运行“modprobe -v -f rt2800usb”

  6. 如有必要,下载 rt2800usb 固件并将其安装到 /lib/firmware
  7. lsmod 验证驱动可以加载
  8. 插入 USB 加密狗(可能需要创建或修改 udev 规则)
  9. 使用 iw 进一步检查其属性

【讨论】:

    【解决方案2】:

    backports 无法获取我的内核配置.....mac80211 在我的内核配置中设置为模块,当我在 backport 的菜单配置中搜索 mac80211 时,它显示已禁用。以上都试过了……

    set -a
    CROSS_COMPILE="/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-"
    ARCH=arm
    KLIB_BUILD="/home/xxx/rpm/BUILD/linux"
    KLIB="/home/xxx/rootfs/lib/modules/2.6.35.3-998-ga1cd8a7/updates"
    set +a
    
    make defconfig-wifi
    make menuconfig
    

    【讨论】:

    • 抱歉,我无法提供更多帮助,因为我无法再访问交叉编译环境了。
    • 想通了 - (用于构建 wifi 驱动程序)两件事 1. CFG80211 和 MAC80211 应该在内核配置中禁用。 2. 当我在内核配置中禁用 CFG80211 时,它在 backports menuconfig 中取消选择 MAC80211 所需的 CRYPTO_CCM 和 CRYPTO_ARC4。一旦我在内核配置中启用 CRYPTO_CCM 和 CRYPTO_ARC4,MAC80211 就会列在 backports menuconfig 中。
    【解决方案3】:

    我发现这是成功的......

    make defconfig-wifi CROSS_COMPILE=/home/xxx/Downloads/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux/bin/arm-linux-gnueabi- ARCH=arm KLIB_BUILD=/home/xxx/Downloads/linux-3.10/ KLIB=/home/xxx/Downloads/rootfs/
    
    make menuconfig CROSS_COMPILE=/home/xxx/Downloads/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux/bin/arm-linux-gnueabi- ARCH=arm KLIB_BUILD=/home/xxx/Downloads/linux-3.10/ KLIB=/home/xxx/Downloads/rootfs/
    
    make CROSS_COMPILE=/home/xxx/Downloads/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux/bin/arm-linux-gnueabi- ARCH=arm KLIB_BUILD=/home/xxx/Downloads/linux-3.10/ KLIB=/home/xxx/Downloads/rootfs/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 2011-08-04
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多