软件包管理
在OpenWRT下使用的软件包管理技术叫做OPKG,它是一个轻量级的软件包技术,已经成为开源嵌入式的事实标准,它类似CentOS下的yum,可以实现对预编译的二进制软件下载。
输入opkg即可看到整个软件的完整帮助信息。语法格式:opkg [参数...] 子命令 [子参数...],参数有:
update 下载服务器上可用的软件包列表
upgrade <包名> 升级软件包
install <包名> 安装软件包
configure <包名> 配置某一个软件包
remove <包名> 卸载软件包
info [pkg|regexp] 显示出指定软件包的信息
系统命令远比我介绍的要多的多,而且这些命令是我们最常用的。本着深入浅出的态度,大家根据自己的能力,希望学更多的童鞋可以自己详细查看下opkg的帮助文档。
这里我们举例演示下下载usbutils软件包,该软件包是现实出当前USB总线上插入了什么设备。
更新opkg的包列表,请注意,每次操作opkg下载之前都要先执行一次这个,确保包列表是同步的:
安装usbutils包,OPKG会自动给你选择所依赖的其他包关系:
这样就安装完成了,我们执行以下lsusb看USB总线现在有啥。安装后软件包会被保存在/overlay的分区中,不会丢失:
root@OpenWrt:/# lsusb
软件包内核依赖
请注意,这一节希望大家能永远记住。
在opkg安装的时候,有时候会有内核模块安装,这个时候某些情况下软件包安装不上,提示内核版本不匹配,错误大概是这样:
root@OpenWrt:~# opkg install kmod-usb-storage
Installing kmod-usb-storage (3.3.8-1) to root...
Downloading http://182.92.3.46/hoowa/openwrt/120901/ar71xx/packages/kmod-usb-storage_3.3.8-1_ar71xx.ipk.
Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-usb-storage:
* kernel (= 3.3.8-1-6acd2a17c333f503dc86081b03fe73c0) * kernel (= 3.3.8-1-6acd2a17c333f503dc86081b03fe73c0) *
* opkg_install_cmd: Cannot install package kmod-usb-storage.
请注意那句kernel (=.... 那句表示内核版本不匹配,产生这个的主要原因是教学固件在网上的内核升级了,唯一的解决办法就是重新刷固件。
在目前已有的内核模块教学固件中都已经编译为模块了,但是在本教程彻底完成之前,是有可能会重新产生内核的,因此请大家一定记住这个问题。
OPKG配置:
这里是列表出opkg的配置文件,其中第一句的URL地址是表示当前这台机器下载的二进制包所使用的服务地址,因为处理器指令集不一样,所以地址很丰富的。也就是说,你可以自己给自己的智能路由产品搭建一个软件包服务器。如果大家想知道有多少软件可以安装,就可以用你的浏览器直接访问那个地址,即可列表出全部的可用软件包。