前言

基于树莓派(RaspBerry Pi)、香橙派(Orange Pi)开发Linux嵌入式设备的经验,总结一些开发中注意的点。本人非嵌入式专业人员,目前连编译rom都不会,目前通过公开的系统在应用层开发嵌入式产品,并会逐渐向底层学习。本系列文章所有内容均为个人开发过程中逐渐累积的经验之谈,如有问题,欢迎路过大神指出,共同学习。 本文只介绍遇到的问题以及解决的思路,具体的实现过程请自行查阅其他博客
作为嵌入式设备,用户能操作的功能十分有限。所以需要对系统进行各种维度的优化,保证长久可用。

1、可用空间

用户无法清理磁盘空间,此时需要开发者来维护硬盘可用容量,防止容量爆满。在系统层自行研发的app生成的数据,开发者自身应该非常了解。

1.1 数据库

首先是数据库的log,我的方案是使用mysql的event结合存储过程定期清理一定时间前log。

1.2 文件log

例如nginx的log(access.log、error.log)等等,这部分我使用了logrotate工具来控制log的体积以及删除操作。
/etc/logrotate.d/nginx

/usr/local/log/*_nginx.log {
size=1M
daily
missingok
rotate 10
notifempty
compress
create 0644 www-data www-data
su root root
postrotate
        if [ -f /run/nginx.pid ]; then
           kill -USR1 `cat /run/nginx.pid` # nginx重新打开日志文件
        fi
endscript
}

大概介绍一下配置能实现的效果:/usr/local/log/*_nginx.log文件大于1M时进行滚动(转储成新文件)并压缩,最多10个。
该工具支持多种log管理方式,压缩、定期打包等等,相关文章很多,大家可以自行了解。

2、写入频率

众所周知,嵌入式产品一般使用非易失性存储(NAND、emmc)作为硬盘,而这种介质是有擦写寿命的。为了保证嵌入式产品的寿命,有必要对硬盘的读写操作频率进行限制。
由于采用了armbian系统,该系统使用了zram,在内存划分了一部分作为硬盘使用。并定期同步到硬盘中。通过这个方式可以优化硬盘的读写寿命。可参考关于该机制的一个文章。 对于开发者自己的app,尽可能的减少硬盘的读写次数,优先使用内存或zram分区。

未完待续