月度归档:2019年05月

简单说下博通ARM芯片的CFE编译方法

提到CFE,可能对于经常折腾路由器刷机的朋友们并不陌生,毕竟早在2010年左右的时候,大家就已经开始修改CFE参数来刷机了。

CFE全称叫做Broadcom Common Firmware Environment,是嵌入式系统中用来初始化硬件并引导启动固件的一个底层程序,类似于电脑的BIOS。

相比U-Boot,CFE主要使用于博通芯片组的机器,它开放性小资料少,至今很多博通机型在刷入第三方固件时,仍然需要通过命令行+tftp服务器的方式上传固件刷机,无法做到不死uboot一样操作简单直观、只需要打开浏览器上传固件就可以完成刷机。

当然,CFE也不是完全闭源的,我们还是可以找到它的一些源码,比如梅林源码里就有Broadcom SDK6和SDK7的源码。河南猫猫无线尝试编译了 CFE 部分,并做了一些研究,在这里简单记录一下。

搭建编译平台和安装环境这里就不再赘述,网上教程一抓一大把,大家可以自行搜索解决。这里仅从开始下载源码到编译来讲讲。

首先下载梅林源码。
执行命令 git clone http://github.com/RMerl/asuswrt-merlin

我的代码放在/mnt/asuswrt-merlin

然后添加环境变量:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/asuswrt-merlin/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/lib/
export PATH=$PATH:/opt/brcm/hndtools-mipsel-linux/bin:/opt/brcm/hndtools-mipsel-uclibc/bin:/opt/brcm-arm/bin
export PATH=$PATH:/mnt/asuswrt-merlin/release/src-rt-6.x.4708/ctools/

在/mnt/asuswrt-merlin/release/src-rt-6.x.4708下面新建一个.config文件,内容都是export开头的参数导入。如果没有这个文件,可以手工添加。比如

export IPV6SUPP=y
export HTTPS=y
export ARM=y
export BCM57=y
export AUTODICT=y
export BBEXTRAS=y
export USBEXTRAS=y
export EBTABLES=y
export SAMBA3=3.6.x
export MEDIASRV=y
export MODEM=y
export MODEMPIN=y
export BECEEM=y
export PARENTAL2=y
export ACCEL_PPTPD=y
export PRINTER=y
export STAINFO=y
export WEBDAV=y
export USB=USB
export GRO=y
export APP=network
export PROXYSTA=y
export JFFS2USERICON=y
export CLOUDSYNC=y
export SWEBDAVCLIENT=y
export DROPBOXCLIENT=y
export FTPCLIENT=y
export SAMBACLIENT=y
export DNSMQ=y
export SHP=y
export NVRAM_64K=y
export RTAC68U=y
export BCMWL6=y
export BCMWL6A=y
export TUNEK=n
export BCM5301X=y
export DISK_MONITOR=y
export BTN_WIFITOG=y
export LOGO_LED=y
export OPTIMIZE_XBOX=y
export ODMPID=y
export LED_BTN=y
export ROG=y
export SSD=n
export EMAIL=y
export BCMSMP=y
export XHCI=y
export SSH=y
export JFFS2=y
export NFS=y
export OPENVPN=y
export USER_LOW_RSSI=y
export TIMEMACHINE=y
export MDNS=y
export VPNC=y
export BRCM_NAND_JFFS2=y
export JFFS2LOG=y
export BCMFA=y
export BWDPI=y
export HSPOT=y
export DUMP_OOPS_MSG=y
export LINUX_MTD=64
export BCM7=n
export TEMPROOTFS=y
export DEBUGFS=y
export SNMPD=y
export TOR=y
export MULTICASTIPTV=y
export QUAGGA=y
export BCM_RECVFILE=y
export LAN50=y
export ATCOVER=y
export GETREALIP=y
export BCM5301X_TRAFFIC_MONITOR=n
export CLOUDCHECK=y
export NATNL=y
export REBOOT_SCHEDULE=y
export TFAT=y
export HFS=tuxera
export NTFS=tuxera
export IPSECMOD=n
export REPEATER=y
export DUALWAN=y
export DNSFILTER=y
export UPNPIGD2=n
export DNSSEC=y
export NANO=y
export FAKEHDR=y
export FORCE_SN=380
export FORCE_EN=1031
export BUILD_NAME=RT-AC68U

