1. 环境准备:打造稳定的开发基石
第一次接触Lichee Nano时,我最头疼的就是环境配置。官方文档虽然提供了基础指引,但就像拼图少了关键几块,总让人在操作时卡壳。经过多次实践,我总结出一套稳定可靠的配置方案,特别适合刚入门的朋友。
虚拟机选择上,实测VMWare Player确实对USB设备支持最友好。记得有次尝试用VirtualBox,结果烧录时总是识别不到设备,白白浪费半天时间。Ubuntu版本建议用18.04 LTS,比官方推荐的16.04对新硬件兼容性更好。安装时记得勾选"OpenSSH server"选项,后续远程操作会方便很多。
系统装好后先别急着操作,这几个基础依赖必须装全:
sudo apt update && sudo apt install -y git make gcc bison flex libssl-dev libncurses5-dev有次我偷懒没装libncurses5-dev,结果编译内核时menuconfig界面直接报错退出,排查了半天才发现是这个包没装。建议把这些基础包装齐后做个虚拟机快照,后续出问题可以快速回滚。
2. 工具链配置:交叉编译的关键
交叉编译工具链就像翻译官,把我们在x86电脑上写的代码转换成ARM芯片能理解的指令。官方推荐的Linaro 7.2.1版本确实稳定,但下载速度可能很慢。这里分享个小技巧:先用迅雷等工具下载到Windows,再拖进虚拟机。
配置环境变量时容易踩的坑是权限问题。有次我按教程修改了/etc/bash.bashrc,结果普通用户下死活不生效。后来发现需要先source ~/.bashrc,或者直接新开终端窗口。验证是否成功有个更直观的方法:
arm-linux-gnueabi-gcc --version如果看到类似"gcc version 7.2.1"的输出就说明配置正确。遇到问题时可以试试用sudo su切换到root账户再验证,这能快速判断是否是权限问题。
3. 烧录工具安装:与硬件对话的桥梁
sunxi-tools是连接电脑和开发板的重要工具,但编译时经常会遇到libusb报错。除了安装libusb-1.0-0-dev,还需要注意:
sudo apt install pkg-config zlib1g-dev有一次编译失败就是因为漏装了zlib1g-dev,错误信息却只提示libusb问题,让我走了不少弯路。
开发板进入FEL模式有诀窍:先按住板上的FEL按钮(靠近USB口的小按钮),再插入USB线,保持按住约3秒。用以下命令检测是否成功:
sudo sunxi-fel ver看到Allwinner SOC信息就说明进入烧录模式了。如果没反应,试试换个USB口,或者检查虚拟机USB设备是否正确分配给Ubuntu。
4. 源码编译实战:从u-boot到内核
获取u-boot源码时,记得切换nano分支:
git checkout nano-v2018.01编译配置有个易错点:spiflash版和非spiflash版的defconfig文件不同。我第一次编译用的默认配置,结果烧录后完全没反应。正确的配置命令是:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig内核编译更考验耐心,建议先修改make的-j参数为CPU线程数。我用的脚本自动处理依赖关系:
sudo apt install -y libssl-dev bc make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 zImage dtbs modules编译内核模块时,out目录要提前创建并设置好权限,否则可能报错。整个过程可能需要30分钟到1小时,建议在性能较好的机器上操作。
5. 文件系统与镜像打包
Buildroot制作根文件系统时,下载速度慢是常见问题。我找到的解决方案是修改dl镜像源:
sed -i 's/https:\/\/downloads.buildroot.net/http:\/\/mirrors.ustc.edu.cn\/buildroot/g' .config打包脚本需要特别注意路径问题。我改良过的脚本会自动检测各组件路径:
#!/bin/bash check_file() { [ ! -f "$1" ] && echo "错误: 文件 $1 不存在" && exit 1 } check_file u-boot/u-boot-sunxi-with-spl.bin check_file linux/arch/arm/boot/zImage [ ! -d "linux/out/lib/modules" ] && echo "警告: 内核模块目录不存在"6. 常见问题排查指南
遇到编译错误时,首先要看错误信息的最后几行。比如出现"fatal error: openssl/xxx.h"时,需要安装:
sudo apt install libssl-dev烧录后没反应的情况,我总结出三步排查法:
- 检查电源指示灯是否亮起
- 用串口查看uboot输出(需要USB转TTL工具)
- 重新进入FEL模式尝试烧录
最让我抓狂的一次经历是spi-flash接触不良,症状是时而能烧录时而不能。后来用热风枪轻轻加热芯片才解决。建议新手准备个放大镜,经常检查焊点情况。
7. 开发效率提升技巧
配置git加速能节省大量时间:
git config --global url."https://ghproxy.com/https://github.com".insteadOf https://github.com我习惯用tmux管理多个会话,一个窗口编译内核,另一个编辑代码。基础配置如下:
sudo apt install tmux tmux new -s lichee # Ctrl+b % 分割窗口,Ctrl+b o切换窗口对于频繁使用的长命令,可以做成alias放在~/.bashrc里:
alias lichee-make="make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4"8. 进阶开发环境搭建
当基本环境跑通后,可以尝试更高效的开发方式。我推荐使用VSCode远程开发,配置步骤如下:
sudo apt install code code --install-extension ms-vscode-remote.vscode-remote-extensionpack调试内核时printk输出不够直观,我改用netconsole:
setenv ncip 192.168.1.100 setenv serverip 192.168.1.101 setenv bootargs console=ttyS0,115200 console=tty0 root=/dev/mtdblock2 rootfstype=jffs2 rw rootwait init=/sbin/init mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) loglevel=8记得在主机端启动监听:
nc -lukp 6666