最开始,第一步我们先拿最纯净的MediaTek_ApSoC_SDK_4300_20140916.tar开刀,不增加无线驱动。
1、按照sdk里的知道文档来说,先编译安装几个工具包的,编译mksquash_lzma-3.2的时候出现了如下问题:
[plain] view plain copy
/home/test/RT288x_SDK/toolchain/mksquash_lzma-3.2/lzma443/C/7zip/Compress/LZMA_C/libunlzma.a(uncomp.o):在函数‘sqlzma_un’中:
uncomp.c:(.text+0x67):对‘inflateReset’未定义的引用
uncomp.c:(.text+0xa7):对‘inflate’未定义的引用
uncomp.c:(.text+0x1b2):对‘zError’未定义的引用
/home/test/RT288x_SDK/toolchain/mksquash_lzma-3.2/lzma443/C/7zip/Compress/LZMA_C/libunlzma.a(uncomp.o):在函数‘sqlzma_init’中:
uncomp.c:(.text+0x3f0):对‘inflateInit_’未定义的引用
collect2: 错误: ld 返回 1
make[1]: *** [unsquashfs] 错误 1
首先,需要确保安装了zlib库。zlib1g,zlib1g-dbg,zlib1g-dev
其次,打开安装目录下的squashfs3.2-r2/squashfs-tools,找到Makefile文件,找到
[plain] view plain copy
LDLIBS += -lz -L{LzmaAlone} -L{LzmaC}
把 -lz 去掉,成:
[plain] view plain copy
LDLIBS += -L{LzmaAlone} -L{LzmaC}
然后在找到包含LDLIBS的两行,后边添上 -lz 即可
[plain] view plain copy
mksquashfs: LDLIBS += -lpthread -lunlzma_r -llzma_r -lstdc++ -lz
unsquashfs: LDLIBS += -lunlzma -lz
./configure
make
make install
编译成功!
2、在编译 squashfs4.2时候编译出现以下错误:
gzip_wrapper.c:23:18: fatal error: zlib.h: No such file or directory compilation terminated.
make: *** [gzip_wrapper.o] Error 1
出现此错误需要安装一个软件:
sudo apt-get install zlib1g-dev
如果编译仍然出现
fatal error: lzma.h: No such file or directory错误,
需要安装一下“:
liblzma-dev
可以从 sudo apt-cache search "liblzma"
找到软件包后
sudo apt-get install liblzma-dev
安装完成后就可以编译通过
3、此时可以顺利编译通过SDK了,可以生成二进制image,下载到7628板子后,发现、竟然发现lzma他大爷校验的错误?有木有?什么意思嘛!!!
"lzma error 1 -must reset board to recover"
后来用度娘一搜,manfeel大神碰到过这个问题,问题源自于lzma版本错误,再次感谢manfeel!
进入source/vendors/Ralink/MT7628,查看Makefile
发现这个该死的Makefile调用的居然是系统默认的lzma文件,Ubuntu12.04的lzma版本是:
xz (XZ Utils) 5.1.0alpha liblzma 5.1.0alpha
果断修改,将4.32.7版本的lzma拷贝到source目录,修改Makefile如下:
#manfeel, do NOT use the system default lzma(5.1.0alpha), just use the 4.32.7
image: mkimage
(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S (ROOTDIR)/(LINUXDIR)/vmlinux (KERNELZ)
cd (IMAGEDIR) ; rm -f (KERNELZ).*; ../(COMP) -v -9 -f -S .(COMP) $(KERNELZ)
读者需自行搜罗 lzma-4.32.7.tar并编译,得到的lzma可执行文件放在上边的source目录即可。
mango@mango-V:~/RT288x_SDK/source$ ls
autoconf.h config.in lib linux-2.6.36MT.x lzma romfs uClibc-0.9.33.2
config History linux-2.4.x linux-2.6.36.x Makefile tools user
config.arch images linux-2.6.21.x linux-3.10.14.x PatchList uClibc++ vendors
mango@mango-V:/RT288x_SDK/source$ ./lzma --version
LZMA command line tool 4.32.7
LZMA SDK 4.32
mango@mango-V:/RT288x_SDK/source$
到这之后,可算能跑了
4、接下来,将无线驱动MT7688_LinuxAP_V4.0.1.0-Alpha_DPA_20140811.tar解压,会解压处mt_wifi和mt_wifi_ap两个文件夹,将这两个文件夹拷贝到RT288x_SDK/source/linux-2.6.36.x/drivers/net/wireless$下。接下来,我犯了一个巨大的错误,我错误的认为将wireless下的Kconfig改一下,也就是在该文件中增加source “mt_wifi_ap/Kconfig”就可以了,接着就这么做下去,发现一下问题:
a.MT_TX_COUNTER错误
后来想了半天,源码是不会有错的,而且环境也配置的差不多了,应该也没错。后来又是一顿搜,发现source顶层目录有一个ralink目录,心想“该目录会不会有诈?一般很少有人将代码放到内核源码的顶层,这么做很不科学的”。
打开这个目录下的Kconfig,发现已经有了如下几行,只不过注释掉了。
原来猫腻就在这,他source的是embedded下的Kconfig,而该Kconfig里又引入了mt_wifi_ap/Kconfig。
将最后那句source注释掉。至此,Kconfig修改完毕,接下来配置内核。
顶层source目录make menuconfig,勾选Default all settings,Customize kernel Setting。最后yes,会自动进入Linux Kernel Configuration。
Ralink Module->WiFi Driver Support:
进入Option下,去掉WAPI支持(如果有WAPI会编译错误,先去掉再说):
好了,一路推出保存,再make dep,make
最后编译出个mango_uImage,烧入板子即可启动。
最后,会搜到一个MT7628_AP的无线,可以连上把玩一番。
编译过后,其实只是一个开始,以后还要移植到openwrt上,继续加油吧。
原作者:guangmangdz