为4412全能版V_4.0 ubuntu 在Android4.4.4的内核下移植wifi背景:由于厂家迅为的全能版的V4.0底板和V3.5底板的wifi部分有改动,所以需要重新移植wifi 软件基础 :基于迅为提供的全能版V_4.0的Android4.4.4源码编译出来的ubuntu内核之上移植ubuntu文件系统硬件基础:全能版V4.0底板,4412的scp大内存,或者pop大内存都行一. 预备知识: 1.WPA Supplicant,这里我使用的是wpa_supplicant-2.5.tar.gz 简介:WPA Supplicant is a Wi-Fi Protected Access (WPA) client and IEEE 802.1X supplicant. It implements WPA key negotiation with a WPA Authenticator and Extensible Authentication Protocol (EAP) authentication with an Authentication Server. In addition, it controls the roaming and IEEE 802.11 authentication/association of the wireless LAN driver. This is useful for connecting to a password protected wireless access point.大概意思是: WPA Supplicant 是一个受保护的wifi接入点的客户端,这个客户端兼有链接和认证802.1x协议的功能。它具体实现了WPA 密码在WPA 认证器上的认证功能,并且控制着漫游(访问外网)和无线局域网驱动的IEEE 802.11的认证和链接。 在连接有密码保护的无线接入点时是很有用的。 2.libnl,这里我使用的是libnl-1.1.4.tar.gz简介:The libnl-suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.大概意思是:这个libnl套件是是一些库的集合,这些库为基于Linux内核接口的网络连接协议提供了一些API。
因为WPA Supplicant是基于linux内核的,并且需要连接网络,所以需要libnl来提供API。
3.openssl 这里我使用是openssl-0.9.8za.tar.gz简介:The OpenSSL package contains management tools and libraries relating to cryptography.These are useful for providing cryptographic functions to other packages, such as OpenSSH, email applications and web browsers (for accessing HTTPS sites).大概的意思是:OpenSSL包含了一些管理工具和一些涉及到密码学的库。他对需要加密的传输包是有用的,比如OpenSSH电子邮件或者是网页浏览。很明显openssl在用WPA Supplicant来上网是时是起到加密作用的。二. 一些必要的资料1. 6620_launcher 2. firmware文件夹下的东西 3. mt6620文件夹下的东西 4.genetlink.h前三个都是MT6620这个wifi芯片厂家提供的源码驱动编译出来的驱动和固件,以及加载固件所有的工具。这些东西都跟Android4.4.4共用,可以在编译好的Android源码中的out目录下找到。另外第四个是在调试过程中发现libnl的一个bug,为了解决这个问题需要用这个文件和libnl中的替换,下面有介绍。三. 具体操作步骤:以下操作是在开发板上进行,需要提前把以上提到的资料复制到TF卡上,然后进行下面的步骤。另外需要首先安装vim ,开机后连接网线输入apt-get install vim ①. 将厂家提供的东西替换之前版本ubuntu系统上同样的东西1. 备份6620_launcher,将新的6620_launcher复制过去,并且设置权限为777cp /system/bin/6620_launcher /system/bin/6620_launcher_backcp /media/disk/wifi/6620_launcher /system/bin/6620_launcherchmod 777 /system/bin/6620_launcher2. 备份modules文件夹,将mt6620复制过去,命名为modules,并且设置权限777cp -r /system/lib/modules /system/lib/modules_backrm -r /system/lib/modulescp -r /media/disk/wifi/mt6620 /system/lib/moduleschmod 777 /system/lib/modules/*3. 备份firmware,将新的firmware复制过去,并且设置权限为777cp -r /system/etc/firmware /system/etc/firmware_backrm -r /system/etc/firmwarecp -r /media/disk/wifi/firmware /system/etc/firmwarechmod -R 777 /system/etc/firmware/*cp -r /etc/firmware /etc/firmware_backrm -r /etc/firmwarecp -r /media/disk/wifi/firmware /etc/firmwarechmod -R 777 /etc/firmware/*②.修改wifi名字和密码文件将/etc/wpa_supplicant.conf文件中除了第一行全部删掉最后结果应该是只剩下这句话:ctrl_interface=/var/run/wpa_supplicant③.修改脚本文件/etc/init.d/itop-set将脚本中 “support MT6620 WIFI Module” 部分修改成这样 mknod /dev/stpwmt c 190 0 mknod /dev/stpgps c 191 0 mknod /dev/fm c 193 0 mknod /dev/wmtWifi c 194 0 insmod /system/lib/modules/mtk_hif_sdio.ko insmod /system/lib/modules/mtk_stp_wmt.ko insmod /system/lib/modules/mtk_stp_uart.ko insmod /system/lib/modules/mtk_stp_gps.ko# #insmod /system/lib/modules/hci_stp.ko# insmod /system/lib/modules/mt6620_fm_drv.ko# insmod /system/lib/modules/mtk_fm_priv.ko insmod /system/lib/modules/mtk_wmt_wifi.ko WIFI_major=194 insmod /system/lib/modules/wlan_mt6620.ko chmod 0666 /dev/stpwmt chmod 0666 /dev/stpgps chmod 0666 /dev/fm chmod 0666 /dev/wmtWifi chmod 0660 /dev/ttySAC0 chmod 0666 /dev/gps /system/bin/6620_launcher -m 1 -b 115200 -n /system/etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC0 & sleep 5 echo 1 > /dev/wmtWifi# wpa_supplicant_topeet -d -Dwext -iwlan0 -c /etc/wpa_supplicant.conf & /usr/bin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf & sleep 3 dhclient wlan0 & 特别注意:insmod /system/lib/modules/wlan_mt6620.ko 和 /usr/bin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf &还有/system/bin/6620_launcher -m 1 -b 115200 -n /system/etc/firmware/mt6620_patch_hdr.bin -d /dev/ttySAC0 &一定要一致④.移植预备知识中提到的三个资料1. 在根目录下建立wpa文件夹,并且将libnl-1.1.4.tar.gz、openssl-0.9.8za.tar.gz、wpa_supplicant-2.5.tar.gz拷贝到里面解压。2.把wpa_supplicant-2.5里面的patches文件夹下的openssl-0.9.8za-tls-extensions.patch文件拷贝到openssl-0.9.8za目录下,运行:patch -p1 < openssl-0.9.8za-tls-extensions.patch若果提示错误patch: command not found,那么执行apt-get install patch,然后在运行。3.进入openssl-0.9.8za目录新建install文件夹,用于装opessl,修改Makefile,修改如下:CC=gccRANLIB=ranlibINSTALLTOP=/wpa/openssl-0.9.8za/installOPENSSLDIR=/wpa/openssl-0.9.8za/install然后编译 make安装 make install完成后会在/wpa/openssl-0.9.8za/install下生成一些文件然后执行:cp -r /wpa/openssl-0.9.8za/install/lib/* /usr/lib4.进入libnl-1.1.4配置安装目录:./configure --prefix=/usr然后:make编译完之后需要执行以下步骤,把提供的genetlink.h替换libnl-1.1.4中的genetlink.hcp -r /wpa/libnl-1.1.4/lib/* /usr/lib/rm /wpa/libnl-1.1.4/include/linux/genetlink.hcp /media/disk/wifi/genetlink.h /wpa/libnl-1.1.4/include/linux/cp -r /wpa/libnl-1.1.4/include/* /usr/include/5.进入/wpa/wpa_supplicant-2.5/wpa_supplicant下,编译wpa_supplicant首先建立配置文件:cp defconfig .config然后修改.config,增加以下内容:CC=gcc -L/wpa/openssl-0.9.8za/install/lib CFLAGS+=-I/wpa/openssl-0.9.8za/install/includeLIBS+=-L/wpa/openssl-0.9.8za/install/lib然后:make把编译出来的wpa_supplicant和wpa_passphrase复制到/usr/bin中。这里注意/usr/bin已经有wpa_passphrase,可以先将这个文件删除,然后再复制过来另外为了排除干扰可以把之前wifi的东西删除:rm /sbin/wpa_supplicantrm -r /etc/wpa_supplicantrm /system/bin/wpa_supplicant四.连接wifi经过以上步骤wifi的移植就结束了,下面是怎么连接wifi。1. 开机之后输入wifi名字和密码,类似于这样:wpa_passphrase XXX "YYY " >> /etc/wpa_supplicant.conf比如我们的wifi名字是Xm 密码是aaaaaaaa那么就这样输入:wpa_passphrase Xm "aaaaaaaa" >> /etc/wpa_supplicant.conf 2. 再次开机就可以自动连接上了,测试是否可以联网可以ping一下百度ping www.baidu.com至此,在公司同事的帮助下,Ubuntu移植WiFi的工作就完成了。在检验wifi能够成功连接的情况下,可以把那些备份文件删掉,这样可以减小系统的大小。另外强调一点就是,上面的所有操作都是在迅为的V4.0全能板上烧写迅为的Ubuntu系统做的。