月度归档:2019年06月

编译openwrt时取消预选的软件包

使用lean的openwrt代码,发现里面预选了很多luci-app,而这些并不是我需要的功能,每次编译的时候都要取消选中,很是麻烦。

研究了一下,找到了设置这个的地方,记录一下。

其实这个设置在/openwrt/include目录下面的target.mk中。

default device type

DEVICE_TYPE?=router

Default packages – the really basic set

DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd block-mount \
kmod-nf-nathelper kmod-nf-nathelper-extra kmod-ipt-raw \
default-settings luci luci-app-ddns luci-app-sqm luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot \
luci-app-filetransfer luci-app-vsftpd ddns-scripts_aliyun \
luci-app-pptp-server luci-app-arpbind luci-app-vlmcsd luci-app-wifischedule luci-app-wol luci-app-ramfree \
luci-app-sfe luci-app-flowoffload luci-app-nlbwmon luci-app-usb-printer luci-app-accesscontrol

For nas targets

DEFAULT_PACKAGES.nas:=fdisk lsblk mdadm automount autosamba luci-app-usb-printer

For router targets

DEFAULT_PACKAGES.router:=dnsmasq-full iptables ppp ppp-mod-pppoe firewall kmod-ipt-offload
DEFAULT_PACKAGES.bootloader:=

而在openwrt原版里面是这样的:

default device type

DEVICE_TYPE?=router

Default packages – the really basic set

DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd

For nas targets

DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm

For router targets

DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-ipt-offload
DEFAULT_PACKAGES.bootloader:=

openwrt编译过程中config.seed的用法

openwrt现在的新版本,编译完成后会在固件文件夹生成一个config.seed文件,这个文件就是你这个固件选择的包的一个记录,下次编译的时候可以直接复制它替换.config
文件,然后make menuconfig 保存编译即可。

编译openwrt时候禁用ipv6,Disable IPv6 on OpenWRT

IPV6很讨厌,尤其是家用时候,这时是不需要这个功能的。所以想在编译的时候就删除掉这个功能。

首先在Global build settings里面取消选中Enable IPv6 support in packages

然后修改/mnt/lean-190323/package/network/config/firewall里面的makefile文件,删除+IPV6:libip6tc,+IPV6:kmod-nf-conntrack6

修改/mnt/lean-190323/package/network/utils/iptables里面的makefile文件,删除+IPV6:libip6tc,

如果是ledev17.01,还需要在feeds/routing/miniupnpd的makefile里删除相关ipv6的依赖

在/mnt/lede-v17.01/package/network/utils/iptables删除

define Package/libiptc
$(call Package/iptables/Default)
SECTION:=libs
CATEGORY:=Libraries
DEPENDS:=+libip4tc +libxtables
# +libip6tc

另外lede-v17.01中,还要在busybox的network里面取消所有关于IPV6的选项,例如ping6啥的。否则依旧会报错

编译MT7628固件刷机后报错jffs2: Flash size not aligned to erasesize, reducing to 6272KiB

固件编译成功,刷机后开机启动过程中报错,

jffs2: Flash size not aligned to erasesize, reducing to 6272KiB

研究了一下,发现是dts文件中对固件大小定义错误导致的。

因为之前都是照抄其他7628方案的dts修改而来,所以沿用了别人的固件长度定义。

partition@50000 {

compatible = “denx,uimage”;

label = “firmware”;

reg = <0x50000 0x7b0000>;

而0x7b0000的长度换算成十进制就是8060928,然后除以1024等于7872,大于这个数值的固件就会报错。

改成0xfb0000问题解决。

X200在win8专业版64位系统下安装ThinkPad 电源管理软件

联想官网有ThinkPad 电源管理软件下载,但是遗憾的是该软件不支持WIN8系统,安装会报错自动退出。http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1197862934453

解决办法,报错退出后去C:\DRIVERS\VISTA\PWRMGRV目录下面,把setup.exe属性,兼容性,以兼容模式运行这个程序,设置为WIN7,然后确定,重新安装即可成功安装使用。

猫猫无线谈谈openwrt固件体积与squashfs压缩率的关系

openwrt编译中,很多时候路由器原生的spi flash闪存大多在8MB-16MB左右,32MB闪存的设备寥寥无几,如果想多添加一些功能进去,就可能会遇到闪存空间装不下的问题。这就需要对固件进行各种精简,去除不需要的功能。但是有时候费了九牛二虎之力,空间还是不够装,怎么办?

这时候,可以考虑通过设置squashfs的block size大小,来获取更高的压缩比,这样做出来的固件体积就更小。

这是因为在生成固件时,会调用mksquashfs_lzma进行压缩,而mksquashfs_lzma有一个叫block_size的参数,block_size越大通常压缩比也越大,同时解压所需内存也越多,不过一般可以不考虑内存的问题,因为现在的路由器只要能刷openwrt,内存基本上32M起步,128M甚至256M也屡见不鲜。所以内存不是问题。

openwrt默认的squashfs的block size是256,可以设置为512,以获取更高的压缩比,从而减小固件体积。

ubuntu18.04运行脚本报错let: not found

gcc@gcc-x64:/mnt$ ./cpu_usage.sh
./cpu_usage.sh: 15: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 16: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 17: ./cpu_usage.sh: let: not found
CPU: %
./cpu_usage.sh: 15: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 16: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 17: ./cpu_usage.sh: let: not found
CPU: %
./cpu_usage.sh: 15: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 16: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 17: ./cpu_usage.sh: let: not found
CPU: %
./cpu_usage.sh: 15: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 16: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 17: ./cpu_usage.sh: let: not found
CPU: %
./cpu_usage.sh: 15: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 16: ./cpu_usage.sh: let: not found
./cpu_usage.sh: 17: ./cpu_usage.sh: let: not found
CPU: %
^C
gcc@gcc-x64:/mnt$ let
-bash: let: expression expected
gcc@gcc-x64:/mnt$ sudo let
[sudo] password for gcc:
sudo: let: command not found

原因是/bin/sh 指向了 dash 而不是 bash ,但是 dash 不支持 let 命令。

解决办法,直接使用bash运行脚本即可。

bash 空格 脚本,回车即可