在安装USRP和BLADERF驱动的时候,都遇到了
W: 无法下载 http://ppa.launchpad.net/bladerf/bladerf/ubuntu/dists/trusty/main/binary-amd64/Packages Hash 校验和不符
W: 无法下载 http://ppa.launchpad.net/bladerf/bladerf/ubuntu/dists/trusty/main/i18n/Translation-en Hash 校验和不符
问题
注意这个地方实际上是OpenAirInterface自己要从这个源下载USRP或者是BLADERF的驱动。
那么当出现这个Hash校验和不符问题时一般可能是由于国内网络连接问题,或者是国内服务器缓存内容与源内容不一致导致的。可以尝试以下几种方法:
(1) 重新换一个源,可以尝试使用国内高校的源,并执行以下命令:
sudo rm -rf /var/lib/apt/list/*
sudo apt-get update
(2) 修改源,如图中所示,可以看出是由于bladerf/bladerf/的源出了问题(你可以根据具体情况看是哪个源的问题),可以在目录 /etc/apt/sources.list.d 找到juju的源配置文件 bladerf/bladerf/-stable-trusty.list,内容为:
deb http://ppa.launchpad.net/bladerf/bladerf/stable/ubuntu trusty main
手动将内容改为:
deb http://ppa.launchpad.net/bladerf/bladerf/stable/ubuntu/dists trusty main
然后执行sudo apt-get update
笔者按第二种方法改完之后,发现每次执行
./build_oai -I -w USRP
命令之后,/etc/apt/sources.list.d 目录下的配置文件又被添加了没有dists的条目。。所以又编译不过了
OpenAirInterface的./build_oai调用的是
openairinterface5g/cmake_targets/tools目录下的build_helper和openairinterface5g/targets目录下的build_helper.bash(build_oai.bash)
所以说修改build_helper和build_helper.bash中的内容,打开这两个文件,搜索USRP
把build_helper.bash中
check_install_usrp_uhd_driver(){
if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then
$SUDO bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu`lsb_release -cs` `lsb_release -cs` main" >> /etc/apt/sources.list.d/ettus.list'
$SUDO apt-get update
fi
$SUDO apt-get install -t $UBUNTU_REL_NAME uhd
test_install_package python
test_install_package libboost-all-dev
test_install_package libusb-1.0-0-dev
#test_install_package uhd
}
替换为
check_install_usrp_uhd_driver(){
if [ ! -f /etc/apt/sources.list.d/ettus.list ] ; then
#$SUDO bash -c 'echo "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/dists`lsb_release -cs` `lsb_release -cs` main" >> /etc/apt/sources.list.d/ettus.list'
$SUDO apt-get update
fi
$SUDO apt-get install -t $UBUNTU_REL_NAME uhd
test_install_package python
test_install_package libboost-all-dev
test_install_package libusb-1.0-0-dev
#test_install_package uhd
}
把build_helper中的
check_install_usrp_uhd_driver(){
#first we remove old installation
$SUDO apt-get remove -y uhd || true
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y
v=$(lsb_release -cs)
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu$v $v main"
#The new USRP repository
$SUDO add-apt-repository ppa:ettusresearch/uhd -y
$SUDO apt-get update
$SUDO apt-get -y --allow-unauthenticated install python python-tk libboost-all-dev libusb-1.0-0-dev
$SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
}
替换成
check_install_usrp_uhd_driver(){
#first we remove old installation
$SUDO apt-get remove -y uhd || true
$SUDO apt-get remove libuhd-dev libuhd003 uhd-host -y
v=$(lsb_release -cs)
$SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/dists$v $v main"
#The new USRP repository
#$SUDO add-apt-repository ppa:ettusresearch/uhd -y
$SUDO apt-get update
$SUDO apt-get -y --allow-unauthenticated install python python-tk libboost-all-dev libusb-1.0-0-dev
$SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host
}
其实就是把添加源的语句注释掉了,让他直接根据最开始修改的源来update,不要自己再添加源就可以了。
注意看这句话
#$SUDO add-apt-repository ppa:ettusresearch/uhd -y
为什么注释掉这句话,大家应该可以理解了吧(取消添加源的操作)
写在最后,笔者在编译完成后
出现状态如下:
.......
正在设置 libuhd-dev (3.5.5-1) ...
正在设置 uhd-host (3.5.5-1) ...
net.core.rmem_max = 50000000
net.core.wmem_max = 1048576
Processing triggers for libc-bin (2.19-0ubuntu6.13) ...
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
uhd-host 已经是最新的版本了。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 402 个软件包未被升级。
You do not have write permissions at the install location!
build have failed
You do not have write permissions at the install location!
build have failed!
简直头皮发麻,经过一天的努力,解决方法见本博客另外一篇博文。