我正试图为mips设备编译一个简单的驱动程序示例。司机实际上只是一个测试:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
int ath_pci_init(void)
{
printk(KERN_ALERT "alive and hacked\n");
return 0;
}
void ath_pci_exit(void)
{
printk(KERN_ALERT "dead and hacked\n");
}
module_init (ath_pci_init);
module_exit (ath_pci_exit);并使用这个Makefile编译:
ifneq ($(KERNELRELEASE),)
obj-m := driver.o
else
KERNELDIR ?= /lib/modules/3.2.0-81-generic/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif对于x86来说,它工作得非常完美。对于mips,我尝试将Makefile更改为:
ifneq ($(KERNELRELEASE),)
obj-m := driver.o
else
KERNELDIR ?= /lib/modules/3.2.0-81-generic/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) ARCH=mips CROSS_COMPILE=~/Downloads/openwrt2/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-uclibc- M=$(PWD) modules
endif但不起作用。在服用完之后,我看到我使用了第一个Makefile,但是我没有运行make default,而是运行了:
make ARCH=mips CROSS_COMPILE=~/openwrt2/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-uclibc- default在这两种情况下,我都明白:
make -C /lib/modules/3.2.0-81-generic/build M=<folder> modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-81-generic'
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/alchemy/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/ar7/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/ath79/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/bcm47xx/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/bcm63xx/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/cavium-octeon/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/cobalt/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/dec/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/emma/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/jazz/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/jz4740/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/lantiq/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/lasat/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/loongson/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/mipssim/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/mti-malta/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/netlogic/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/pmc-sierra/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/pnx833x/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/pnx8550/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/powertv/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/rb532/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/sgi-ip22/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/sgi-ip27/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/sgi-ip32/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/sibyte/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/sni/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/txx9/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/vr41xx/Platform: No such file or directory
/usr/src/linux-headers-3.2.0-81-generic/arch/mips/Kbuild.platforms:35: /usr/src/linux-headers-3.2.0-81-generic/arch/mips/wrppmc/Platform: No such file or directory
expr: syntax error
make[1]: *** No rule to make target `/usr/src/linux-headers-3.2.0-81-generic/arch/mips/wrppmc/Platform'. Stop.
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-81-generic'
make: *** [default] Error 2我猜想,通过将CC重定向到工具链,我必须为它提供与本机编译器相同的资源(或等效资源)。然而,我对如何做到这一点一无所知。
如何编译我的驱动程序?
提前感谢
发布于 2015-05-14 18:13:09
我发现,要交叉编译驱动程序,还需要一个交叉编译的准备好的内核,以及一个有效的内核配置文件。
您必须针对需要编译驱动程序的对象下载内核,然后运行:
make ARCH=mips CROSS_COMPILE=mips-openwrt-linux-uclibc- oldconfig
make ARCH=mips CROSS_COMPILE=mips-openwrt-linux-uclibc- prepare然后更新makefile以使用这个内核,如下所示:
KERNELDIR ?= <path to kernel>/kernel/3.2.0-81-generic/https://stackoverflow.com/questions/29971622
复制相似问题