内核 3.0 的交叉编译向后移植

内核 3.0 的交叉编译向后移植

我正在尝试编译向后移植(我选择了最新的 [5.6.8-1] 版本)用于带有提供的工具链的 i.MX35 (armv6) 嵌入式 Linux 系统(arm-fsl-gnueabi-gcc 4.6.2,不能选择不同的编译器)和 BSP 内核(3.0,不幸的是,不同的内核不是一个选择)

相关页面声称

每个向后移植版本都经过测试编译,可用于所有受支持的内核。最旧的版本是(当前)3.0。

所以我应该没问题,不过,正如下面所写,我确信他们没有针对 3.0 测试这个版本,因为如果没有手动干预,它根本无法针对该版本进行编译

我已经[重新]构建了内核源代码树并遵循“交叉编译”下的说明用于树外向后移植构建。然后首先我通过 ,选择了menuconfig一堆 USB WiFi 驱动程序,但由于编译错误,我删除并重新提取了 tarball 并做了(因为他们声称

据了解,用户可能不知道如何配置反向移植包,就像他们可能不知道如何配置 Linux 内核一样,因此提供了默认配置文件的捷径,可用于仅构建他们感兴趣的驱动程序/子系统。

)只是defconfig-mwifiex为了确保我在配置中没有做任何错误的事情。是的,我就是这样一个无可救药的乐观主义者。

我不得不删除一些“不太向后移植”的函数,这些函数依赖于 3.0 中未找到的功能:

  1. 更改__atomic_add_unlessatomic_add_unlessbackport-include/linux/atomic.h

  2. 改为无条件调用,debug_fs_create_xul因为不存在;由于条件版本根据 的大小进行调度,即该平台上的 32 位,因此无论如何都不会调用后者。backport-include/linux/debugfs.hdebug_fs_create_x32debug_fs_create_x64unsigned long

  3. 注释掉了(从第 360 行开始)netdev_upper_dev_link中的内容backport-include/linux/netdevice.h,因为它在 3.0 中不存在,而仅在某些后续版本中存在。无论如何只能被调用我没有编译的模块(实际上,由于基本内核配置,它甚至不会出现在 menuconfig 中)所以它是安全的。

  4. 放置在#ifdef CONFIG_PCI的定义下,因为它调用/{依赖于} 一个使用相同变量进行编辑的pcie_find_root_port#ifdefbackport-include/linux/pci.h

  5. #ifdef因为它使用的结构成员位于相同的目录pm_runtime_activebackport-include/linux/pm_runtime.hCONFIG_PM_RUNTIME#ifdef

  6. #ifdefedNETLINK_CB(in_skb).sk访问compat/backport-genetlink.cwithLINUX_IS_VERSION_GEQ(3, 10, 0)因为sk结构成员仅在该版本中添加。

不幸的是,扩展net/wireless/trace.c存在问题TP_PROTO,因此 GCC 出现很多错误error: expected ')' before 'struct',而我没有设法解决这些问题。有任何想法吗?

如果没有,任何确实在3.0上测试过向后移植版本(希望有大量经过实战检验的 WiFi USB 驱动程序可用)?

相关内容