linux内核编译链接错误

1740阅读 0评论2017-02-04 bo_00
分类:其他平台

编译内核 linux-2.6.29 版本时 
最后 链接错误 如下(通过修改 make menuconfig 方法对策)


点击(此处)折叠或打开

  1. ERROR: "__bad_udelay" [sound/pci/ali5451/snd-ali5451.ko]              #例1
  2. ERROR: "__bad_udelay" [drivers/scsi/atp870u.ko]                       #例2
  3. ERROR: "del_mtd_partitions" [drivers/mtd/onenand/generic.ko]
  4. ERROR: "__bad_udelay" [drivers/isdn/hisax/hisax.ko]
  5. ERROR: "__bad_udelay" [drivers/atm/he.ko]                             #例3
  6. make[1]: *** [__modpost] 错误 1
  7. make: *** [modules] 错误 2


上记错误发生后,网上各式各样的解决方法,
有说,把其 o文件 改为ko文件的...
有说,通过 make menuconfig,配置后,使其不编译的(build in)...
有说,改写 Makefile的...
有说,改写 .config的...
等等

下记,memo一下,通过上记Error信息,如何在menuconfig中,使其不编译的方法。(举例说明)

下记两类文件的区别
linux-2.6.29/.config      →make menuconfig配置后的整体配置文件的最终结果
linux-2.6.29/各子目录/Kconfig   →make menuconfig的配置界面样式(文字/项目)的配置属性文件

#例1#例1#例1#例1#例1#例1#例1#例1

点击(此处)折叠或打开

  1. ERROR: "__bad_udelay" [sound/pci/ali5451/snd-ali5451.ko] #例1
sound/pci/ 路径下 Kconfig文件中,搜索 snd-ali5451 关键字,如下:
说明:如果不想编译 snd-ali5451 的话,就将 menuconfig的 "ALi M5451 PCI Audio Controller" 项目中,设为 空。


点击(此处)折叠或打开

  1. menuconfig SND_PCI
  2. bool "PCI sound devices"
  3. depends on PCI
  4. default y
  5. help
  6.  Support for sound devices connected via the PCI bus.


  7. if SND_PCI

  8. ...
  9. ...
  10. ...
  11. ...

  12. config SND_ALI5451
  13.     tristate "ALi M5451 PCI Audio Controller"
  14.     select SND_MPU401_UART
  15.     select SND_AC97_CODEC
  16.     help
  17.      Say Y here to include support for the integrated AC97 sound
  18.      device on motherboards using the ALi M5451 Audio Controller
  19.      (M1535/M1535D/M1535+/M1535D+ south bridges). Newer chipsets
  20.      use the "Intel/SiS/nVidia/AMD/ALi AC97 Controller" driver.

  21.      To compile this driver as a module, choose M here: the module
  22.      will be called snd-ali5451.

通过上记 Kconfig脚本知道 下记递进关系
PCI sound devices --->
    ALi M5451 PCI Audio Controller

再查找上级目录中的 Kconfig ,找其 父级项目名称,依次类推,最终确定 其选项的 树形递进关系,如下

Device Drivers  --->
    Sound card support  --->  
        Advanced Linux Sound Architecture  ---> 
            PCI sound devices --->
                ALi M5451 PCI Audio Controller                        将其设置为 [ ] excluded   即可(如下图)


#例2#例2#例2#例2#例2#例2#例2#例2
点击(此处)折叠或打开
  1. ERROR: "__bad_udelay" [drivers/scsi/atp870u.ko] #例2
在下记 Kconfig中查找 atp870u 关键字
drivers/scsi/Kconfig
drivers/Kconfig

menuconfig 的menu递进关系 查找关键字 为 "menu" 以及 "menuconfig"

其递进关系 如下
Device Drivers  ---> 
    SCSI device support  --->
        SCSI low-level drivers  --->
            ACARD SCSI support                                   将其设置为 [ ] excluded   即可


#例3#例3#例3#例3#例3#例3#例3#例3

点击(此处)折叠或打开

  1. ERROR: "__bad_udelay" [drivers/atm/he.ko] #例3
he关键字 太简单了,所以最好搜索 atm关键字  

点击(此处)折叠或打开

  1. config ATM_HE
  2.     tristate "ForeRunner HE Series"
  3.     depends on PCI
  4.     help
  5.      This is a driver for the Marconi ForeRunner HE-series ATM adapter
  6.      cards. It simultaneously supports the 155 and 622 versions.

  7. config ATM_HE_USE_SUNI
  8.     bool "Use S/UNI PHY driver"
  9.     depends on ATM_HE
  10.     help
  11.      Support for the S/UNI-Ultra and S/UNI-622 found in the ForeRunner
  12.      HE cards. This driver provides carrier detection some statistics.
相关 Kconfig文件 如下:
drivers/atm/Kconfig                      
drivers/net/Kconfig
drivers/Kconfig
(注 :
drivers/net/Kconfig 中包含了  drivers/atm/Kconfig    →source "drivers/atm/Kconfig" 
drivers/Kconfig 中包含了 drivers/net/Kconfig           →source "drivers/net/Kconfig" 

↑ 可用grep命令 查找 上记 包含关系 如下:

点击(此处)折叠或打开

  1. linux-2.6.29/drivers$ grep -rn "drivers/atm/Kconfig" *

  2. inux-2.6.29/drivers$ grep -rn "drivers/net/Kconfig" *

递进关系 如下:
Device Driverss  --->
    Network device supports  --->
        ATM driverss  --->
            ForeRunner HE Series                                   将其设置为 [ ] excluded   即可



最后,比较  最初的 .config 文件  和  make menuconfig配置修改后的 .config 文件,之间的差异。
就明白了。


另,如果 无法清晰区分 子项目 ,就把其 父项 关了。(这样 无法清晰区分的 子项 就都被关掉)   -……-!


上一篇:WindowsScriptFile
下一篇:make menuconfig中各设置项目查找