一)MT7620
1)
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../linux-2.6.36/net/nat/hw_nat/ra_nat.h"
#include "../../../linux-2.6.36/net/nat/hw_nat/frame_engine.h"
#endif
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../../../../net/nat/hw_nat/ra_nat.h"
#include "../../../../../../net/nat/hw_nat/frame_engine.h"
#endif
2)
trunk/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7620-wifi2716_all_dpa_20130426/rt2860v2/os/linux/rt_linux.c
将:
pOSFSInfo->fsuid = current_fsuid();
pOSFSInfo->fsgid = current_fsgid();
修改为:
pOSFSInfo->fsuid = *(int *)¤t_fsuid();
pOSFSInfo->fsgid = *(int *)¤t_fsgid();
3)application
编译ralink自带的gpio等程序时,可能会出现如下错误。
make[4]: Entering directory `*******/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/gpio'
staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib -o gpio gpio.c
gpio.c:28:28: fatal error: linux/autoconf.h: No such file or directory
#include
^
compilation terminated.
make[4]: *** [gpio] Error 1
修改a)
//#include
#include
修改b)
可能需要将源码中CONFIG_RALINK_MT7620这样的编译宏修改为CONFIG_SOC_MT7620;
因为autoconf.h只有CONFIG_SOC_MT7620宏定义;
enum {
#if defined (CONFIG_RALINK_RT3052)
gpio2300,
gpio3924,
gpio5140,
#elif defined (CONFIG_RALINK_RT3883)
gpio2300,
gpio3924,
gpio7140,
gpio9572,
#elif defined (CONFIG_RALINK_RT3352)
gpio2300,
gpio3924,
gpio4540,
#elif defined (CONFIG_RALINK_RT5350)
gpio2100,
gpio2722,
#elif defined (CONFIG_RALINK_RT6855A)
gpio1500,
gpio3116,
#elif defined (CONFIG_RALINK_MT7620)
gpio2300,
gpio3924,
gpio7140,
gpio72,
#elif defined (CONFIG_RALINK_MT7621)
gpio3100,
gpio6332,
gpio9564,
#elif defined (CONFIG_RALINK_MT7628)
gpio2300,
gpio3924,
gpio7140,
gpio72,
#else
gpio2300,
#endif
};
解决的一种方法是在gpio的Makefile文件中添加如下的定义
ifeq ($(CONFIG_SOC_MT7620),y)
EXTRA_CFLAGS += -DCONFIG_RALINK_MT7620
endif
修改c)
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/linux-3.14.32/drivers/char/ralink_gpio.h:37:32: fatal error: asm/rt2880/rt_mmap.h: No such file or directory
一种解决办法:
创建目录build_dir\target-mipsel_24kec+dsp_uClibc-0.9.33.2\linux-ramips_mt7620\linux-3.14.32\include\asm
将原厂SDK中的linux-2.6.36\include\asm\rt2880目录拷贝到该目录中,
#include
二)MT76x2e
1)
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7612e_mt7602e_LinuxAP_3.0.2.9_iPA_20140103/rlt_wifi_ap/../rlt_wifi/os/linux/rt_linux.c:911:20: error: incompatible types when assigning to type 'int' from type 'kgid_t'
pOSFSInfo->fsgid = current_fsgid();
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7612e_mt7602e_LinuxAP_3.0.2.9_iPA_20140103/rlt_wifi_ap/../rlt_wifi/os/linux/rt_linux.c
将:
pOSFSInfo->fsuid = current_fsuid();
pOSFSInfo->fsgid = current_fsgid();
修改为:
pOSFSInfo->fsuid = *(int *)¤t_fsuid();
pOSFSInfo->fsgid = *(int *)¤t_fsgid();
2)build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7612e_mt7602e_LinuxAP_3.0.2.9_iPA_20140103/rlt_wifi_ap/../rlt_wifi/os/linux/rt_linux.c
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../linux-2.6.36/net/nat/hw_nat/ra_nat.h"
#include "../../../linux-2.6.36/net/nat/hw_nat/frame_engine.h"
#endif
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../../../../net/nat/hw_nat/ra_nat.h"
#include "../../../../../../net/nat/hw_nat/frame_engine.h"
#endif
三)MT7610e
1)build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7610e_wifi_v3006_dpa_20130613//os/linux/pci_main_dev.c:43:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'rt2860_remove_one'
static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev);
解决方法可以参考以下链接:
http://www.tinylab.org/faqs/fixup-compile-error-with-devinit-devexit/
如果报错的函数前有 __devinit 或者 __devexit 等宏,那么罪魁祸首的就是这个了。因为这些宏在 Linux Kernel 3.8 之后,就已经移除了;而在3.8.1之前的版本中
在linux/init.h中有如下的定义。
* Used for HOTPLUG */
#define __devinit __section(.devinit.text) __cold notrace
#define __devinitdata __section(.devinit.data)
#define __devinitconst __constsection(.devinit.rodata)
#define __devexit __section(.devexit.text) __exitused __cold notrace
#define __devexitdata __section(.devexit.data)
#define __devexitconst __constsection(.devexit.rodata)
修改后参考代码如下:
/* */
/* Function declarations */
/* */
/*extern int rt28xx_close(IN struct net_device *net_dev); */
/*extern int rt28xx_open(struct net_device *net_dev); */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,1)
static VOID __exit rt2860_remove_one(struct pci_dev *pci_dev);
static INT __init rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent);
#else
static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev);
static INT __devinit rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent);
#endif
/* */
/* Ralink PCI device table, include all supported chipsets */
/* */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,1)
static struct pci_device_id rt2860_pci_tbl[] __initdata =
#else
static struct pci_device_id rt2860_pci_tbl[] __devinitdata =
#endif
{
#ifdef RT3290
{PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3290_PCIe_DEVICE_ID)},
#endif /* RT3290 */
/* */
/* Our PCI driver structure */
/* */
static struct pci_driver rt2860_driver =
{
name: RTMP_DRV_NAME,
id_table: rt2860_pci_tbl,
probe: rt2860_probe,
#if LINUX_VERSION_CODE >= 0x20412
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,1)
remove: __exit_p(rt2860_remove_one),
#else
remove: __devexit_p(rt2860_remove_one),
#endif
#else
remove: __devexit(rt2860_remove_one),
#endif
/* */
/* PCI device probe & initialization function */
/* */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,1)
static int __init rt2860_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
#else
static int __devinit rt2860_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
#endif
{
VOID *pAd = NULL;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,1)
static VOID __exit rt2860_remove_one(struct pci_dev *pci_dev)
#else
static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev)
#endif
{
PNET_DEV net_dev = pci_get_drvdata(pci_dev);
2)
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7610e_wifi_v3006_dpa_20130613//os/linux/rt_linux.c:899:20: error: incompatible types when assigning to type 'int' from type 'kuid_t'
pOSFSInfo->fsuid = current_fsuid();
build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7610e_wifi_v3006_dpa_20130613//os/linux/rt_linux.c
将:
pOSFSInfo->fsuid = current_fsuid();
pOSFSInfo->fsgid = current_fsgid();
修改为:
pOSFSInfo->fsuid = *(int *)¤t_fsuid();
pOSFSInfo->fsgid = *(int *)¤t_fsgid();
3)build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/mt7610e_wifi_v3006_dpa_20130613//os/linux/rt_linux.c
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../linux-2.6.36/net/nat/hw_nat/ra_nat.h"
#include "../../../linux-2.6.36/net/nat/hw_nat/frame_engine.h"
#endif
#if defined(CONFIG_RA_HW_NAT) || defined(CONFIG_RA_HW_NAT_MODULE)
#include "../../../../../../net/nat/hw_nat/ra_nat.h"
#include "../../../../../../net/nat/hw_nat/frame_engine.h"
#endif