在编译内核模块以使用SDIO端口时使用mmc_power_up的问题

时间:2015-01-16 04:34:32

标签: c linux makefile linux-kernel

我正在尝试编译内核模块,使用SD卡端口与另一个外围设备(数字信号处理器TigerSHARC)通信到Colibri PXA320板。内核源代码使用函数mmc_power_upmmc_power_off来控制端口,并使用内核中提供的mmc驱动程序运行。 源代码现在包含以下内容

#include <linux/module.h>   
#include <linux/kernel.h>   
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/types.h>
#include <linux/scatterlist.h>
#include <linux/slab.h>

#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#include <linux/mmc/mmc.h>
#include <linux/mmc/sd.h>
#include <linux/mmc/sdio.h>
#include <linux/mmc/sdio_func.h>
#include <linux/mmc/sdio_ids.h>
#include <linux/gpio.h>

添加的路径变量是

export PATH=$KSRCPATH/tools/usr/local/arm/oe/bin:$PATH
export PATH=$KSRCPATH/tools/usr/local/arm/oe/arm-angstrom-linux-gnueabi/include:$PATH
export PATH=$KSRCPATH/src/linux-2.6.35.9-toradex:$PATH
export PATH=$KSRCPATH/src/linux-2.6.35.9-toradex/include/asm-arm:$PATH
export PATH=$KSRCPATH/src/linux-2.6.35.9-toradex/drivers/mmc/core:$PATH
export PATH=$KSRCPATH/src/u-boot-2010.09-toradex/tools:$PATH

其中$KSRCPATH是内核源文件夹。

当我编译内核模块时,我收到以下消息:

WARNING: "mmc_set_bus_width" [/mnt/hgfs/Colibri_Linux/Linux/SDIO_Driver/unet_sdio.ko] undefined!
WARNING: "mmc_power_up" [/mnt/hgfs/Colibri_Linux/Linux/SDIO_Driver/unet_sdio.ko] undefined!
WARNING: "mmc_power_off" [/mnt/hgfs/Colibri_Linux/Linux/SDIO_Driver/unet_sdio.ko] undefined!

我检查了内核源代码树,函数s在core.c中的$KSRCPATH/src/linux-2.6.35.9-toradex/drivers/mmc/core文件中定义,但它们没有在core.h中为它们定义任何声明。

我的makefile现在是:

KDIR = $(KSRCPATH)/src/linux-2.6.35.9-toradex

obj-m += unet_sdio.o

all:  
    make -C $(KDIR) M=$(PWD) modules
    make install

clean:
    make -C $(KDIR) M=$(PWD) clean

install:
    cp unet_sdio.ko /mnt/hgfs/Colibri_Linux/

我已在源代码

中声明函数是extern
/*! External (MMC) Functions */
extern void mmc_power_up(struct mmc_host *host);
extern void mmc_power_off(struct mmc_host *host);

我猜测我的内核模块没有链接到core.c中的$KSRCPATH/src/linux-2.6.35.9-toradex/drivers/mmc/core,因此这些函数被标记为未定义。

我需要在源代码或makefile中进行哪些更改才能将源代码和core.c链接在一起。

编辑:我能够使用编译的内核启动colibri PXA320设备,kallsyms确实显示colibri PXA320设备的内核中有mmc_power_off和mmc_power_on功能:

root@toradex:/home/modem# grep mmc_power* /proc/kallsyms
c0226a50 t mmc_power_off
c0226ce0 t mmc_power_up
c02277ec T mmc_power_save_host
c022796c T mmc_power_restore_host
c0229490 t mmc_power_restore

0 个答案:

没有答案