设为首页收藏本站

嵌入式联盟

最近看过此主题的会员

查看: 168|回复: 4

x6818上实现4g流量共享给以太网口

[复制链接]

0

主题

1

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2018-10-20 12:14:27 | 显示全部楼层 |阅读模式
本帖最后由 lzh 于 2018-10-20 15:29 编辑

        其实也就是snat,dnat之类的网络地址转换功能,在linux下实现我还是非常熟悉的.ip转发在linux下很容易实现,开启内核的ip转发功能,用防火墙做一个snat和dnat就可以.
        本以为很容易实现,但过程异常曲折,遇到好多坑.现记流水账记录一下功能完成经历.
环境
板子型号:九鼎创展x6818
内核版本:linux3.4
安卓版本:Android5.1
编译环境:ubuntu18.04(没成功),ubuntu12.04(成功了)
致远4g模块ec20在x6818安卓系统上的功能实现
        我就在淘宝上搜了一下ec20,并在网上查了一下发现x6818内核是集成了ec20驱动的,插上去就能用,于是在淘宝上买了一块功能最全的ec20让卖家发空运.
        同时我在朋友那里要到了他保存在百度网盘里的x6818的安卓固件,以及一大堆x6818的其他系统固件,在我使用破解版的百度网盘下载到一半时,百度网盘客户端提示"网络错误",可能是文件太大,小文件数量太多,超速下载被百度检测到了,然后我使用了好几年不限速的破解版百度网盘客户端再也不能用了,下任何文件都提示网络错误.不过x6818安卓版的固件我已经下载好了.
        第二天中午去自取了快递后,高高兴兴地插上板子,发现和没插一样,我联系了ec20卖家,他让我找x6818客服,x6818客服说x6818只支持老版本的ec20,我这个ec20太新了,让我找ec20卖家,ec20卖家说这是板子的问题,应该由板子厂商解决.最后,x6818客服说他们正在打新包,我向他们要了源码打算自己按照ec20用户指南里添加驱动.
        客服给的源码也是在百度网盘里的,7.7g,限速100多k的百度网盘客户端要下好几天,我只好冲了一个月的会员.
        下午的时候客服给了一个新的固件给我,我刷了后直接进不去系统了.
编译源码
        晚上终于把源码下载好了,在windows下用好压解压要1个多小时!!!
        按照开发指南上安装库,我ubuntu系统是18.04的,太新了,apt安装某些库时提示库名已经由libxxx变成libxxx2了,更有些库直接提示没有.而且手册上已经明确说明在非4.4版本的gcc上编译会报错.我尝试编译了一下,解决了几个错误,然后卡在一个无法解决的错误上了.
得.我用虚拟机装个ubuntu12.04再来编译吧.
        用mbp上安装了个ubuntu12.04,把源码压缩包解压在mbp的桌面上,感觉mac自带的解压功能解压这个bz2格式的压缩包比在windows下用好压快.然后共享到虚拟机里编译,编译内核过程中报错,提示某文件找不到,百度的解决办法是自己新建一个这个文件,当时我就感觉有点奇怪了,官方给的包不应该缺少文件啊.继续编译又发现少文件,继续百度,原来是windows和mac不区分文件名大小写,解压的时候把部分文件覆盖了,我只好把这7.7g的压缩包复制到虚拟机,在虚拟机里解压.尼玛!!!
编译文件系统的时候,我用8线程编译./mk -j=8 -s
        编译了一个多小时,我发现我虚拟机42g的磁盘只剩十几g了,我把7.7g的压缩包删了,过了一会,发现磁盘只剩几g的可用空间了,我百度了一下ubuntu12.04的卸载不常用的软件的方法,释放了几百兆的空间,但这只是杯水车薪,很快,我眼看着磁盘只剩400多k,编译终止!
我又给系统添加了一块100多g的磁盘,重启系统,输入密码后登录报错,应该是卸载软件时卸载多了.尼玛!!!

