第三章 系统环境搭建:Armbian系统优化、内核编译选项、Swap分区策略
好,咱们进入第三章。这一章是实打实的硬功夫。
很多朋友拿到全志H3的板子,第一件事就是刷个系统进去,然后直接开干。我告诉你,这样不行。你想想看,一个没优化过的Armbian,跑模拟器就像穿着棉袄游泳——能游,但绝对游不快。
我个人习惯是,拿到板子先花半天时间把底层环境收拾利索。这半天花得值,后面调优能省你几天时间。
3.1 Armbian系统基础优化
先说说Armbian。这系统本身不错,但默认配置是为通用场景设计的。咱们要跑retro游戏模拟器,得给它“减负”。
3.1.1 关闭不必要的服务
我见过很多人的H3板子,一开机就跑了十几个服务。什么蓝牙、打印机、Avahi……这些在游戏机上全是累赘。
执行这条命令,看看当前开了哪些服务:
systemctl list-units --type=service --state=running
然后一个个关掉。我个人习惯保留这些就够了:
ssh—— 你得远程连上去调试systemd-journald—— 日志还是要的networking—— 网络不能断
其他的,比如:
systemctl disable bluetooth
systemctl disable avahi-daemon
systemctl disable cups
systemctl disable cron
嗯,这里要注意。关掉cron可能会影响一些定时任务,但游戏机不需要这玩意儿。省下来的CPU周期,全给模拟器。
3.1.2 CPU频率与调度器调优
全志H3默认的CPU调频策略是interactive或者ondemand。这两种策略会动态调整频率,省电是省电,但延迟高。
模拟器最怕什么?最怕CPU频率切换时的卡顿。你正打着《超级马里奥》呢,突然CPU降频了,画面一抖,马里奥掉坑里了。
我建议直接锁定性能模式:
echo "performance" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
然后检查一下频率是不是跑满了:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
应该能看到接近1.2GHz或者1.3GHz的值(取决于你的H3体质)。
/etc/rc.local,保证每次开机都自动锁定性能模式。我曾经忘了加,结果有一次客户演示时系统没锁频,卡得我满头汗。
3.2 内核编译选项定制
这部分是重头戏。很多教程会告诉你“下载内核源码,make menuconfig,然后编译”。但具体要改哪些选项,没人细说。
我直接给你列出来,照着做就行。
3.2.1 获取源码与配置
先拉Armbian的内核源码:
git clone https://github.com/armbian/build
cd build
./compile.sh kernel-config
这会弹出一个菜单界面。咱们重点关注这几个地方:
3.2.2 必须开启的选项
| 选项路径 | 说明 | 为什么重要 |
|---|---|---|
CPU Power Management → CPU Frequency scaling → [*] CPU Frequency scaling |
开启调频支持 | 虽然我们锁频了,但内核需要这个模块 |
Device Drivers → Graphics support → [*] DRM driver for Allwinner SoCs |
全志显示驱动 | 没有这个,你连画面都看不到 |
File systems → [*] FUSE (Filesystem in Userspace) support |
用户态文件系统 | 很多模拟器ROM需要挂载 |
Networking support → [*] TCP/IP networking |
网络协议栈 | 虽然可以关,但留着方便调试 |
3.2.3 必须关闭的选项
这些是拖后腿的,统统关掉:
Networking support → Bluetooth subsystem support—— 游戏机要蓝牙干嘛?Device Drivers → Sound card support → [ ] Sound card support—— 如果你用HDMI音频,这个可以关。用3.5mm接口的话得留着。Kernel hacking → [ ] Debug Filesystem—— 调试信息占内存,关掉。General setup → [ ] Auditing support—— 审计功能,用不上。
3.2.4 编译与安装
配置好之后,保存退出,然后:
./compile.sh kernel
这个过程大概20-40分钟,取决于你的编译机器性能。H3本身也能编译,但太慢了,我建议在PC上交叉编译。
编译完成后,把生成的boot.scr和zImage复制到SD卡的第一分区,覆盖原文件。重启即可。
3.3 Swap分区策略
全志H3的内存只有512MB或者1GB。跑一些大型模拟器(比如PSP、N64),内存很容易吃紧。
Swap分区就是用来救急的。但怎么配,有讲究。
3.3.1 要不要用Swap?
我的答案是:要用,但要控制好。
为什么?因为H3用的是eMMC或者SD卡,读写速度远不如DDR内存。如果Swap用得太多,频繁换入换出,反而会卡死。
我个人习惯是:
- 内存512MB的板子:配256MB Swap
- 内存1GB的板子:配512MB Swap
别配太大。配2GB Swap?那是在折磨你的SD卡。
3.3.2 创建Swap文件
用文件方式创建Swap,比分区灵活:
dd if=/dev/zero of=/swapfile bs=1M count=256
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
然后写入/etc/fstab,保证开机自动挂载:
/swapfile none swap sw 0 0
3.3.3 Swapiness调优
这是关键。Linux内核有个参数叫swappiness,控制内核使用Swap的倾向。默认值是60,太高了。
对于H3这种嵌入式设备,我建议调到10-20之间:
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
为什么?swappiness=60意味着内核在内存用到40%左右就开始往Swap里写。你想想看,本来内存就不大,还提前用Swap,那不是自找麻烦吗?
调到10之后,内核会尽量把数据留在内存里,实在撑不住了才用Swap。这样模拟器运行时,大部分数据都在内存里,速度有保障。
3.4 本章小结
这一章咱们干了三件事:
- 把Armbian系统里没用的服务全关了,CPU锁在最高频
- 定制了内核,去掉了蓝牙、调试等累赘,保留了显示和网络核心功能
- 配了一个小容量的Swap,把swappiness调低,让内存物尽其用
做完这些,你的H3已经比默认状态快了不少。下一章咱们开始折腾模拟器本身,那才是真正出效果的地方。
对了,如果你在编译内核时遇到报错,多半是依赖没装全。执行apt-get install build-essential libncurses-dev装一下基础工具链就行。我曾经在Ubuntu 20.04上踩过这个坑,折腾了半小时才发现是缺了libncurses-dev。
好,第三章就到这儿。动手试试吧。