Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40634
  • 博文数量: 14
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 29
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-18 12:54
  • 认证徽章:
文章分类

全部博文(14)

文章存档

2016年(11)

2015年(2)

2013年(1)

我的朋友

分类: LINUX

2016-08-16 18:20:11

最开始,第一步我们先拿最纯净的MediaTek_ApSoC_SDK_4300_20140916.tar开刀,不增加无线驱动。
1、按照sdk里的知道文档来说,先编译安装几个工具包的,编译mksquash_lzma-3.2的时候出现了如下问题:

[plain]   view plain copy
  1. /home/test/RT288x_SDK/toolchain/mksquash_lzma-3.2/lzma443/C/7zip/Compress/LZMA_C/libunlzma.a(uncomp.o):在函数‘sqlzma_un’中:  
  2. uncomp.c:(.text+0x67):对‘inflateReset’未定义的引用  
  3. uncomp.c:(.text+0xa7):对‘inflate’未定义的引用  
  4. uncomp.c:(.text+0x1b2):对‘zError’未定义的引用  
  5. /home/test/RT288x_SDK/toolchain/mksquash_lzma-3.2/lzma443/C/7zip/Compress/LZMA_C/libunlzma.a(uncomp.o):在函数‘sqlzma_init’中:  
  6. uncomp.c:(.text+0x3f0):对‘inflateInit_’未定义的引用  
  7. collect2: 错误: ld 返回 1  
  8. make[1]: *** [unsquashfs] 错误 1  

首先,需要确保安装了zlib库。zlib1g,zlib1g-dbg,zlib1g-dev

其次,打开安装目录下的squashfs3.2-r2/squashfs-tools,找到Makefile文件,找到

[plain]   view plain copy
  1. LDLIBS += -lz -L${LzmaAlone} -L${LzmaC}  
把 -lz 去掉,成:
[plain]   view plain copy
  1. LDLIBS += -L${LzmaAlone} -L${LzmaC}  

然后在找到包含LDLIBS的两行,后边添上 -lz 即可

[plain]   view plain copy
  1. mksquashfs: LDLIBS += -lpthread -lunlzma_r -llzma_r -lstdc++ -lz  
  2. 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 settingsCustomize kernel Setting。最后yes,会自动进入Linux Kernel Configuration

Ralink Module->WiFi Driver Support


进入Option下,去掉WAPI支持(如果有WAPI会编译错误,先去掉再说):


好了,一路推出保存,再make depmake

最后编译出个mango_uImage,烧入板子即可启动。

最后,会搜到一个MT7628_AP的无线,可以连上把玩一番。
编译过后,其实只是一个开始,以后还要移植到openwrt上,继续加油吧。


阅读(1840) | 评论(0) | 转发(0) |
0

上一篇:openwrt在脚本中调用UCI接口, 非常值得学习

下一篇:没有了

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册