我在另一个tty上把新磁盘分区,把编译了一半的源码拷过去,然后新装了一个gnome桌面.
        重启,进系统后开始编译文件系统,8线程编译,mbp的风扇在狂啸,我一直等到凌晨3点多,编译过程一点没有要停止的样子,我就去睡觉了.
        周四9点半闹铃响后立刻看mbp,文件系统编译好了,46g!!!
        那天早上把x6818客服又发了一个固件包给我,内核,文件系统都刷了后还是进不去桌面,我推测应该是他们的文件系统的问题,于是刷了自己的文件系统后就可以进桌面了,但触摸屏是反的,我点上显示我点下,我点左显示我点右,客服让我用鼠标键盘将就这用,他们工程师正在测试.
        这次我插上sim卡后,板子能识别到联通网络了,但是没有信号,x6818客服说是缺少天线,尼玛,我买之前向ec20卖家咨询时他怎么不告诉我还需要一个天线才能用.在网上买已经来不及了,我搜了一些北京发货的商家问他们能不能自提,结果没一家说可以自提,我让他们发闪送,有一家老板说几块钱的东西闪送费50,他提示我到中发买.
        于是下午我就到中关村中发电子大厦了,一楼全部没有,在二楼刚下手扶电梯就买到了,5块钱.
        回去插上天线,配置一下apn,虽然在apn配置界面提示当前用户没有权限配置,但是配置完全没有问题.
        有信号了,终于能上网了,但板子在重启几次后反着的触摸屏彻底不能用了.在客服把我拉进的群里问x6818的技术支持啥时候能解决,技术支持一直没回复.(刚才(20181019 23.47)登录了那个qq,发现x6818技术支持终于在今天的18点多回复了,并发了一个新固件)
        官方一直没给出解决办法,我自己解决驱动问题吧.从昨天我就开始搜x6818 安卓 ec20相关的资料,最终我根据S5P4418 android 5.1 EC20 R2.0 PCIE接口调试记录和其他几篇相关博文,加上ec20卖家给我的<<Quectel_WCDMA<E_Linux_USB_Driver_User_Guide_V1.6.pdf>>,<<Quectel_Android_RIL_Driver_User_Guide_V1.6.pdf>>和"reference-ril"文件夹,自己改了源码,大致流程如下:
  • 在配置内核功能make menuconfig时中打开一些usb和ppp相关功能;
  • 在内核的drivers目录下修改一些和usb相关的源码,将ec20的设备号加进去;
  • 修改文件系统的/system/core/rootdir/init.rc,修改增加一些服务;
  • 用致远提供的reference-ril替换自带的reference-ril目录.
    在下午编译了一个自己的固件,我大致推算了一下时间,编译一次文件系统大概要3个多小时.

        在触摸屏无法使用后,我刷上了自己编译的内核和文件系统,一切正常,然后开始调试4g流量共享以太网口了.




因为论坛字数限制,后面部分在楼下写


回复

使用道具 举报

0

主题

1

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2018-10-20 12:15:14 | 显示全部楼层
4g流量共享以太网口实现

    我用一根网线一端插在板子上,一端插在笔记本上,在终端下分别手动给他们配上同网段的ip,但是相互无法ping通,在笔记本ping板子时,我在板子的串口调试界面用

    busybox ifconfig