然后在/mnt/asuswrt-merlin/release/src-rt-6.x.4708/cfe/build/broadcom/bcm947xx下面执行make,稍等一会就可以在此目录下面生成cfe文件。

ubuntu18.04开机自动挂载swap分区

gcc@gcc-x64:~$ sudo mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)
no label, UUID=947208ba-c306-4ec6-9b01-e9fb32eef9b4

修改/etc/fstab文件,添加一行

UUID=947208ba-c306-4ec6-9b01-e9fb32eef9b4 swap swap defaults 0 0

保存,重启即可。

ubuntu下面tar打包时排除某几个子文件夹的方法

网上很多教程说的都没用。应该这样做才行。

比如目前位于/mnt下面,openwrt位于/mnt下面。打包时候排除openwrt下面的staging_dir和build_dir等文件夹

tar czvPf openwrt.tar.gz –exclude=openwrt/build_dir –exclude=openwrt/staging_dir –exclude=openwrt/bin –exclude=openwrt/tmp –exclude=openwrt/.git openwrt/

注意–exclude前面是两个–,不知道怎么的,明明打的是两个-,但是wordpress发出来就变成了一个–。

维修一台半残的腾达AC15

之所以说是半残,是因为之前这位朋友咨询过改机的事情,然后并没有找我们改而是找别人改了,结果改了之后,5G信号非常弱,只能在路由器旁边才能使用,加上2.4G频段目前干扰严重,基本上没法用,而5G又十分微弱,这个路由器等于就没法使用了,无奈只好联系我们看看能不能修好。

以下是摘录图片里的文字:“很惭愧啊,专业的事情还是应该找专业的人来干,我找人硬改了腾达AC15以后,2.4g和5g信号都减弱了,2.4g还能正常使用,5g信号根本没法用,无任何阻挡的3米以外,5g信号都非常弱。我现在有两个诉求:一是解决5g信号问题,二是刷双系统,我在万不得已的情况下还可以退回腾达固件使用。不知道您愿不愿意帮忙?”

话都说到这份上了,总不能眼睁睁看着这位朋友的路由器废掉呀,那就寄来修呗。

然后收到的路由器是这个样子滴。

接下来自然是拆机检查了,AC15改机必须改无线模块部分的飞线,否则信号就不好。为什么呢,道理也很简单,因为无线模块的PA芯片是靠gpio来控制的,腾达原厂的固件和华硕固件的GPIO定义并不一样,所以改机并不是简单的改内存闪存刷上固件就完事的,很多细节的地方也需要处理好,否则就容易出现这样的问题。

拆开外壳,发现主板上NAND闪存管脚处有很多松香的痕迹,另外发现SPI闪存也已经被拆去了,如果要改双启动的话,需要补上这个闪存,还要设置个跳线来切换NAND和SPI的启动。

拆开主板上的无线模块屏蔽罩,发现果然是无线模块没有飞线导致的。于是三下五除二,飞好线,然后要改双启动。这里说下一个技巧,飞线前先处理飞线—–即在线的头部先上BGA膏+上锡(如同新买的电烙铁上锡一样),然后可以轻而易举的飞上。飞另一端时同样方法处理。

以上是搞好后分别拍摄的腾达原厂和华硕AC68U双系统的界面,5G的无线信号也恢复到原厂的状态,成功搞定。

 

ubuntu 18.04 64位系统,编译梅林时报错cc1: error while loading shared libraries: libelf.so.1

ubuntu 18.04 64位系统,编译梅林时报错。

cc1: error while loading shared libraries: libelf.so.1: cannot open shared object file: No such file or directory

是因为缺少32位的libelf.so.1导致。

使用sudo apt-get install libelf1:i386
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package libelf1:i386

结果软件仓库没有这样的安装文件。

解决办法,去http://pkgs.org/download/libelf1下载

http://ubuntu.pkgs.org/18.04/ubuntu-main-i386/libelf1_0.170-0.4_i386.deb.html

将libelf.so.1,libelf-0.170.so放入/usr/lib32,权限777即可。