我正在尝试编译内核模块,使用SD卡端口与另一个外围设备(数字信号处理器TigerSHARC)通信到Colibri PXA320板。内核源代码使用函数mmc_power_up
和mmc_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