发现以太网卡eth0收到很多包,但是发不出去,应该是笔记本的ping发给板子了,板子却无法给笔记本回复ping包.

    我在板子安卓的以太网设置界面,把以太网口ip配置了一下,在设置界面打开以太网口后,可以ping笔记本了,但板子又无法ping通外网了.在设置界面把以太网卡关了,才可以ping通外网,但又ping不通笔记本了.
   
    在网上查了一下,都是说Android网络有优先级判定,无法两块网卡同时工作,需要改配置文件,我看了一下,应该是java相关的文件,看不懂.但是我还是找了一篇解决方法较为简单的博文[android6.0实现双网卡上网](https://www.jianshu.com/p/42e0dca8a0f2),改了文件系统源码,原文描述如下:

我只是修改了frameworks\base\core\res\res\values-large\config.xml

     <string-array translatable="false" name="networkAttributes">  
           <item>"wifi,1,1,1,-1,true"</item>  
           <item>"mobile,0,0,0,-1,true"</item>  
           <item>"mobile_mms,2,0,2,60000,true"</item>  
           <item>"mobile_supl,3,0,2,60000,true"</item>  
           <item>"mobile_hipri,5,0,3,60000,true"</item>  
           <item>"mobile_fota,10,0,2,60000,true"</item>  
           <item>"mobile_ims,11,0,2,60000,true"</item>  
           <item>"mobile_cbs,12,0,2,60000,true"</item>  
           <item>"wifi_p2p,13,1,0,-1,true"</item>  
           <item>"ethernet,9,9,1,-1,true"</item>     
     </string-array>

上面这一部分中加入了ethernet这一项,并且优先级和wifi一样。

因为我分不清mobile_mms,mobile_supl之类以mobile开头的名称代表什么,所以我把他们优先级全改一样的了,都是"1,-1",执行

    make clobber

清除output和中间文件,重新编译,编译好后,刷上板子,结果板子有信号但是信号上一直有个感叹号,无法联网,估计是配置文件不能这么改.我又把config.xml改回来了,只把mobile和ethernet优先级调成一样的了,周五凌晨,又开始重新编译文件系统,编译一半,又报错了,原来这次我编译错了地方,在那块42g硬盘上编译的,磁盘空间不足导致的错误.尼玛,又白等好几个小时了!!!

    愤怒的我为了不再犯这种愚蠢的错误,我立刻把那块42g硬盘上的源码全删了.
   
    再次重新编译文件系统,已经凌晨1点了,今天实在太累了,睡觉.

        周五起床后,我没急着刷新编译好的文件系统,又看了一下搜到的资料,仔细想了一下,虽然那些资料没明确写出他们网卡的工作情况,但根据他们的描述,能推测出他们的情况应该一块网卡up后,另一块网卡down掉了.而我在板子的终端用

    netcfg

查看,我的板子两块网卡都是up的,而且都是有ip的.可能是因为我以太网卡用

    busybox ifconfig eth0 192.168.100.1 up  

命令配置的,不是在图形桌面启动的以太网卡,所以那些博文说的情况应该是和我不同.

        我在搜到的资料中又看到了一个是用静态路由表实现的双网卡ip转发功能--Android WiFi 以太网同时上内外网,于是照葫芦画瓢,根据我板子网络情况在我的板子上执行了

    ip route add 192.168.100.0/24 dev eth0 proto static scope link table ppp0

我的板子终于能ping通笔记本了!!!

        这个ip route命令我不太熟悉,我以前都是用route命令配置静态路由表的.

        板子和笔记本网络通了之后,接下来就是做网络地址转换了,我知道linux的防火墙有这个功能,但iptables命令太复杂了,记不住,百度"linux iptables 路由转发 局域网 外网"之类的关键词,就能找到资料,我是借鉴这篇博文的--iptables nat-让linux做为路由器,实现局域网访问外网,在我的板子终端执行:

    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.3.1.100 #最后的ip是手机卡从运营商处获得的ip

        但是笔记本还是ping不通外网,又搜了下资料,在知乎上看到了-为什么 Android 系统下 ip 转发功能不起作用?,回答里说Android的iptables有点奇怪,和linux不一样,默认的规则会阻止ip转发,需要先清空规则.

        下面是我在网络配置上做的笔记:

s5p6818

网卡
ppp0        10.20.4.33/32
eth0        192.168.100.1/24

设置eth0
busybox ifconfig eth0 192.168.100.1 up

查看dns
getprop | grep ppp

先开启内核的ip转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

设置路由转发功能
清空规则(必须执行)
iptables -F
iptables -t nat -F
iptables -X
设置默认允许转发
iptables -P FORWARD ACCEPT
ip转发规则
ip route add 192.168.100.0/24 dev eth0 proto static scope link table ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to 10.0.17.152(这是临时ip,根据实际改)

笔记本
设置网络(在图形界面下设置的)
enx00e04c6954ba        192.168.100.20/24 gw 192.168.100.1

设置dns
vim /etc/resolv.conf
123.123.123.123

        按照这个流程配置网络,笔记本就可以连外网了!!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2018-11-8 15:00:59 | 显示全部楼层
不容易啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EBMSKY Inc. |冀IPC备17022971号   

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表